diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ff5785d6ef3f..957528eaa8fe 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -8,200 +8,201 @@ # Dominion/Cyberboss -/.github/workflows/update_tgs_dmapi.yml @Cyberboss -/.tgs.yml @Cyberboss -/code/world.dm @Cyberboss -/code/__DEFINES/tgs.config.dm @Cyberboss -/code/__DEFINES/tgs.dm @Cyberboss -/code/__DEFINES/_globals.dm @Cyberboss -/code/__HELPERS/chat.dm @Cyberboss -/code/__HELPERS/jatum.dm @Cyberboss -/code/game/world.dm @Cyberboss -/code/controllers/subsystem/atoms.dm @Cyberboss -/code/controllers/globals.dm @Cyberboss -/code/datums/helper_datums/getrev.dm @Cyberboss -/code/modules/tgs/ @Cyberboss -/code/ze_genesis_call/ @Cyberboss -/tools/tgs_test/ @Cyberboss +#/.github/workflows/update_tgs_dmapi.yml @Cyberboss +#/.tgs.yml @Cyberboss +#/code/world.dm @Cyberboss +#/code/__DEFINES/tgs.config.dm @Cyberboss +#/code/__DEFINES/tgs.dm @Cyberboss +#/code/__DEFINES/_globals.dm @Cyberboss +#/code/__HELPERS/chat.dm @Cyberboss +#/code/__HELPERS/jatum.dm @Cyberboss +#/code/game/world.dm @Cyberboss +#/code/controllers/subsystem/atoms.dm @Cyberboss +#/code/controllers/globals.dm @Cyberboss +#/code/datums/helper_datums/getrev.dm @Cyberboss +#/code/modules/tgs/ @Cyberboss +#/code/ze_genesis_call/ @Cyberboss +#/tools/tgs_test/ @Cyberboss # Fikou -/code/modules/awaymissions/ @Fikou -/code/modules/mining/ @Fikou -/code/modules/mod/ @Fikou -/code/modules/mapfluff/ruins/lavalandruin_code/ @Fikou -/code/modules/mapfluff/ruins/lavaland_ruin_code.dm @Fikou +#/code/modules/awaymissions/ @Fikou +#/code/modules/mining/ @Fikou +#/code/modules/mod/ @Fikou +#/code/modules/mapfluff/ruins/lavalandruin_code/ @Fikou +#/code/modules/mapfluff/ruins/lavaland_ruin_code.dm @Fikou # JohnFulpWizard -/code/modules/mob/living/simple_animal/bot/ @JohnFulpWillard -/code/modules/modular_computers/ @JohnFulpWillard +#/code/modules/mob/living/simple_animal/bot/ @JohnFulpWillard +#/code/modules/modular_computers/ @JohnFulpWillard # Kylerace -/code/__DEFINES/spatial_gridmap.dm @Kylerace -/code/controllers/subsystem/spatial_gridmap.dm @Kylerace +#/code/__DEFINES/spatial_gridmap.dm @Kylerace +#/code/controllers/subsystem/spatial_gridmap.dm @Kylerace # LemonInTheDark -/.github/guides/VISUALS.md @LemonInTheDark -/code/_onclick/hud/ @LemonInTheDark -/code/__DEFINES/layers.dm @LemonInTheDark +#/.github/guides/VISUALS.md @LemonInTheDark +#/code/_onclick/hud/ @LemonInTheDark +#/code/__DEFINES/layers.dm @LemonInTheDark # Mothblocks -/.github/workflows/ @Mothblocks -/code/game/gamemodes/ @Mothblocks -/code/modules/autowiki/ @Mothblocks -/code/modules/unit_tests/ @Mothblocks -/code/modules/client/preferences/ @Mothblocks -/code/modules/client/preferences_menu.dm @Mothblocks -/tgui/packages/tgui/interfaces/PreferencesMenu/ @Mothblocks -/tools/maplint/source/ @Mothblocks -/tools/pull_request_hooks/ @Mothblocks -/tools/screenshot-test-comparison/ @Mothblocks -/tools/test_merge_bot/ @Mothblocks +#/.github/workflows/ @Mothblocks +#/code/game/gamemodes/ @Mothblocks +#/code/modules/autowiki/ @Mothblocks +#/code/modules/unit_tests/ @Mothblocks +#/code/modules/client/preferences/ @Mothblocks +#/code/modules/client/preferences_menu.dm @Mothblocks +#/tgui/packages/tgui/interfaces/PreferencesMenu/ @Mothblocks +#/tools/ezdb/ @Mothblocks +#/tools/maplint/source/ @Mothblocks +#/tools/pull_request_hooks/ @Mothblocks +#/tools/screenshot-test-comparison/ @Mothblocks +#/tools/test_merge_bot/ @Mothblocks # MrMelbert -/code/modules/hydroponics/ @MrMelbert +#/code/modules/hydroponics/ @MrMelbert # ninjanomnom -/code/__DEFINES/dcs/ @ninjanomnom -/code/controllers/subsystem/dcs.dm @ninjanomnom -/code/controllers/subsystem/shuttle.dm @ninjanomnom -/code/datums/components/ @ninjanomnom -/code/datums/elements/ @ninjanomnom -/code/modules/shuttle/ @ninjanomnom +#/code/__DEFINES/dcs/ @ninjanomnom +#/code/controllers/subsystem/dcs.dm @ninjanomnom +#/code/controllers/subsystem/shuttle.dm @ninjanomnom +#/code/datums/components/ @ninjanomnom +#/code/datums/elements/ @ninjanomnom +#/code/modules/shuttle/ @ninjanomnom # Ryll-Ryll/Shaps -/code/datums/wounds/ @Ryll-Ryll -/code/datums/status_effects/wound_effects.dm @Ryll-Ryll -/code/__DEFINES/wounds.dm @Ryll-Ryll +#/code/datums/wounds/ @Ryll-Ryll +#/code/datums/status_effects/wound_effects.dm @Ryll-Ryll +#/code/__DEFINES/wounds.dm @Ryll-Ryll # san7890 -/code/game/area/ @san7890 -/icons/area/ @san7890 +#/code/game/area/ @san7890 +#/icons/area/ @san7890 # stylemistake -/code/__DEFINES/chat.dm @stylemistake -/code/__DEFINES/tgui.dm @stylemistake -/code/controllers/subsystem/chat.dm @stylemistake -/code/controllers/subsystem/ping.dm @stylemistake -/code/controllers/subsystem/tgui.dm @stylemistake -/code/modules/tgchat/ @stylemistake -/code/modules/tgui/ @stylemistake -/code/modules/tgui_panel/ @stylemistake -/tgui/ @stylemistake +#/code/__DEFINES/chat.dm @stylemistake +#/code/__DEFINES/tgui.dm @stylemistake +#/code/controllers/subsystem/chat.dm @stylemistake +#/code/controllers/subsystem/ping.dm @stylemistake +#/code/controllers/subsystem/tgui.dm @stylemistake +#/code/modules/tgchat/ @stylemistake +#/code/modules/tgui/ @stylemistake +#/code/modules/tgui_panel/ @stylemistake +#/tgui/ @stylemistake # stylemistake (explicitly disowned) -/tgui/packages/tgui/interfaces/ -/tgui/packages/tgui/styles/interfaces/ -/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss -/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss +#/tgui/packages/tgui/interfaces/ +#/tgui/packages/tgui/styles/interfaces/ +#/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss +#/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss # SuperNovaa41 -/code/modules/forensics/ @SuperNovaa41 -/code/datums/mood.dm @SuperNovaa41 +#/code/modules/forensics/ @SuperNovaa41 +#/code/datums/mood.dm @SuperNovaa41 # Time-Green -/code/modules/plumbing/ @Time-Green -/code/modules/surgery/organs/external/ @Time-Green +#/code/modules/plumbing/ @Time-Green +#/code/modules/surgery/organs/external/ @Time-Green # tralezab -/code/__DEFINES/basic_mobs.dm @tralezab -/code/datums/ai @tralezab -/code/modules/mob/living/basic/ @tralezab +#/code/__DEFINES/basic_mobs.dm @tralezab +#/code/datums/ai @tralezab +#/code/modules/mob/living/basic/ @tralezab # Watermelon914 -/code/modules/wiremod/ @Watermelon914 -/code/modules/antagonists/traitor/ @Watermelon914 +#/code/modules/wiremod/ @Watermelon914 +#/code/modules/antagonists/traitor/ @Watermelon914 # ZephyrTFA -/code/__HELPERS/admin_verb.dm @ZephyrTFA -/code/controllers/subsystem/admin_verbs.dm @ZephyrTFA -/code/datums/json_savefile.dm @ZephyrTFA -/code/datums/armor/ @ZephyrTFA -/code/modules/admin/verbs/ @ZephyrTFA -/code/modules/logging/ @ZephyrTFA +#/code/__HELPERS/admin_verb.dm @ZephyrTFA +#/code/controllers/subsystem/admin_verbs.dm @ZephyrTFA +#/code/datums/json_savefile.dm @ZephyrTFA +#/code/datums/armor/ @ZephyrTFA +#/code/modules/admin/verbs/ @ZephyrTFA +#/code/modules/logging/ @ZephyrTFA # CONTRIBUTORS # Cobby -/code/modules/reagents/ @ExcessiveUseOfCobblestone -/code/modules/research/designs/medical_designs.dm @ExcessiveUseOfCobblestone -/code/game/objects/items/storage/medkit.dm @ExcessiveUseOfCobblestone +#/code/modules/reagents/ @ExcessiveUseOfCobblestone +#/code/modules/research/designs/medical_designs.dm @ExcessiveUseOfCobblestone +#/code/game/objects/items/storage/medkit.dm @ExcessiveUseOfCobblestone # Jordie0608 -/SQL/ @Jordie0608 -/code/controllers/subsystem/dbcore.dm @Jordie0608 -/tools/SQLAlertEmail/ @Jordie0608 +#/SQL/ @Jordie0608 +#/code/controllers/subsystem/dbcore.dm @Jordie0608 +#/tools/SQLAlertEmail/ @Jordie0608 # Kapu1178 -/code/modules/surgery/bodyparts/ @Kapu1178 -/code/modules/surgery/organs/ @Kapu1178 -/code/modules/mob/living/carbon/carbon_update_icons.dm @Kapu1178 -/code/modules/mob/living/carbon/human/human_update_icons.dm @Kapu1178 +#/code/modules/surgery/bodyparts/ @Kapu1178 +#/code/modules/surgery/organs/ @Kapu1178 +#/code/modules/mob/living/carbon/carbon_update_icons.dm @Kapu1178 +#/code/modules/mob/living/carbon/human/human_update_icons.dm @Kapu1178 # MrStonedOne -/SQL/database_changelog.txt @MrStonedOne -/code/__DEFINES/MC.dm @MrStonedOne -/code/controllers/admin.dm @MrStonedOne -/code/controllers/master.dm @MrStonedOne -/code/controllers/failsafe.dm @MrStonedOne -/code/controllers/subsystem.dm @MrStonedOne -/code/controllers/subsystem/timer.dm @MrStonedOne -/code/controllers/configuration/entries @MrStonedOne -/config/ @MrStonedOne +#/SQL/database_changelog.txt @MrStonedOne +#/code/__DEFINES/MC.dm @MrStonedOne +#/code/controllers/admin.dm @MrStonedOne +#/code/controllers/master.dm @MrStonedOne +#/code/controllers/failsafe.dm @MrStonedOne +#/code/controllers/subsystem.dm @MrStonedOne +#/code/controllers/subsystem/timer.dm @MrStonedOne +#/code/controllers/configuration/entries @MrStonedOne +#/config/ @MrStonedOne # NamelessFairy -/code/modules/capture_the_flag/ @NamelessFairy -/_maps/map_files/CTF/ @NamelessFairy +#/code/modules/capture_the_flag/ @NamelessFairy +#/_maps/map_files/CTF/ @NamelessFairy # Pickle-Coding -/code/__DEFINES/atmospherics/ @Pickle-Coding -/code/__DEFINES/reactions.dm @Pickle-Coding -/code/modules/atmospherics/ @Pickle-Coding -/code/modules/power/ @Pickle-Coding +#/code/__DEFINES/atmospherics/ @Pickle-Coding +#/code/__DEFINES/reactions.dm @Pickle-Coding +#/code/modules/atmospherics/ @Pickle-Coding +#/code/modules/power/ @Pickle-Coding # MULTIPLE OWNERS -/_maps/ @EOBGames @Maurukas @MMMiracles @san7890 @ShizCalev -/icons/ @Imaginos16 @Krysonism @Twaticus -/icons/ass/ @Ghilker @tralezab - -/code/__DEFINES/atmospherics/ @Ghilker @LemonInTheDark -/code/__HELPERS/logging/ @dragomagol @ZephyrTFA -/code/controllers/subsystem/air.dm @LemonInTheDark @MrStonedOne -/code/modules/atmospherics/ @Ghilker @LemonInTheDark -/code/modules/client/preferences.dm @Mothblocks @ZephyrTFA -/code/modules/client/preferences_savefile.dm @Mothblocks @ZephyrTFA -/code/modules/jobs/job_types/chief_medical_officer.dm @ExcessiveUseOfCobblestone @Ryll-Ryll -/code/modules/jobs/job_types/medical_doctor.dm @ExcessiveUseOfCobblestone @Ryll-Ryll -/code/modules/jobs/job_types/paramedic.dm @ExcessiveUseOfCobblestone @Ryll-Ryll -/code/modules/surgery/ @ExcessiveUseOfCobblestone @Ryll-Ryll -/tools/build/ @MrStonedOne @stylemistake -/tools/tgs_scripts/ @Cyberboss @MrStonedOne - -/tools/WebhookProcessor/ @BraveMole @TiviPlus +#/_maps/ @EOBGames @Maurukas @MMMiracles @san7890 @ShizCalev +#/icons/ @Imaginos16 @Krysonism @Twaticus +#/icons/ass/ @Ghilker @tralezab + +#/code/__DEFINES/atmospherics/ @Ghilker @LemonInTheDark +#/code/__HELPERS/logging/ @dragomagol @ZephyrTFA +#/code/controllers/subsystem/air.dm @LemonInTheDark @MrStonedOne +#/code/modules/atmospherics/ @Ghilker @LemonInTheDark +#/code/modules/client/preferences.dm @Mothblocks @ZephyrTFA +#/code/modules/client/preferences_savefile.dm @Mothblocks @ZephyrTFA +#/code/modules/jobs/job_types/chief_medical_officer.dm @ExcessiveUseOfCobblestone @Ryll-Ryll +#/code/modules/jobs/job_types/medical_doctor.dm @ExcessiveUseOfCobblestone @Ryll-Ryll +#/code/modules/jobs/job_types/paramedic.dm @ExcessiveUseOfCobblestone @Ryll-Ryll +#/code/modules/surgery/ @ExcessiveUseOfCobblestone @Ryll-Ryll +#/tools/build/ @MrStonedOne @stylemistake +#/tools/tgs_scripts/ @Cyberboss @MrStonedOne + +#/tools/WebhookProcessor/ @BraveMole @TiviPlus # SIC SEMPER TYRANNIS -/code/modules/hydroponics/grown/citrus.dm @optimumtact +#/code/modules/hydroponics/grown/citrus.dm @optimumtact diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 4610343baa04..f747c23b8612 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -110,8 +110,9 @@ Things you **CAN'T** do: - [Hard Deletes](./guides/HARDDELETES.md) - [MC Tab Guide](./guides/MC_tab.md) - [Policy Configuration System](./guides/POLICYCONFIG.md) -- [Splitting up pull requests, aka atomization](./guides/ATOMIZATION.md) +- [Quickly setting up a development database with ezdb](./guides/EZDB.md) - [Required Tests (Continuous Integration)](./guides/CI.md) +- [Splitting up pull requests, aka atomization](./guides/ATOMIZATION.md) - [UI Development](../tgui/README.md) - [Visual Effects and Systems](./guides/VISUALS.md) diff --git a/.github/alternate_byond_versions.txt b/.github/alternate_byond_versions.txt index 02ebe04a40b8..4ca0a019262a 100644 --- a/.github/alternate_byond_versions.txt +++ b/.github/alternate_byond_versions.txt @@ -6,4 +6,4 @@ # Example: # 500.1337: runtimestation -515.1620: runtimestation +515.1627: runtimestation diff --git a/.github/guides/EZDB.md b/.github/guides/EZDB.md new file mode 100644 index 000000000000..428a819ab4d1 --- /dev/null +++ b/.github/guides/EZDB.md @@ -0,0 +1,12 @@ +# Quickly setting up a development database with ezdb +While you do not need a database to code for tgstation, it is a prerequisite to many important features, especially on the admin side. Thus, if you are working in any code that benefits from it, it can be helpful to have one handy. + +**ezdb** is a tool for quickly setting up an isolated development database. It will manage downloading MariaDB, creating the database, setting it up, and updating it when the code evolves. It is not recommended for use in production servers, but is perfect for quick development. + +To run ezdb, go to `tools/ezdb`, and double-click on ezdb.bat. This will set up the database on port 1338, but you can configure this with `--port`. When it is done, you should be able to launch tgstation as normal and have database access. This runs on the same Python bootstrapper as things like the map merge tool, which can sometimes be flaky. + +If you wish to delete the ezdb database, delete the `db` folder as well as `config/ezdb.txt`. + +To update ezdb, run the script again. This will both look for any updates in the database changelog, as well as update your schema revision. + +Contact Mothblocks if you face any issues in this process. diff --git a/.github/workflows/auto_changelog.yml b/.github/workflows/auto_changelog.yml index 13b580547011..a7280acd15f9 100644 --- a/.github/workflows/auto_changelog.yml +++ b/.github/workflows/auto_changelog.yml @@ -21,4 +21,4 @@ jobs: script: | const { processAutoChangelog } = await import('${{ github.workspace }}/tools/pull_request_hooks/autoChangelog.js') await processAutoChangelog({ github, context }) - github-token: ${{ secrets.COMFY_ORANGE_PAT || secrets.GITHUB_TOKEN }} + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml index b5ed61226f2f..22abc209c990 100644 --- a/.github/workflows/ci_suite.yml +++ b/.github/workflows/ci_suite.yml @@ -15,7 +15,7 @@ on: - master jobs: run_linters: - if: "!contains(github.event.head_commit.message, '[ci skip]')" + if: ( !contains(github.event.head_commit.message, '[ci skip]') ) name: Run Linters runs-on: ubuntu-22.04 concurrency: @@ -57,7 +57,8 @@ jobs: bash tools/ci/check_changelogs.sh bash tools/ci/check_grep.sh bash tools/ci/check_misc.sh - tools/bootstrap/python tools/validate_dme.py > $GITHUB_OUTPUT run_all_tests: - if: "!contains(github.event.head_commit.message, '[ci skip]')" + if: ( !contains(github.event.head_commit.message, '[ci skip]') ) name: Integration Tests needs: [collect_data] strategy: @@ -205,7 +225,7 @@ jobs: path: artifacts/screenshot_comparisons test_windows: - if: "!contains(github.event.head_commit.message, '[ci skip]')" + if: ( !contains(github.event.head_commit.message, '[ci skip]') ) name: Windows Build needs: [collect_data] runs-on: windows-latest diff --git a/.github/workflows/compile_changelogs.yml b/.github/workflows/compile_changelogs.yml index c35e4ad4fab2..fefd9de30ea2 100644 --- a/.github/workflows/compile_changelogs.yml +++ b/.github/workflows/compile_changelogs.yml @@ -51,4 +51,4 @@ jobs: if: steps.value_holder.outputs.ACTIONS_ENABLED uses: ad-m/github-push-action@master with: - github_token: ${{ secrets.COMFY_ORANGE_PAT || secrets.GITHUB_TOKEN }} + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/tgs_test.yml b/.github/workflows/tgs_test.yml index 5123a2d447cb..37062e440735 100644 --- a/.github/workflows/tgs_test.yml +++ b/.github/workflows/tgs_test.yml @@ -38,7 +38,7 @@ env: PR_NUMBER: ${{ github.event.number }} jobs: test_tgs_docker: - if: "!contains(github.event.head_commit.message, '[ci skip]')" + if: ( !contains(github.event.head_commit.message, '[ci skip]') ) name: Test TGS Docker runs-on: ubuntu-22.04 concurrency: @@ -50,19 +50,19 @@ jobs: env: Database__DatabaseType: Sqlite Database__ConnectionString: Data Source=TGS_TGTest.sqlite3;Mode=ReadWriteCreate - General__ConfigVersion: 4.1.0 + General__ConfigVersion: 5.0.0 General__ApiPort: ${{ env.TGS_API_PORT }} General__SetupWizardMode: Never ports: - 5000:5000 #Can't use env here for some reason steps: - name: Setup dotnet - uses: actions/setup-dotnet@v2 + uses: actions/setup-dotnet@v4 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: Checkout Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Test TGS Integration run: dotnet run -c Release --project tools/tgs_test ${{ github.repository }} /tgs_instances/tgstation ${{ env.TGS_API_PORT }} ${{ github.event.pull_request.head.sha || github.sha }} ${{ secrets.GITHUB_TOKEN }} ${{ env.PR_NUMBER }} diff --git a/.github/workflows/update_tgs_dmapi.yml b/.github/workflows/update_tgs_dmapi.yml index fe4a917dcfd6..0ce490ad2a17 100644 --- a/.github/workflows/update_tgs_dmapi.yml +++ b/.github/workflows/update_tgs_dmapi.yml @@ -7,11 +7,11 @@ on: jobs: update-dmapi: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 name: Update the TGS DMAPI steps: - name: Clone - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Branch run: | @@ -44,4 +44,4 @@ jobs: pr_body: "This pull request updates the TGS DMAPI to the latest version. Please note any changes that may be breaking or unimplemented in your codebase by checking what changes are in the definitions file: code/__DEFINES/tgs.dm before merging." pr_label: "Tools" pr_allow_empty: false - github_token: ${{ secrets.COMFY_ORANGE_PAT }} + github_token: ${{ secrets.COMFY_ORANGE_PAT || secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index ce296843c01a..5ea5d3502d2f 100644 --- a/.gitignore +++ b/.gitignore @@ -237,3 +237,10 @@ define_sanity_output.txt #This file contains developer-specific config overrides. These shouldn't be committed. config/_config_nogit.txt config/dbconfig.txt + +# ezdb +/db/ +/config/ezdb.txt + +# Running OpenDream locally +tgstation.json diff --git a/.tgs.yml b/.tgs.yml index 880ca67a61b7..76a53577b505 100644 --- a/.tgs.yml +++ b/.tgs.yml @@ -3,7 +3,7 @@ version: 1 # The BYOND version to use (kept in sync with dependencies.sh by the "TGS Test Suite" CI job) # Must be interpreted as a string, keep quoted -byond: "515.1630" +byond: "515.1633" # Folders to create in "/Configuration/GameStaticFiles/" static_files: # Config directory should be static diff --git a/.vscode/launch.json b/.vscode/launch.json index 42a293a33380..bf3a209531db 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,6 +8,13 @@ "preLaunchTask": "Build All", "dmb": "${workspaceFolder}/${command:CurrentDMB}" }, + { + "type": "byond", + "request": "launch", + "name": "Launch DreamSeeker (low memory mode)", + "preLaunchTask": "Build All (low memory mode)", + "dmb": "${workspaceFolder}/${command:CurrentDMB}" + }, { "type": "byond", "request": "launch", @@ -16,6 +23,14 @@ "dmb": "${workspaceFolder}/${command:CurrentDMB}", "dreamDaemon": true }, + { + "type": "byond", + "request": "launch", + "name": "Launch DreamDaemon (low memory mode)", + "preLaunchTask": "Build All (low memory mode)", + "dmb": "${workspaceFolder}/${command:CurrentDMB}", + "dreamDaemon": true + }, { "name": "Debug External Libraries", "type": "cppvsdbg", @@ -27,6 +42,18 @@ "-trusted" ], "preLaunchTask": "Build All" + }, + { + "name": "Debug External Libraries (low memory mode)", + "type": "cppvsdbg", + "request": "launch", + "program": "${command:dreammaker.returnDreamDaemonPath}", + "cwd": "${workspaceRoot}", + "args": [ + "${command:dreammaker.getFilenameDmb}", + "-trusted" + ], + "preLaunchTask": "Build All (low memory mode)" } ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 7226940826fc..6b9aaddb45c2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,6 +13,7 @@ }, "files.eol": "\n", "files.insertFinalNewline": true, + "git.branchProtection": ["master"], "gitlens.advanced.blame.customArguments": ["-w"], "tgstationTestExplorer.project.resultsType": "json", "[javascript]": { diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 711a13c7846c..18fb2fde1529 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -24,6 +24,30 @@ "dependsOn": "dm: reparse", "label": "Build All" }, + { + "type": "process", + "command": "tools/build/build", + "args": ["-DLOWMEMORYMODE"], + "windows": { + "command": ".\\tools\\build\\build.bat", + "args": ["-DLOWMEMORYMODE"] + }, + "options": { + "env": { + "DM_EXE": "${config:dreammaker.byondPath}" + } + }, + "problemMatcher": [ + "$dreammaker", + "$tsc", + "$eslint-stylish" + ], + "group": { + "kind": "build" + }, + "dependsOn": "dm: reparse", + "label": "Build All (low memory mode)" + }, { "type": "dreammaker", "dme": "tgstation.dme", diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.md similarity index 98% rename from SQL/database_changelog.txt rename to SQL/database_changelog.md index 7a41843535d6..c990427876e8 100644 --- a/SQL/database_changelog.txt +++ b/SQL/database_changelog.md @@ -2,19 +2,32 @@ Any time you make a change to the schema files, remember to increment the databa Make sure to also update `DB_MAJOR_VERSION` and `DB_MINOR_VERSION`, which can be found in `code/__DEFINES/subsystem.dm`. -The latest database version is 5.23; The query to update the schema revision table is: +The latest database version is 5.24; The query to update the schema revision table is: -INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 23); +```sql +INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 24); +``` or -INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 23); + +```sql +INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 24); +``` In any query remember to add a prefix to the table names if you use one. +----------------------------------------------------- +Version 5.24, 17 May 2023, by LemonInTheDark +Modified the library action table to fit ckeys properly, and to properly store ips. +```sql + ALTER TABLE `library_action` MODIFY COLUMN `ckey` varchar(32) NOT NULL; + ALTER TABLE `library_action` MODIFY COLUMN `ip_addr` int(10) unsigned NOT NULL; +``` + ----------------------------------------------------- Version 5.23, 28 December 2022, by Mothblocks Added `tutorial_completions` to mark what ckeys have completed contextual tutorials. -``` +```sql CREATE TABLE `tutorial_completions` ( `id` INT NOT NULL AUTO_INCREMENT, `ckey` VARCHAR(32) NOT NULL, @@ -27,7 +40,7 @@ CREATE TABLE `tutorial_completions` ( Version 5.22, 22 December 2021, by Mothblocks Fixes a bug in `telemetry_connections` that limited the range of IPs. -``` +```sql ALTER TABLE `telemetry_connections` MODIFY COLUMN `address` INT(10) UNSIGNED NOT NULL; ``` ----------------------------------------------------- @@ -35,7 +48,7 @@ ALTER TABLE `telemetry_connections` MODIFY COLUMN `address` INT(10) UNSIGNED NOT Version 5.21, 15 December 2021, by Mothblocks Adds `telemetry_connections` table for tracking tgui telemetry. -``` +```sql CREATE TABLE `telemetry_connections` ( `id` INT NOT NULL AUTO_INCREMENT, `ckey` VARCHAR(32) NOT NULL, @@ -53,7 +66,7 @@ CREATE TABLE `telemetry_connections` ( Version 5.20, 11 November 2021, by Mothblocks Adds `admin_ckey` field to the `known_alts` table to track who added what. -``` +```sql ALTER TABLE `known_alts` ADD COLUMN `admin_ckey` VARCHAR(32) NOT NULL DEFAULT '*no key*' AFTER `ckey2`; ``` @@ -62,7 +75,7 @@ ADD COLUMN `admin_ckey` VARCHAR(32) NOT NULL DEFAULT '*no key*' AFTER `ckey2`; Version 5.19, 10 November 2021, by WalterMeldron Adds an urgent column to tickets for ahelps marked as urgent. -``` +```sql ALTER TABLE `ticket` ADD COLUMN `urgent` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `sender`; ``` @@ -70,7 +83,7 @@ ALTER TABLE `ticket` ADD COLUMN `urgent` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0 Version 5.18, 1 November 2021, by Mothblocks Added `known_alts` table for tracking who not to create suspicious logins for. -``` +```sql CREATE TABLE `known_alts` ( `id` INT NOT NULL AUTO_INCREMENT, `ckey1` VARCHAR(32) NOT NULL, @@ -84,7 +97,7 @@ CREATE TABLE `known_alts` ( Version 5.17, 8 October 2021, by MrStonedOne + Mothblocks Changes any table that requrired a NOT NULL round ID to now accept NULL. In the BSQL past, these were handled as 0, but in the move to rust-g this behavior was lost. -``` +```sql ALTER TABLE `admin_log` CHANGE `round_id` `round_id` INT(11) UNSIGNED NULL; ALTER TABLE `ban` CHANGE `round_id` `round_id` INT(11) UNSIGNED NULL; ALTER TABLE `citation` CHANGE `round_id` `round_id` INT(11) UNSIGNED NULL; @@ -103,7 +116,7 @@ ALTER TABLE `ticket` CHANGE `round_id` `round_id` INT(11) UNSIGNED NULL; Version 5.16, 31 July 2021, by Atlanta-Ned Added `library_action` table for tracking reported library books and actions taken on them. -``` +```sql DROP TABLE IF EXISTS `library_action`; CREATE TABLE `library_action` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, @@ -122,7 +135,7 @@ CREATE TABLE `library_action` ( Version 5.15, 2 June 2021, by Mothblocks Added verified admin connection log used for 2FA -``` +```sql DROP TABLE IF EXISTS `admin_connections`; CREATE TABLE `admin_connections` ( `id` INT NOT NULL AUTO_INCREMENT, @@ -139,7 +152,7 @@ CREATE TABLE `admin_connections` ( Version 5.14, xx May 2021, by Anturke Added exploration drone adventure table -``` +```sql DROP TABLE IF EXISTS `text_adventures`; CREATE TABLE `text_adventures` ( `id` int(11) NOT NULL AUTO_INCREMENT, @@ -156,7 +169,7 @@ CREATE TABLE `text_adventures` ( Version 5.13, 30 April 2021, by Atlanta Ned Added the `citation` table for tracking security citations in the database. -``` +```sql CREATE TABLE `citation` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `round_id` INT(11) UNSIGNED NOT NULL, @@ -193,11 +206,13 @@ Version 5.11, 7 September 2020, by bobbahbrown, MrStonedOne, and Jordie0608 (Upd Adds indices to support search operations on the adminhelp ticket tables. This is to support improved performance on Atlanta Ned's Statbus. +```sql ALTER TABLE `ticket` ADD INDEX `idx_ticket_act_recip` (`action`, `recipient`), ADD INDEX `idx_ticket_act_send` (`action`, `sender`), ADD INDEX `idx_ticket_tic_rid` (`ticket`, `round_id`), ADD INDEX `idx_ticket_act_time_rid` (`action`, `timestamp`, `round_id`); +``` ----------------------------------------------------- @@ -207,6 +222,7 @@ Changes how the discord verification process works. Adds the discord_links table, and migrates discord id entries from player table to the discord links table in a once off operation and then removes the discord id on the player table +```sql START TRANSACTION; DROP TABLE IF EXISTS `discord_links`; @@ -225,6 +241,7 @@ INSERT INTO `discord_links` (`ckey`, `discord_id`, `one_time_token`, `valid`) SE ALTER TABLE `player` DROP COLUMN `discord_id`; COMMIT; +``` ----------------------------------------------------- @@ -234,6 +251,7 @@ Added the `deleted` column to tables 'poll_option', 'poll_textreply' and 'poll_v Changes table 'poll_question' column `createdby_ckey` to be NOT NULL and index `idx_pquest_time_admin` to be `idx_pquest_time_deleted_id` and 'poll_textreply' column `adminrank` to have no default. Added procedure `set_poll_deleted` that's called when deleting a poll to set deleted to true on each poll table where rows matching a poll_id argument. +```sql ALTER TABLE `poll_option` ADD COLUMN `deleted` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `default_percentage_calc`; @@ -266,19 +284,23 @@ UPDATE `poll_textreply` SET deleted = 1 WHERE pollid = poll_id; END $$ DELIMITER ; +``` ----------------------------------------------------- Version 5.8, 7 April 2020, by Jordie0608 Modified table `messages`, adding column `deleted_ckey` to record who deleted a message. +```sql ALTER TABLE `messages` ADD COLUMN `deleted_ckey` VARCHAR(32) NULL DEFAULT NULL AFTER `deleted`; +``` ----------------------------------------------------- Version 5.7, 10 January 2020 by Atlanta-Ned Added ticket table for tracking ahelp tickets in the database. +```sql DROP TABLE IF EXISTS `ticket`; CREATE TABLE `ticket` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, @@ -293,20 +315,23 @@ CREATE TABLE `ticket` ( `sender` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +``` ----------------------------------------------------- Version 5.6, 6 December 2019 by Anturke Added achievement_name and achievement_description columns to achievement_metadata table. - +```sql ALTER TABLE `achievement_metadata` ADD COLUMN (`achievement_name` VARCHAR(64) NULL DEFAULT NULL, `achievement_description` VARCHAR(512) NULL DEFAULT NULL); +``` ----------------------------------------------------- Version 5.5, 26 October 2019 by Anturke Added achievement_metadata table. +```sql DROP TABLE IF EXISTS `achievement_metadata`; CREATE TABLE `achievement_metadata` ( `achievement_key` VARCHAR(32) NOT NULL, @@ -314,7 +339,7 @@ CREATE TABLE `achievement_metadata` ( `achievement_type` enum('achievement','score','award') NULL DEFAULT NULL, PRIMARY KEY (`achievement_key`) ) ENGINE=InnoDB; - +``` ----------------------------------------------------- @@ -322,6 +347,7 @@ Version 5.4, 5 October 2019 by Anturke Added achievements table. See hub migration verb in _achievement_data.dm for details on migrating. +```sql CREATE TABLE `achievements` ( `ckey` VARCHAR(32) NOT NULL, `achievement_key` VARCHAR(32) NOT NULL, @@ -329,26 +355,32 @@ CREATE TABLE `achievements` ( `last_updated` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`ckey`,`achievement_key`) ) ENGINE=InnoDB; +``` ---------------------------------------------------- Version 5.3, 6 July 2019, by Atlanta-Ned Added a `feedback` column to the admin table, used for linking to individual admin feedback threads. Currently this is only used for statistics tracking tools such as Statbus and isn't used by the game. +```sql ALTER TABLE `admin` ADD `feedback` VARCHAR(255) NULL DEFAULT NULL AFTER `rank`; +``` ---------------------------------------------------- Version 5.2, 30 May 2019, by AffectedArc07 Added a field to the `player` table to track ckey and discord ID relationships +```sql ALTER TABLE `player` ADD COLUMN `discord_id` BIGINT NULL DEFAULT NULL AFTER `flags`; +``` ---------------------------------------------------- Version 5.1, 25 Feb 2018, by MrStonedOne Added four tables to enable storing of stickybans in the database since byond can lose them, and to enable disabling stickybans for a round without depending on a crash free round. Existing stickybans are automagically imported to the tables. +```sql CREATE TABLE `stickyban` ( `ckey` VARCHAR(32) NOT NULL, `reason` VARCHAR(2048) NOT NULL, @@ -381,6 +413,7 @@ CREATE TABLE `stickyban_matched_cid` ( `last_matched` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`stickyban`, `matched_cid`) ) ENGINE=InnoDB; +``` ---------------------------------------------------- @@ -390,6 +423,8 @@ Modified ban table to remove the need for the `bantype` column, a python script See the file 'ban_conversion_2018-10-28.py' for instructions on how to use the script. A new ban table can be created with the query: + +```sql CREATE TABLE `ban` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `bantime` DATETIME NOT NULL, @@ -419,6 +454,7 @@ CREATE TABLE `ban` ( KEY `idx_ban_isbanned_details` (`ckey`,`ip`,`computerid`,`role`,`unbanned_datetime`,`expiration_time`), KEY `idx_ban_count` (`bantime`,`a_ckey`,`applies_to_admins`,`unbanned_datetime`,`expiration_time`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; +``` ---------------------------------------------------- diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql index f35989e5e076..094f5ffcd6be 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -270,10 +270,10 @@ CREATE TABLE `library_action` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `book` int(10) unsigned NOT NULL, `reason` longtext DEFAULT NULL, - `ckey` varchar(11) NOT NULL DEFAULT '', + `ckey` varchar(32) NOT NULL DEFAULT '', `datetime` datetime NOT NULL DEFAULT current_timestamp(), `action` varchar(11) NOT NULL DEFAULT '', - `ip_addr` int(11) NOT NULL, + `ip_addr` int(10) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql index 5f070c98be40..89751912f66e 100644 --- a/SQL/tgstation_schema_prefixed.sql +++ b/SQL/tgstation_schema_prefixed.sql @@ -270,10 +270,10 @@ CREATE TABLE `SS13_library_action` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `book` int(10) unsigned NOT NULL, `reason` longtext DEFAULT NULL, - `ckey` varchar(11) NOT NULL DEFAULT '', + `ckey` varchar(32) NOT NULL DEFAULT '', `datetime` datetime NOT NULL DEFAULT current_timestamp(), `action` varchar(11) NOT NULL DEFAULT '', - `ip_addr` int(11) NOT NULL, + `ip_addr` int(10) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; diff --git a/__odlint.dm b/__odlint.dm new file mode 100644 index 000000000000..b7c120514a1d --- /dev/null +++ b/__odlint.dm @@ -0,0 +1,10 @@ +// This file is included right at the start of the DME. +// Its purpose is to enable multiple lints (pragmas) that are supported by OpenDream to better validate the codebase +// These are essentially nitpicks the DM compiler should pick up on but doesnt + +#if !defined(SPACEMAN_DMM) && defined(OPENDREAM) +// This is in a separate file as a hack to avoid SpacemanDMM +// evaluating the #pragma lines, even if its outside a block it cares about +// (Also so people can code-own it. Shoutout to AA) +#include "tools/ci/od_lints.dm" +#endif diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm index e6be68cae54f..1cc77a4beaef 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm @@ -37,7 +37,7 @@ /turf/open/floor/catwalk_floor/iron, /area/ruin/planetengi) "as" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/effect/turf_decal/trimline/yellow/filled/warning{ diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_mailroom.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_mailroom.dmm index 64c6856d76c7..5d2b80bf29fe 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_mailroom.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_mailroom.dmm @@ -62,7 +62,7 @@ /turf/open/floor/plating/snowed/smoothed/icemoon, /area/ruin/powered/mailroom) "gO" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 4 }, /turf/open/floor/carpet/green, @@ -128,7 +128,7 @@ /turf/open/floor/carpet/royalblack, /area/ruin/powered/mailroom) "lw" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /turf/open/floor/carpet/green, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index 333ea08d00e7..48be608380c6 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -718,6 +718,12 @@ /obj/effect/mapping_helpers/apc/syndicate_access, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/book/manual/wiki/infections{ + pixel_y = 7 + }, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/syringe/antiviral, /turf/open/floor/iron/white/side{ dir = 9 }, @@ -731,6 +737,12 @@ /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm/directional/east, +/obj/item/storage/box/vials, +/obj/item/storage/box/vials, +/obj/item/device/antibody_scanner, +/obj/item/device/antibody_scanner, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/gloves/latex, /turf/open/floor/iron/white/side{ dir = 5 }, @@ -797,14 +809,8 @@ /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/syndicate_lava_base/cargo) "fA" = ( -/obj/structure/table/glass, -/obj/item/book/manual/wiki/infections{ - pixel_y = 7 - }, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/spray/cleaner, /obj/structure/cable, +/obj/machinery/computer/diseasesplicer, /turf/open/floor/iron/white/side{ dir = 8 }, @@ -820,6 +826,9 @@ /obj/machinery/smartfridge/chemistry/virology/preloaded, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, +/obj/item/weapon/virusdish/random, +/obj/item/weapon/virusdish/random, +/obj/item/weapon/virusdish/random, /turf/open/floor/iron/white/side{ dir = 5 }, @@ -985,7 +994,6 @@ }, /area/ruin/syndicate_lava_base/virology) "gV" = ( -/obj/structure/chair/office/light, /turf/open/floor/iron, /area/ruin/syndicate_lava_base/virology) "gX" = ( @@ -1110,7 +1118,6 @@ }, /area/ruin/syndicate_lava_base/virology) "hs" = ( -/obj/machinery/computer/pandemic, /obj/effect/decal/cleanable/dirt, /obj/machinery/button/door{ id = "lavalandsyndi_virology"; @@ -1118,45 +1125,33 @@ pixel_x = -26; req_access = list("syndicate") }, +/obj/machinery/disease2/incubator, /turf/open/floor/iron/white/side{ dir = 10 }, /area/ruin/syndicate_lava_base/virology) "ht" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/hand_labeler, -/obj/item/pen/red, -/obj/item/restraints/handcuffs, /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/glasses/science, +/obj/structure/chair/office/light, /turf/open/floor/iron/white/side, /area/ruin/syndicate_lava_base/virology) "hu" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder, -/obj/item/stack/sheet/mineral/plasma{ - amount = 5 - }, -/obj/item/stack/sheet/mineral/uranium{ - amount = 10 - }, -/obj/item/stack/sheet/mineral/gold{ - amount = 10 - }, /turf/open/floor/iron/white/side, /area/ruin/syndicate_lava_base/virology) "hv" = ( -/obj/machinery/disposal/bin, /obj/structure/sign/warning/deathsposal/directional/east, -/obj/effect/turf_decal/stripes/red/box, -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/structure/disposalpipe/segment, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 5 }, -/obj/effect/decal/cleanable/dirt, +/obj/item/pen/red, +/obj/item/hand_labeler, +/obj/item/restraints/handcuffs, +/obj/item/clothing/glasses/science, +/obj/item/storage/box/monkeycubes/mousecubes, +/obj/item/storage/box/monkeycubes/mousecubes, /turf/open/floor/iron/white/side{ dir = 6 }, @@ -2390,6 +2385,10 @@ /obj/effect/mapping_helpers/no_lava, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"pf" = ( +/obj/machinery/disease2/centrifuge, +/turf/open/floor/iron, +/area/ruin/syndicate_lava_base/virology) "pm" = ( /obj/structure/extinguisher_cabinet/directional/south, /obj/effect/turf_decal/stripes/line, @@ -2569,6 +2568,20 @@ dir = 1 }, /area/ruin/syndicate_lava_base/chemistry) +"rL" = ( +/obj/item/stack/sheet/mineral/gold{ + amount = 10 + }, +/obj/item/stack/sheet/mineral/uranium{ + amount = 10 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/obj/machinery/reagentgrinder, +/obj/structure/table, +/turf/open/floor/iron, +/area/ruin/syndicate_lava_base/virology) "rO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /obj/structure/cable, @@ -4088,6 +4101,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2, /turf/open/floor/iron/white, /area/ruin/syndicate_lava_base/virology) +"Tz" = ( +/obj/machinery/disease2/diseaseanalyser, +/turf/open/floor/iron, +/area/ruin/syndicate_lava_base/virology) "TO" = ( /obj/machinery/portable_atmospherics/canister, /turf/open/floor/iron, @@ -4412,6 +4429,15 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/cargo) +"YT" = ( +/obj/machinery/disposal/bin, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/red/box, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/syndicate_lava_base/virology) "YU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4{ dir = 1 @@ -5116,13 +5142,13 @@ eI Cu gU hs +Tz hH ab ab ab ab ab -ab dG dG ig @@ -5166,12 +5192,12 @@ fA sd gV ht +pf hH ab ab ab ab -ab dG dG ig @@ -5216,11 +5242,11 @@ fB KI yp hu +rL hH ab ab ab -ab dG dG ig @@ -5266,10 +5292,10 @@ fC tf gX hv +YT hH ab ab -ab dG dG ig diff --git a/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm b/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm index 0d97c9d3c7a6..584b3f145de0 100644 --- a/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm +++ b/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm @@ -1138,7 +1138,6 @@ /obj/effect/turf_decal/siding/purple{ dir = 9 }, -/obj/machinery/monkey_recycler, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/dark, /area/misc/anomaly_research) diff --git a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm index 315eb9230633..61949bb291af 100644 --- a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm +++ b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm @@ -611,7 +611,7 @@ health = 25; maxHealth = 25; name = "hatchling"; - resize = 0.85 + current_size = 0.85 }, /turf/open/floor/iron, /area/ruin/space/has_grav/derelictoutpost) @@ -627,7 +627,7 @@ health = 25; maxHealth = 25; name = "hatchling"; - resize = 0.85 + current_size = 0.85 }, /turf/open/floor/iron, /area/ruin/space/has_grav/derelictoutpost) @@ -1467,7 +1467,7 @@ health = 25; maxHealth = 25; name = "hatchling"; - resize = 0.85 + current_size = 0.85 }, /turf/open/misc/asteroid, /area/ruin/space/has_grav/derelictoutpost) diff --git a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm index ae83dbaa38df..783e37062c12 100644 --- a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm +++ b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm @@ -338,7 +338,7 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/hellfactoryoffice) "bg" = ( -/obj/machinery/modular_computer/console/preset/civilian, +/obj/machinery/modular_computer/preset/civilian, /turf/open/floor/iron, /area/ruin/space/has_grav/hellfactory) "bh" = ( diff --git a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm index 3cbe3ca2ddc3..fb1cc9c069e9 100644 --- a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm +++ b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm @@ -375,9 +375,8 @@ /turf/open/floor/carpet/black, /area/ruin/space/has_grav/powered/hilbertresearchfacility) "jC" = ( -/mob/living/simple_animal/slime{ - colour = "bluespace"; - rabid = 1 +/mob/living/basic/slime{ + current_color = /datum/slime_color/bluespace }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/mineral/titanium/tiled/purple, @@ -903,9 +902,8 @@ /turf/open/floor/mineral/titanium/tiled/white, /area/ruin/space/has_grav/powered/hilbertresearchfacility) "wY" = ( -/mob/living/simple_animal/slime{ - colour = "bluespace"; - rabid = 1 +/mob/living/basic/slime{ + current_color = /datum/slime_color/bluespace }, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/hilbertresearchfacility) @@ -1610,7 +1608,6 @@ /area/ruin/space/has_grav/powered/hilbertresearchfacility) "JW" = ( /obj/machinery/light/broken/directional/north, -/obj/machinery/monkey_recycler, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/hilbertresearchfacility) "Kd" = ( @@ -2192,9 +2189,8 @@ dir = 10 }, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/slime{ - colour = "bluespace"; - rabid = 1 +/mob/living/basic/slime{ + current_color = /datum/slime_color/bluespace }, /turf/open/floor/mineral/titanium/tiled/purple, /area/ruin/space/has_grav/powered/hilbertresearchfacility) @@ -2330,9 +2326,8 @@ /turf/open/floor/wood, /area/ruin/space/has_grav/powered/hilbertresearchfacility) "Ze" = ( -/mob/living/simple_animal/slime{ - colour = "bluespace"; - rabid = 1 +/mob/living/basic/slime{ + current_color = /datum/slime_color/bluespace }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/mineral/plastitanium, diff --git a/_maps/RandomRuins/SpaceRuins/old_infiltrator.dmm b/_maps/RandomRuins/SpaceRuins/old_infiltrator.dmm index dfcdf0852910..287712dddb1f 100644 --- a/_maps/RandomRuins/SpaceRuins/old_infiltrator.dmm +++ b/_maps/RandomRuins/SpaceRuins/old_infiltrator.dmm @@ -215,7 +215,7 @@ pixel_y = -4; pixel_x = -7 }, -/obj/item/camera_bug{ +/obj/item/computer_disk/syndicate/camera_app{ pixel_x = -5; pixel_y = 9 }, diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index cff5ce4e560e..d1b6e937645d 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -5278,7 +5278,7 @@ /area/ruin/space/ancientstation/charlie/hall) "we" = ( /obj/machinery/light/small/directional/north, -/obj/machinery/modular_computer/console/preset/engineering, +/obj/machinery/modular_computer/preset/engineering, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) "wg" = ( diff --git a/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm b/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm index 86ea8c855cc8..71074aa4451f 100644 --- a/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm +++ b/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm @@ -74,7 +74,7 @@ /turf/open/floor/oldshuttle, /area/ruin/space/has_grav/powered) "t" = ( -/obj/machinery/power/generator, +/obj/machinery/power/thermoelectric_generator, /turf/open/floor/oldshuttle, /area/ruin/space/has_grav/powered) "u" = ( diff --git a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm index b39dc8bf0fed..b0b2d4dca38e 100644 --- a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm +++ b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm @@ -215,7 +215,7 @@ "aS" = ( /obj/structure/table/reinforced, /obj/machinery/light/directional/south, -/obj/item/camera_bug, +/obj/item/computer_disk/syndicate/camera_app, /turf/open/floor/iron, /area/ruin/space/has_grav/turretedoutpost) "aT" = ( diff --git a/_maps/RandomRuins/SpaceRuins/waystation.dmm b/_maps/RandomRuins/SpaceRuins/waystation.dmm index 9f4c138fec8c..4e92c32d61eb 100644 --- a/_maps/RandomRuins/SpaceRuins/waystation.dmm +++ b/_maps/RandomRuins/SpaceRuins/waystation.dmm @@ -2142,7 +2142,7 @@ name = "Loading Doors"; pixel_y = 6 }, -/obj/machinery/modular_computer/console/preset{ +/obj/machinery/modular_computer/preset{ dir = 8 }, /turf/open/floor/iron, diff --git a/_maps/_basemap.dm b/_maps/_basemap.dm index 0ca8b906560e..60ffa1b88918 100644 --- a/_maps/_basemap.dm +++ b/_maps/_basemap.dm @@ -1,4 +1,4 @@ -//area#define LOWMEMORYMODE //uncomment this to load centcom and runtime station and thats it. +//#define LOWMEMORYMODE //uncomment this to load centcom and runtime station and thats it. #include "map_files\generic\CentCom.dmm" diff --git a/_maps/boxstation.json b/_maps/boxstation.json new file mode 100644 index 000000000000..a984fb9f93a0 --- /dev/null +++ b/_maps/boxstation.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "map_name": "Box Station", + "map_path": "map_files/BoxStation", + "map_file": "BoxStation.dmm", + "shuttles": { + "cargo": "cargo_box", + "emergency": "emergency_cere", + "ferry": "ferry_kilo", + "whiteship": "whiteship_box" + }, + "traits": [ + { + "Linkage": "Cross", + "Bombcap Multiplier": 0.8 + } + ], + "job_changes": { + "Prisoner": { + "total_positions": 5, + "spawn_positions": 8 + }, + "Security Officer": { + "total_positions": 7, + "spawn_positions": 17 + } + } +} diff --git a/_maps/map_files/Basketball/lusty_xenomorphs.dmm b/_maps/map_files/Basketball/lusty_xenomorphs.dmm index 6aa3dae075e7..0be3c0688e97 100644 --- a/_maps/map_files/Basketball/lusty_xenomorphs.dmm +++ b/_maps/map_files/Basketball/lusty_xenomorphs.dmm @@ -218,7 +218,7 @@ /turf/open/floor/engine, /area/centcom/basketball) "pu" = ( -/mob/living/simple_animal/slime/random, +/mob/living/basic/slime/random, /turf/open/floor/engine, /area/centcom/basketball) "qU" = ( @@ -529,18 +529,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/white, /area/centcom/basketball) -"Se" = ( -/obj/machinery/computer/camera_advanced/xenobio, -/turf/open/floor/iron/white, -/area/centcom/basketball) -"Tc" = ( -/obj/machinery/monkey_recycler, -/turf/open/floor/iron/white, -/area/centcom/basketball) -"Uq" = ( -/obj/machinery/processor/slime, -/turf/open/floor/iron/white, -/area/centcom/basketball) "Uv" = ( /obj/effect/decal/cleanable/xenoblood/xgibs/torso, /turf/open/floor/engine, @@ -820,7 +808,7 @@ Hu (9,1,1) = {" Hu Lu -Tc +JM ly AI LS @@ -901,7 +889,7 @@ Hu (12,1,1) = {" Hu Lu -Se +JM OB Vr Vr @@ -982,7 +970,7 @@ Hu (15,1,1) = {" Hu Lu -Uq +JM ly rU LS diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm new file mode 100644 index 000000000000..c157be159a4e --- /dev/null +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -0,0 +1,136552 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aav" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"aaA" = ( +/obj/effect/turf_decal/box/white, +/obj/effect/turf_decal/arrows/white{ + color = "#0000FF"; + pixel_y = 15 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"aaB" = ( +/obj/machinery/light/directional/north, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/modular_computer/preset/engineering, +/turf/open/floor/iron, +/area/station/engineering/main) +"aaN" = ( +/obj/machinery/airalarm/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"aaT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"aaX" = ( +/obj/structure/frame/machine, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"abc" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/warden) +"abf" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/science/genetics/cloning) +"abo" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/machinery/computer/diseasesplicer, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"abC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"abG" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/structure/sign/departments/maint/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"abS" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Xenobiology - Secure Cell Interior"; + name = "xenobiology camera"; + network = list("ss13","xeno","rd") + }, +/obj/machinery/light/neon_lining{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"abT" = ( +/obj/machinery/computer/records/security, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"acc" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/bot, +/obj/structure/closet/secure_closet/security/sec, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"acf" = ( +/obj/machinery/light/directional/south, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"acl" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/flora/bush/flowers_pp/style_random, +/mob/living/basic/butterfly, +/turf/open/floor/grass, +/area/station/command/bridge) +"aco" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/floor/has_bulb, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"acE" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"acL" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"acN" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/modular_computer/preset/engineering, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"acW" = ( +/obj/structure/chair, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"acX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"adc" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"adk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) +"adm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/gateway) +"adw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/main) +"adB" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"adC" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"adK" = ( +/obj/structure/flora/bush/jungle, +/obj/item/food/grown/banana, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"adP" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"adT" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/airalarm/directional/south, +/obj/structure/closet{ + name = "Evidence Closet" + }, +/turf/open/floor/iron/dark, +/area/station/security/evidence) +"aee" = ( +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/security/prison/workout) +"aen" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"aeJ" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/trimline/purple/line, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"aeM" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/prison/shower) +"aeY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8 + }, +/obj/effect/mapping_helpers/mail_sorting/supply/qm_office, +/turf/open/floor/plating, +/area/station/maintenance/port) +"afh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/barricade/wooden, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"afl" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/structure/table/wood, +/obj/item/storage/crayons, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"afv" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/machinery/light/directional/south, +/obj/machinery/computer/cargo{ + dir = 1 + }, +/obj/machinery/button/door/directional/south{ + id = "qm_load_door"; + name = "Loading Doors"; + req_access = list("cargo"); + pixel_x = 6 + }, +/obj/machinery/button/door/directional/south{ + id = "qm_load_door_2"; + name = "Loading Doors"; + req_access = list("cargo"); + pixel_x = -6 + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/storage) +"afJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"afR" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/structure/table, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil{ + pixel_y = 7; + pixel_x = 3 + }, +/obj/item/screwdriver, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/storage/primary) +"aga" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/line, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"agf" = ( +/obj/machinery/space_heater, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"agv" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/crowbar/red, +/obj/item/wrench, +/obj/item/screwdriver, +/obj/item/radio, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"agx" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"agK" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"ahd" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"ahi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 4 + }, +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) +"ahj" = ( +/obj/structure/closet/secure_closet/research_director, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) +"ahn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/engineering/main) +"ahA" = ( +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/station/solars/port/fore) +"ahC" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/bed/dogbed/mcgriff, +/mob/living/basic/pet/dog/pug/mcgriff, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"ahW" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "atmos_hfr"; + name = "HFR Shutters" + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/hfr_room) +"ahZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"aij" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"aim" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"air" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"ait" = ( +/turf/closed/wall, +/area/station/security/medical) +"aiw" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/peppermill{ + desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; + pixel_x = -8; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + layer = 3.1; + pixel_x = -2; + pixel_y = 2 + }, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"aiy" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/obj/structure/sign/departments/lawyer/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"aiG" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/structure/cable, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"aiI" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"aiR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/engineering{ + name = "Power Transmission Laser" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/engine_smes) +"aiS" = ( +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"ajn" = ( +/turf/closed/wall, +/area/station/security/prison/mess) +"ajt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"ajG" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/sign/departments/maint/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"ajR" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"ajT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/tcommsat/computer) +"aky" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 9 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"akO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "Port Docking Bay 1" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/entry) +"ald" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"alf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/item/radio/intercom/directional/south{ + freerange = 1; + frequency = 1447; + listening = 0; + name = "Private Channel" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/camera/directional/south{ + c_tag = "AI Sat - Antechamber"; + name = "satellite camera"; + network = list("minisat") + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat_interior) +"ali" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"alj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"alv" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"aly" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"alJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/sign/warning/no_smoking/directional/east, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"alM" = ( +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"alP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"aml" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/suit_storage_unit/security, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"ams" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"amD" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/solars/port/aft) +"amE" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Starboard Bow Solar Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/landmark/navigate_destination/common/starboardbowsolar, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"amL" = ( +/turf/open/floor/iron/dark, +/area/station/security/prison/shower) +"amZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/chair, +/obj/effect/landmark/start/chemist, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"anh" = ( +/obj/effect/turf_decal/trimline/green/filled/corner, +/obj/effect/turf_decal/trimline/green/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"anp" = ( +/obj/structure/closet/crate/medical, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"anq" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"any" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"anM" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/obj/item/food/mint{ + pixel_y = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"anO" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) +"anP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) +"aoc" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Mix to Port Mix" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"aof" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/arrow_ccw{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/flasher/directional/east{ + id = "brig_entry_flash" + }, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"aoj" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/computer/rdconsole, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"aoB" = ( +/obj/machinery/airalarm/directional/east, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"aoL" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/main) +"api" = ( +/turf/open/floor/iron, +/area/station/cargo/sorting) +"apt" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"apw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/carpet/red, +/area/station/commons/dorms) +"apA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_b) +"apE" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain) +"apJ" = ( +/obj/structure/cable, +/obj/machinery/camera/emp_proof/directional/north{ + c_tag = "Engineering - External Particle Accelerator, Northeast"; + name = "engineering camera" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"apT" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/light/directional/north, +/obj/structure/sign/departments/science/directional/north, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"apU" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron/white, +/area/station/science/research) +"aqa" = ( +/obj/structure/hoop{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/security/prison/workout) +"aqf" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"aqh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch{ + name = "Satellite Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"aqj" = ( +/obj/machinery/light/directional/west, +/obj/structure/chair/comfy/beige, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"aqD" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/obj/machinery/status_display/evac/directional/west, +/obj/machinery/mecha_part_fabricator{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"aqP" = ( +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/airlock/atmos/glass{ + name = "Turbine Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible/layer4, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos) +"aqQ" = ( +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"aqW" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"ara" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/sign/warning/radiation/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"arj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Garden Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"arJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/carpet/neon/simple/green, +/area/station/science/xenobiology) +"arL" = ( +/obj/machinery/corral_corner{ + mapping_id = "3" + }, +/obj/machinery/light/neon_lining{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"arN" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/cable/multilayer/connected, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"arP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"arQ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "heads_meeting"; + name = "Privacy Blast Door" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/meeting_room) +"arR" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"arU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/general/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"asi" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"asp" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"ast" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Security - Cell 3"; + name = "security camera" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"asu" = ( +/obj/machinery/computer/monitor{ + dir = 1; + name = "backup power monitoring console" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"asC" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark, +/area/station/security/office) +"asE" = ( +/obj/machinery/computer/records/security, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"asT" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/sorting) +"atm" = ( +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain) +"ats" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Security - Escape Pod Bay 3"; + name = "security camera" + }, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/dark/smooth_large, +/area/station/maintenance/department/security) +"att" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/white, +/area/station/science/research) +"atv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/blobstart, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"atN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ + dir = 8 + }, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"atO" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "O2 Outlet Pump" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"atW" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/structure/table/wood, +/obj/item/newspaper{ + pixel_x = -5 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/clothing/head/soft/grey{ + pixel_x = 6; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/station/commons/locker) +"aub" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 8 + }, +/obj/structure/sign/directions/command/directional/east{ + pixel_y = 9 + }, +/obj/structure/sign/directions/engineering/directional/east, +/obj/structure/sign/directions/security/directional/east{ + pixel_y = -9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"auf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/particle_accelerator/control_box, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"aug" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/lab) +"auu" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"aux" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"auF" = ( +/obj/structure/sign/warning/electric_shock/directional/east, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"auG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"auK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"auL" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = -9; + pixel_y = 16 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_y = 16 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = 9; + pixel_y = 16 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/engineering/storage_shared) +"auW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"avo" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"avz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"avB" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/security/medical) +"avD" = ( +/obj/item/bot_assembly/floorbot, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"avI" = ( +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/tcommsat/computer) +"avL" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"avR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/explab) +"aww" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 9 + }, +/obj/structure/closet/l3closet/scientist, +/turf/open/floor/iron/white, +/area/station/science/research) +"awE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"awI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) +"awX" = ( +/obj/structure/chair/stool/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"axc" = ( +/obj/structure/sign/poster/contraband/grey_tide/directional/south, +/obj/machinery/status_display/ai/directional/east, +/obj/structure/closet/crate/freezer, +/obj/effect/spawner/random/food_or_drink/soup, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/turf/open/floor/wood, +/area/station/commons/locker) +"axv" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/iv_drip, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"axx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/splatter, +/obj/item/restraints/handcuffs/cable/zipties/used, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"axF" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"axG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"axH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/delivery/white, +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"axN" = ( +/obj/docking_port/stationary{ + dir = 4; + dwidth = 12; + height = 18; + name = "BoxStation emergency evac bay"; + width = 32; + shuttle_id = "emergency_home" + }, +/turf/open/space/basic, +/area/space) +"axZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"aya" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"ayh" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/checkpoint/customs/auxiliary) +"ayi" = ( +/turf/open/floor/carpet, +/area/station/service/library) +"ayq" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 1 + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"ayr" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/landmark/start/captain, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"ayu" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"azm" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/structure/sign/departments/aiupload/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"azn" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/green/corner, +/obj/structure/sign/departments/holy/directional/west, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"azE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port) +"azP" = ( +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/hallway/secondary/service) +"azW" = ( +/turf/open/floor/iron/sepia, +/area/station/service/library/artgallery) +"aAl" = ( +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"aAm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/green/filled/warning, +/obj/effect/turf_decal/trimline/green/warning{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"aAF" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"aAJ" = ( +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/bot_white/left, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 8 + }, +/area/station/command/gateway) +"aAL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"aAM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/xenobiology) +"aAQ" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"aBj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/research/glass{ + name = "Genetics Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/genetics, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"aBx" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"aBz" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/structure/sign/departments/medbay/alt/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"aBA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"aBC" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/recharge_station, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"aBL" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"aBM" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/light/small/directional/west, +/obj/structure/table/glass, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"aBX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) +"aCw" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/reinforced, +/obj/item/disk/nuclear/fake/obvious{ + name = "nuclear authentication disk" + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"aCA" = ( +/obj/structure/chair/sofa/bench/left, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"aCF" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/engineering/storage_shared) +"aCG" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/cargo/storage) +"aDe" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"aDs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/storage/belt/utility, +/obj/item/storage/box, +/obj/item/storage/box, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/break_room) +"aDA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/medical/cryo) +"aDP" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"aDR" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/wood, +/area/station/maintenance/port/fore) +"aDS" = ( +/obj/machinery/washing_machine, +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"aEc" = ( +/obj/structure/cable, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"aEg" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) +"aEh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/hallway/secondary/service) +"aEs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"aFe" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/external{ + name = "External Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/white/textured_large, +/area/station/science/auxlab) +"aFp" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/status_display/door_timer{ + id = "Cell 3"; + name = "Cell 3"; + pixel_y = -32 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"aFt" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/storage) +"aFL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/item/stack/cable_coil, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"aFZ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Shared Storage" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/turf/open/floor/iron/textured, +/area/station/engineering/storage_shared) +"aGa" = ( +/obj/machinery/airalarm/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"aGd" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/office) +"aGj" = ( +/turf/open/floor/wood, +/area/station/medical/psychology) +"aGv" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + location = "QM #4" + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/storage) +"aGG" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/starboard/fore) +"aGU" = ( +/obj/item/radio/intercom/prison/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/workout) +"aHm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/security/interrogation) +"aHD" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/medbay/lobby) +"aHT" = ( +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"aHU" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/warning, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"aHW" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/structure/sign/poster/contraband/lizard/directional/west, +/obj/machinery/door/window/right/directional/north{ + name = "Medical Delivieries"; + req_access = list("medical") + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"aIe" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"aIi" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/engineering/main) +"aIk" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/radio/intercom/directional/north, +/obj/machinery/light/small/directional/north, +/obj/machinery/computer/operating{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/exam_room) +"aIn" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"aIp" = ( +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness) +"aIr" = ( +/obj/structure/sign/warning/biohazard/directional/north, +/obj/structure/chair, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"aIy" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"aIF" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"aII" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"aIK" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"aIN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"aIZ" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"aJq" = ( +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/commons/fitness) +"aJB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"aJC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Cryogenics Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"aJH" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/machinery/light/small/directional/north, +/obj/machinery/space_heater, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"aJJ" = ( +/obj/effect/spawner/random/structure/chair_flipped, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"aJK" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/break_room) +"aJU" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"aJV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Theater Backstage Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/theatre, +/turf/open/floor/plating, +/area/station/maintenance/port) +"aJZ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/machinery/computer/records/security{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"aKf" = ( +/obj/structure/foamedmetal, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"aKl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) +"aKy" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"aKB" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"aKM" = ( +/obj/machinery/button/door/directional/south{ + id = "qm_privacy"; + name = "Privacy Shutters Control" + }, +/obj/structure/closet/secure_closet/quartermaster, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"aKQ" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/leafy, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/grass, +/area/station/command/bridge) +"aKS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"aKU" = ( +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"aKY" = ( +/obj/structure/bed/pod, +/obj/item/bedsheet/clown, +/obj/effect/landmark/start/clown, +/turf/open/floor/eighties/red, +/area/station/service/theater) +"aLm" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side, +/area/station/engineering/break_room) +"aLo" = ( +/turf/open/floor/iron/white, +/area/station/science/circuits) +"aLp" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/reagent_dispensers/plumbed{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"aLr" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/light/directional/north, +/obj/structure/table, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/miningoffice) +"aLO" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"aLZ" = ( +/obj/structure/sign/poster/official/random/directional/north, +/obj/structure/closet/wardrobe/mixed, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/locker) +"aMh" = ( +/obj/machinery/chem_heater/withbuffer, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"aMo" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"aMw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"aMD" = ( +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"aMI" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics_sci_shutters"; + name = "Robotics Shutters" + }, +/turf/open/floor/plating, +/area/station/science/robotics/lab) +"aMJ" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate/coffin, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"aMX" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname/directional/south{ + dir = 5 + }, +/obj/machinery/duct, +/turf/open/floor/carpet/red, +/area/station/security/prison/safe) +"aNk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/commons/dorms) +"aNs" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/obj/structure/rack, +/obj/item/storage/briefcase, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"aNz" = ( +/obj/machinery/light/directional/west, +/obj/machinery/field/generator, +/turf/open/floor/plating, +/area/station/engineering/main) +"aNK" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"aNM" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"aNT" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"aOj" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"aOn" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"aOv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/tcommsat/computer) +"aOz" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"aON" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/holding_cell) +"aOU" = ( +/obj/effect/turf_decal/delivery/red, +/obj/machinery/suit_storage_unit/void_old, +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"aOY" = ( +/obj/structure/frame/computer{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"aOZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"aPe" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "Port Docking Bay 1" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/landmark/navigate_destination/dockaux, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/entry) +"aPy" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/station/maintenance/starboard/aft) +"aPW" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Security - Engineering Post"; + name = "security camera" + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/filingcabinet/security, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"aQt" = ( +/obj/structure/cable, +/obj/machinery/power/smes, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"aQu" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"aQy" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/closet/crate/secure/gear{ + req_access = list("brig"); + name = "Blue Shift Uniform Crate" + }, +/obj/item/clothing/under/rank/security/officer/blueshirt, +/obj/item/clothing/under/rank/security/officer/blueshirt, +/obj/item/clothing/under/rank/security/officer/blueshirt, +/obj/item/clothing/under/rank/security/officer/blueshirt, +/obj/item/clothing/under/rank/security/officer/blueshirt, +/obj/item/clothing/suit/armor/vest/blueshirt, +/obj/item/clothing/suit/armor/vest/blueshirt, +/obj/item/clothing/suit/armor/vest/blueshirt, +/obj/item/clothing/suit/armor/vest/blueshirt, +/obj/item/clothing/suit/armor/vest/blueshirt, +/obj/item/clothing/head/helmet/blueshirt, +/obj/item/clothing/head/helmet/blueshirt, +/obj/item/clothing/head/helmet/blueshirt, +/obj/item/clothing/head/helmet/blueshirt, +/obj/item/clothing/head/helmet/blueshirt, +/obj/effect/turf_decal/bot_white{ + color = "#1d5cdf" + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"aQC" = ( +/obj/effect/spawner/random/maintenance/three, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"aQG" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/security/courtroom) +"aRd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) +"aRy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/security/glass{ + name = "Cell 8" + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/safe) +"aRz" = ( +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"aRB" = ( +/obj/effect/turf_decal/delivery/red, +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/command/storage/eva) +"aRH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"aRJ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/button/door/directional/south{ + id = "robotics_pub_shutters"; + name = "Robotics Privacy Shutters Control"; + pixel_x = 6; + req_access = list("robotics") + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"aRM" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"aSa" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 1 + }, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 1 + }, +/area/station/command/gateway) +"aSe" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"aSg" = ( +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"aSr" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/white, +/area/station/science/research) +"aSt" = ( +/obj/docking_port/stationary{ + dir = 8; + dwidth = 2; + height = 13; + name = "port bay 3"; + shuttle_id = "ferry_home"; + width = 5 + }, +/turf/open/space/basic, +/area/space) +"aSx" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/small/directional/north, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/main) +"aSC" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"aSD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"aSF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research/glass{ + name = "Robotics Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/turf/open/floor/iron/textured, +/area/station/science/robotics/mechbay) +"aSJ" = ( +/obj/structure/closet/firecloset{ + anchored = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"aSO" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Service Hall Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/general, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) +"aSP" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname/directional/south{ + dir = 5 + }, +/obj/machinery/duct, +/turf/open/floor/carpet/blue, +/area/station/security/prison/safe) +"aSR" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/nestbox, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"aSW" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters{ + id = "departures_security_post"; + name = "Security Post Shutters" + }, +/turf/open/floor/plating, +/area/station/security/checkpoint/escape) +"aTh" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"aTl" = ( +/obj/structure/cable, +/obj/machinery/light/directional/north, +/obj/structure/closet/radiation, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal/incinerator) +"aTv" = ( +/obj/structure/chair, +/obj/machinery/flasher/directional/west{ + id = "visitation_prisoner_flash" + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"aTB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 5 + }, +/obj/machinery/light_switch/directional/north{ + pixel_x = -11 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/engineering/storage) +"aTC" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"aTS" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"aUh" = ( +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"aUi" = ( +/obj/effect/turf_decal/trimline/green/filled/warning, +/obj/effect/turf_decal/trimline/green/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"aUk" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/sign/poster/official/state_laws/directional/north, +/obj/structure/table/glass, +/obj/item/toy/plush/pkplush, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"aUn" = ( +/obj/structure/table, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"aUr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass_large, +/turf/open/floor/iron/dark/textured, +/area/station/service/library/lounge) +"aUs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/dark_blue/warning, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"aUx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/landmark/start/captain, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"aUL" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"aUO" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "QMLoad2"; + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"aUS" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"aUW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/construction) +"aVt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"aVy" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/storage/tech) +"aVA" = ( +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/explab) +"aVB" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outer_brig"; + name = "Brig Entrance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brigentrance" + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/brig/entrance) +"aVH" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"aVI" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/closet/crate/trashcart/laundry, +/obj/item/clothing/neck/scarf/black, +/obj/item/clothing/neck/scarf/purple, +/obj/item/clothing/neck/scarf/yellow, +/obj/item/clothing/neck/tie/black, +/obj/item/clothing/neck/tie/black, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"aVO" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/item/radio/intercom/directional/east, +/obj/machinery/newscaster/directional/north, +/obj/machinery/computer/security, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"aVR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai) +"aVV" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/machinery/meter, +/turf/open/floor/iron, +/area/station/science/ordnance) +"aWm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Telecommunications" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, +/obj/effect/landmark/navigate_destination/tcomms, +/turf/open/floor/iron/textured, +/area/station/tcommsat/computer) +"aWz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/fore) +"aWL" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"aWR" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/bitrunning/den) +"aXb" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/closet/firecloset{ + anchored = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"aXc" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"aXg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"aXm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"aXn" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/gravity_generator) +"aXq" = ( +/obj/structure/table, +/obj/item/stack/cable_coil/five, +/obj/item/wallframe/camera, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"aXB" = ( +/obj/effect/spawner/random/trash/box, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"aXI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"aXJ" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/machinery/newscaster/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/sorting) +"aXN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"aYa" = ( +/obj/structure/noticeboard/directional/west, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"aYn" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/poster/random_official, +/obj/effect/spawner/random/bureaucracy/stamp, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"aYs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron, +/area/station/engineering/storage) +"aYu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/cable_coil, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"aYE" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/structure/closet/secure_closet/security/sec, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"aYM" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/machinery/light/directional/east, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"aZc" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"aZe" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"aZn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/on, +/obj/machinery/sparker/directional/north{ + id = "execution_burn" + }, +/turf/open/floor/engine, +/area/station/security/execution) +"aZq" = ( +/turf/closed/wall, +/area/station/command/heads_quarters/cmo) +"aZW" = ( +/obj/structure/table, +/obj/machinery/recharger, +/obj/machinery/light/directional/south, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"baq" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/leafy, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"bar" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Security - Cell 2"; + name = "security camera" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"baC" = ( +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"baD" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/engineering/gravity_generator) +"baI" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/service/library) +"baL" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"baO" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/exit/departure_lounge) +"baP" = ( +/obj/machinery/light/built/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"baU" = ( +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/restraints/handcuffs{ + pixel_y = 3 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/camera/directional/west{ + c_tag = "Bridge - Port"; + name = "command camera" + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"bbc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/hop) +"bbe" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input{ + dir = 8 + }, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos) +"bbl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) +"bbm" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/department/engine/atmos) +"bbw" = ( +/obj/structure/chair/comfy/beige{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"bbI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"bbO" = ( +/obj/effect/turf_decal/trimline/purple/line, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "robotics_garage"; + name = "Garage Shutters Control"; + pixel_x = 6; + req_access = list("robotics") + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"bbV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "Escape Pod Two" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/landmark/navigate_destination/dockescpod2, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/entry) +"bck" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/door/poddoor/preopen{ + id = "execution_fireblast" + }, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/airlock/security/glass{ + name = "Justice Chamber Exterior" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/security/execution) +"bcp" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/circuits) +"bcq" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/hallway/secondary/service) +"bcw" = ( +/turf/open/floor/iron/cafeteria, +/area/station/maintenance/starboard/aft) +"bcF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"bcQ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space, +/area/station/solars/starboard/fore) +"bde" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/machinery/vending/wallmed/directional/north, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_a) +"bdf" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison/workout) +"bdg" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"bdl" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/large, +/area/station/commons/locker) +"bdq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/security/prison/workout) +"bdX" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"bem" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/space/basic, +/area/space/nearstation) +"ben" = ( +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/carpet, +/area/station/service/chapel) +"beM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"beP" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=AftH"; + location = "AIW" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"beQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"beS" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"beT" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"bfb" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/leafy, +/mob/living/basic/butterfly, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/grass, +/area/station/command/bridge) +"bff" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/engineering/storage) +"bfn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/prison/workout) +"bfx" = ( +/obj/effect/spawner/random/trash/moisture_trap, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"bfz" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/violet/visible/layer2, +/turf/open/floor/engine, +/area/station/science/ordnance/freezerchamber) +"bfQ" = ( +/obj/machinery/atmospherics/components/tank/air, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"bfT" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Shared Storage" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/machinery/duct, +/turf/open/floor/iron/textured, +/area/station/engineering/storage_shared) +"bgd" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/firealarm/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Central Hallway North-West" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"bgf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Hydroponics Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) +"bgm" = ( +/obj/machinery/light/built/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"bgz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"bgJ" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/neutral/corner, +/obj/structure/sign/warning/pods/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"bgK" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"bhd" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"bhf" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/security/prison) +"bhj" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"bho" = ( +/turf/open/floor/carpet/red, +/area/station/commons/vacant_room/office) +"bhw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"bhB" = ( +/obj/machinery/light_switch/directional/east, +/obj/machinery/firealarm/directional/south, +/obj/machinery/pdapainter/research, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) +"bhI" = ( +/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/airlock_controller/incinerator_atmos{ + pixel_x = -24 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"bia" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/mob/living/basic/goat/pete, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"bii" = ( +/obj/machinery/biomass_recycler, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"bir" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/commons/dorms) +"biu" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"bix" = ( +/obj/structure/table/wood, +/obj/item/food/grown/harebell, +/obj/item/food/grown/harebell, +/obj/item/food/grown/harebell, +/obj/item/food/grown/harebell, +/obj/item/food/grown/harebell, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"biz" = ( +/obj/structure/cable, +/turf/closed/wall/r_wall, +/area/station/security/brig/entrance) +"biI" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/structure/chair, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"biQ" = ( +/obj/effect/spawner/random/engineering/material_cheap, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"bjf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"bjg" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/miningoffice) +"bjn" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/structure/sign/directions/cryo/directional/north{ + dir = 4; + pixel_y = 23 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"bjY" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) +"bkB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"bkD" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/east, +/obj/structure/closet/crate/coffin, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"bkH" = ( +/obj/effect/turf_decal/stripes/box, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/target, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"bkM" = ( +/obj/machinery/light/directional/east, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"bkV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"ble" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"blh" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/obj/item/hand_labeler{ + pixel_y = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/cargo/sorting) +"bll" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/meter{ + name = "Mixed Air Tank Out" + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"blm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"blv" = ( +/turf/closed/wall, +/area/station/engineering/main) +"blA" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/machinery/status_display/evac/directional/south, +/obj/machinery/conveyor{ + id = "QMLoad"; + dir = 8 + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/storage) +"blC" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "secondary_shop"; + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"blE" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/structure/table, +/obj/item/kitchen/rollingpin, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 5 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"blQ" = ( +/turf/open/floor/iron/recharge_floor, +/area/station/science/robotics/mechbay) +"blR" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"blX" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/evidence) +"bma" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/virology{ + autoclose = 0; + frequency = 1449; + id_tag = "pathology_airlock_exterior"; + name = "Pathology Exterior Airlock" + }, +/obj/machinery/door_buttons/access_button{ + dir = 1; + idDoor = "pathology_airlock_exterior"; + idSelf = "pathology_airlock_control"; + name = "Pathology Access Button"; + pixel_x = 24; + pixel_y = -2; + req_access = list("pathology") + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/white/textured, +/area/station/medical/virology) +"bmp" = ( +/obj/machinery/door/airlock/grunge{ + id_tag = "toilet_1"; + name = "Stall 1" + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"bmq" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"bms" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"bmE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen_sec_shutters"; + name = "Kitchen Shutters"; + dir = 8 + }, +/obj/structure/desk_bell{ + pixel_y = 2; + pixel_x = 6 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/kitchen) +"bmT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" + }, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "atmos_rad_shutters"; + name = "Radiation Shutters" + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/storage) +"bna" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"bnl" = ( +/turf/closed/wall, +/area/station/maintenance/port) +"bnz" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"bnB" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"bnL" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/table, +/obj/machinery/light/small/directional/east, +/obj/item/flashlight{ + pixel_y = 13 + }, +/obj/item/wirecutters, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"bnM" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/bed/dogbed/runtime, +/mob/living/simple_animal/pet/cat/runtime, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/cmo) +"bnP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/telecomms/processor/preset_four, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"bod" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/flasher/directional/west{ + id = "Cell 3" + }, +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"boe" = ( +/obj/machinery/newscaster/directional/west, +/obj/structure/table, +/obj/item/clipboard, +/obj/item/folder/yellow, +/obj/item/pen{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/item/pen/red, +/obj/effect/spawner/random/entertainment/coin{ + pixel_y = 7; + pixel_x = 7 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"boj" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"bok" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"bop" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"bow" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/airlock/research{ + name = "Ordnance Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance_storage, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/textured, +/area/station/science/ordnance/storage) +"boF" = ( +/obj/effect/turf_decal/bot/right, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"boP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/food_or_drink/booze, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"boX" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/virology) +"bpe" = ( +/obj/structure/chair/office, +/obj/effect/landmark/start/lawyer, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"bpf" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"bpj" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "Labor Camp Shuttle Airlock"; + shuttledocked = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/turf/open/floor/iron/dark/textured_large, +/area/station/security/processing) +"bpr" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/grass, +/area/station/medical/virology) +"bpB" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"bpD" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"bpI" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/cryopod{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"bpU" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/ordnance/office) +"bpV" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/commons/locker) +"bqb" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"bqd" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"bqv" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"bqA" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"bqH" = ( +/obj/item/ammo_casing/shotgun/improvised, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"bqK" = ( +/obj/docking_port/stationary/laborcamp_home{ + dir = 8 + }, +/turf/open/space/basic, +/area/space) +"bqN" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/closet/secure_closet/miner{ + anchored = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/miningoffice) +"brd" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"brx" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"brU" = ( +/obj/machinery/computer/telecomms/server{ + dir = 4; + network = "tcommsat" + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/tcommsat/computer) +"bsd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/east{ + name = "Monkey Pen"; + req_access = list("genetics") + }, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"bsf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"bsg" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"bsl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/general/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "Common Mining Dock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/entry) +"bsm" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"bsp" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 8 + }, +/obj/structure/closet/emcloset, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"bsq" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/item/stack/ore/slag, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"bsx" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/structure/window/reinforced/tinted, +/obj/structure/toilet{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"bsB" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/structure/table/glass, +/obj/item/aicard, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"bsK" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/office) +"bsR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/port) +"bsX" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/structure/table, +/obj/item/stack/rods/ten, +/obj/item/assembly/prox_sensor, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"btf" = ( +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/commons/fitness) +"btg" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/table/glass, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/construction/plumbing, +/obj/item/plunger, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"btl" = ( +/obj/machinery/power/emitter, +/turf/open/floor/plating, +/area/station/engineering/main) +"btm" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/small/directional/north, +/obj/structure/rack, +/obj/effect/spawner/random/clothing/gloves, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"btp" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"btx" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/line, +/obj/structure/sign/directions/cryo/directional/north{ + dir = 4; + pixel_y = 23 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"btB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/frame/machine, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"btH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Main SMES Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/cable/layer1, +/turf/open/floor/iron/textured, +/area/station/engineering/engine_smes) +"btK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"btS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"btZ" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/research_director, +/turf/open/floor/carpet/purple, +/area/station/command/heads_quarters/rd) +"buz" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/paramedic, +/turf/open/floor/iron, +/area/station/medical/paramedic) +"buK" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"buR" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/cable, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/side, +/area/station/cargo/office) +"bva" = ( +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"bvc" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"bvd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/window{ + dir = 8; + name = "Mass Driver"; + req_access = list("chapel_office") + }, +/obj/machinery/mass_driver/chapelgun{ + dir = 4 + }, +/obj/item/gps, +/turf/open/floor/iron/dark/smooth_large, +/area/station/service/chapel/funeral) +"bve" = ( +/obj/effect/turf_decal/trimline/purple/line, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/north, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"bvm" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/wood, +/area/station/service/library) +"bvp" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/security/brig) +"bvv" = ( +/obj/structure/table, +/obj/item/storage/toolbox/electrical, +/obj/item/crowbar/red, +/obj/item/weldingtool, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/storage/primary) +"bvF" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/structure/reagent_dispensers/wall/peppertank/directional/south, +/obj/structure/closet/secure_closet/security/science, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"bvJ" = ( +/obj/item/radio/intercom/directional/west, +/obj/structure/liquid_pump, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"bvL" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/north, +/obj/machinery/airalarm/directional/north, +/obj/structure/tank_dispenser, +/turf/open/floor/iron, +/area/station/engineering/main) +"bvR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"bwa" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 5 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/secondary/service) +"bwg" = ( +/turf/closed/wall/r_wall, +/area/station/cargo/office) +"bwt" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/structure/closet/secure_closet/brig{ + id = "Cell 4"; + name = "Cell 4 Locker" + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"bwI" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"bwJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"bwW" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics) +"bwX" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"bxx" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/rack{ + icon = 'icons/obj/stationobjs.dmi'; + icon_state = "minibar"; + name = "skeletal minibar" + }, +/obj/item/storage/fancy/candle_box, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"bxy" = ( +/obj/item/stack/rods/fifty, +/obj/structure/rack, +/obj/item/stack/cable_coil{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + amount = 5 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) +"bxE" = ( +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"bxK" = ( +/obj/machinery/computer/security/telescreen/vault{ + pixel_y = 30 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/obj/machinery/light/directional/north, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"bxO" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "medbay_desk_shutters"; + name = "Medbay Front Desk Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/medical/office) +"bxZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden, +/turf/open/floor/engine, +/area/station/security/execution) +"byi" = ( +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"byj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"byk" = ( +/turf/open/floor/iron/dark, +/area/station/security/brig) +"bym" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"byp" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/clonepod, +/turf/open/floor/iron/white, +/area/station/science/genetics/cloning) +"byC" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/secure_area/directional/south, +/turf/open/space/basic, +/area/space/nearstation) +"byK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"byP" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/structure/table/wood, +/obj/item/clothing/neck/stethoscope, +/obj/item/flashlight/pen, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/cmo) +"byR" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/structure/closet/firecloset, +/turf/open/floor/iron/white, +/area/station/science/research) +"byX" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"bzw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"bzx" = ( +/obj/structure/closet/crate, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/matter_bin/adv, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"bzE" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/engineering/break_room) +"bzJ" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/computer/nanite_cloud_controller, +/turf/open/floor/iron/white, +/area/station/science/research) +"bzS" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"bzW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"bzX" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/auxlab) +"bAg" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"bAh" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"bAD" = ( +/turf/closed/wall, +/area/station/medical/surgery) +"bAF" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/structure/table/wood, +/obj/item/storage/box/bodybags, +/obj/item/shovel, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/fore) +"bAO" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron, +/area/station/science/ordnance) +"bAX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"bBA" = ( +/obj/item/radio/intercom/directional/west, +/obj/machinery/status_display/evac/directional/south, +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"bBE" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/security/courtroom) +"bBK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/light_switch/directional/west, +/obj/structure/closet/secure_closet/brig, +/turf/open/floor/iron/white, +/area/station/security/medical) +"bBO" = ( +/obj/effect/turf_decal/box/white{ + color = "#EFB341" + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"bBP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/port) +"bBQ" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/airalarm/directional/east, +/obj/machinery/computer/atmos_alert{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"bBR" = ( +/obj/effect/turf_decal/stripes/end, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/shower/directional/south, +/obj/machinery/iv_drip, +/obj/item/reagent_containers/blood, +/turf/open/floor/iron/white/textured, +/area/station/security/medical) +"bCg" = ( +/obj/machinery/light/small/built/directional/north, +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"bCh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"bCq" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 6 + }, +/obj/item/folder/yellow{ + pixel_y = 7 + }, +/obj/item/pen{ + pixel_y = 6 + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/miningoffice) +"bCt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"bCy" = ( +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"bCK" = ( +/obj/structure/bonfire, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"bCT" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"bDa" = ( +/obj/machinery/processor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"bDe" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/button/door/directional/north{ + id = "medbay_foyer"; + name = "Medbay Doors Control"; + req_access = list("medical"); + desc = "A remote control switch for the medbay foyer."; + normaldoorcontrol = 1; + pixel_x = -6 + }, +/obj/machinery/button/door/directional/north{ + name = "Medbay Front Desk Shutters Control"; + req_access = list("medical"); + pixel_x = 6; + id = "medbay_desk_shutters" + }, +/obj/machinery/computer/records/medical{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/office) +"bDm" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/requests_console/directional/north{ + department = "Circuits Lab"; + name = "Circuits Lab Requests Console"; + receive_ore_updates = 1; + supplies_requestable = 1 + }, +/obj/structure/table, +/obj/item/storage/toolbox/electrical{ + pixel_y = 10; + pixel_x = 8 + }, +/obj/item/storage/box/beakers{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/grenade/chem_grenade{ + pixel_x = -8; + pixel_y = 8 + }, +/obj/item/grenade/chem_grenade{ + pixel_x = -8; + pixel_y = 2 + }, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"bDt" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=HOP"; + location = "CHE" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"bDu" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/storage/toolbox/emergency, +/obj/item/crowbar/large, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"bDz" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/west, +/obj/structure/table, +/obj/item/storage/box/donkpockets/donkpocketberry, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"bDJ" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/hallway/secondary/service) +"bDL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"bDR" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/structure/closet/secure_closet/security/med, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"bDS" = ( +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/station/solars/starboard/aft) +"bDY" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Port Mix to Ports" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"bEa" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"bEs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) +"bEF" = ( +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness/recreation) +"bEL" = ( +/turf/closed/wall, +/area/station/maintenance/department/electrical) +"bEV" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"bFj" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"bFv" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/camera/autoname/directional/north, +/obj/effect/turf_decal/bot, +/obj/structure/closet/radiation, +/turf/open/floor/iron, +/area/station/science/ordnance) +"bFw" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/wrench, +/obj/item/shovel/spade, +/obj/item/hatchet, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"bFF" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"bFK" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/engineering/break_room) +"bFX" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/construction/mining/aux_base) +"bFY" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/closet/secure_closet/engineering_personal, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/storage_shared) +"bFZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"bGd" = ( +/obj/machinery/light/directional/east, +/obj/structure/closet/secure_closet/freezer/meat, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"bGl" = ( +/obj/machinery/firealarm/directional/east, +/obj/structure/sink/kitchen/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"bGn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/west, +/obj/structure/cable/layer3, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"bGo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/construction) +"bGu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet/red, +/area/station/commons/dorms) +"bGw" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/workout) +"bGF" = ( +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) +"bGJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"bGK" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen{ + desc = "Used for the Auxiliary Mining Base."; + name = "Auxiliary Base Monitor"; + network = list("auxbase"); + pixel_y = 28 + }, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"bGO" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Ports to Port Mix"; + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"bGX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"bGY" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"bHc" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"bHn" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/service/bar) +"bHo" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/sign/poster/random/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/eva) +"bHE" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/table/glass, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"bHL" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/cargo/miningoffice) +"bHQ" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"bHS" = ( +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"bHT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) +"bIb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/warning, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"bIc" = ( +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"bIf" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/purple/line{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"bIk" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"bIt" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/flashlight/flare/candle{ + pixel_x = 6 + }, +/obj/item/flashlight/flare/candle{ + pixel_x = -6 + }, +/obj/item/fakeartefact, +/obj/machinery/light/small/broken/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"bIu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"bIQ" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/library) +"bIY" = ( +/obj/structure/disposalpipe/junction/yjunction, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"bIZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/goonplaque, +/area/station/hallway/secondary/entry) +"bJd" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"bJn" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"bJK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"bJL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "bridge_blast_doors"; + name = "Bridge Access Blast Door" + }, +/obj/machinery/door/airlock/command/glass{ + name = "Head of Personnel's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/hop, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/hop) +"bJM" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/holopad, +/obj/structure/cable/layer3, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"bJR" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"bJT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/airalarm/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"bJW" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/engineering/material_cheap, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"bJZ" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/office) +"bKb" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/plaque{ + icon_state = "L2" + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"bKm" = ( +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/bot_white/right, +/turf/open/floor/iron/dark/smooth_corner, +/area/station/command/gateway) +"bKq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"bKE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"bKI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + id_tag = "medbay_foyer"; + name = "Medbay" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/landmark/navigate_destination/med, +/turf/open/floor/iron/white/textured, +/area/station/medical/medbay/lobby) +"bKL" = ( +/obj/structure/curtain/cloth, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"bKO" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"bKP" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"bKR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/telecomms/server/presets/security, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"bKW" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/item/storage/secure/safe/caps_spare/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"bKY" = ( +/obj/effect/decal/cleanable/generic, +/obj/structure/sign/poster/random/directional/north, +/obj/effect/spawner/random/structure/table, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"bLy" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/science) +"bLz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/atmos/glass{ + name = "Distribution Loop" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/atmos/pumproom) +"bLO" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/item/kirbyplants/random, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"bLR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/external{ + name = "Port Docking Bay 2" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/landmark/navigate_destination/dockarrival, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/entry) +"bLX" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"bMc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness) +"bMe" = ( +/obj/item/radio/intercom/directional/east, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"bMr" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/office) +"bMs" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/explab) +"bMv" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"bMw" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"bMy" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/structure/sign/departments/medbay/alt/directional/south, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"bMC" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"bMM" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"bMS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/captain/private) +"bMX" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/vending/wardrobe/det_wardrobe, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"bNi" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"bND" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/structure/sign/departments/botany/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"bNG" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/shaft_miner, +/turf/open/floor/iron/dark/side, +/area/station/cargo/miningoffice) +"bNK" = ( +/obj/structure/rack, +/obj/item/tank/internals/oxygen, +/obj/item/clothing/mask/gas, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"bNL" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"bNU" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump, +/obj/machinery/airlock_sensor/incinerator_ordmix{ + pixel_x = -24 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) +"bOg" = ( +/obj/structure/closet/crate/internals, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"bOr" = ( +/turf/closed/mineral/random/stationside/asteroid, +/area/station/asteroid) +"bOH" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"bOJ" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"bOO" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port) +"bOS" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/folder/yellow, +/obj/item/pen, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/sorting) +"bPd" = ( +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"bPm" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 4 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"bPo" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/light/small/directional/north, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"bPv" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"bPy" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/structure/sink/directional/south, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/service/hydroponics/garden) +"bQk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/library/printer) +"bQr" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/shaft_miner, +/turf/open/floor/iron/dark/side, +/area/station/cargo/miningoffice) +"bQA" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/structure/chair/sofa/corp/right{ + dir = 8 + }, +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"bQB" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"bQC" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/washing_machine, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) +"bQL" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/structure/chair, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"bQP" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 6 + }, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/iron, +/area/station/science/ordnance/office) +"bQX" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/storage) +"bQY" = ( +/turf/closed/wall, +/area/station/service/library/artgallery) +"bRc" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/structure/sign/warning/electric_shock/directional/west, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"bRg" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"bRx" = ( +/obj/machinery/computer/telecomms/monitor{ + dir = 4; + network = "tcommsat" + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/tcommsat/computer) +"bRG" = ( +/obj/structure/table/wood, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"bSc" = ( +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/botanist, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/service/hydroponics) +"bSo" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 4 + }, +/obj/structure/sign/warning/pods/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"bSC" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"bSI" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/cigarettes/cigars{ + pixel_y = 14 + }, +/obj/item/lighter{ + pixel_y = -6 + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain) +"bTe" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/obj/structure/table, +/obj/item/restraints/handcuffs, +/obj/item/restraints/handcuffs{ + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"bTf" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters{ + id = "science_security_post"; + name = "Security Post Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/security/checkpoint/science) +"bTg" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/west, +/obj/structure/closet/crate/coffin, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"bTm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"bTq" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "brig_post"; + name = "Security Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/security/brig/entrance) +"bTK" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) +"bTN" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Library Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"bTT" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"bTZ" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"bUg" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"bUn" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/locker) +"bUF" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"bUS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/cafeteria, +/area/station/maintenance/starboard/aft) +"bUT" = ( +/obj/effect/turf_decal/trimline/purple/warning, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"bVa" = ( +/obj/effect/turf_decal/trimline/green/filled/warning, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics/garden) +"bVs" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/duct, +/turf/open/floor/wood/tile, +/area/station/security/prison/safe) +"bVu" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"bVI" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/space, +/area/space/nearstation) +"bVQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"bVU" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/obj/item/radio/intercom/directional/south, +/obj/structure/mirror/directional/west, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/white, +/area/station/science/genetics/cloning) +"bVW" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/yellow/corner{ + dir = 1 + }, +/obj/machinery/vending/coffee, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"bWl" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance/office) +"bWq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"bWE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"bWR" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/station/command/bridge) +"bWS" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_half{ + dir = 8 + }, +/area/station/bitrunning/den) +"bXc" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/flora/bush/leafy, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_lockdown"; + name = "Medbay Emergency Lockdown Shutters"; + dir = 8 + }, +/turf/open/floor/grass, +/area/station/medical/medbay/central) +"bXo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/office) +"bXv" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"bXw" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/iron/white, +/area/station/medical/office) +"bXB" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"bXG" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"bXL" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"bXP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"bXQ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "xenobiomain"; + name = "Containment Blast Door" + }, +/turf/open/floor/iron/white/textured, +/area/station/science/xenobiology) +"bXS" = ( +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"bXU" = ( +/turf/closed/wall, +/area/station/security/prison/safe) +"bYf" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Medical - Office"; + name = "medical camera"; + network = list("ss13","medbay") + }, +/obj/machinery/airalarm/directional/south, +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/paramedic, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/medical/paramedic) +"bYk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"bYo" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + name = "Research Division Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "sci-entrance" + }, +/turf/open/floor/iron/white/textured, +/area/station/science/research) +"bYx" = ( +/obj/structure/cable, +/obj/machinery/pdapainter/security, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"bYD" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"bYL" = ( +/turf/closed/wall/r_wall, +/area/station/hallway/secondary/entry) +"bYW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"bYZ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/security/glass{ + name = "Isolation Cell"; + id_tag = "iso_cell_hall_bolt" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/duct, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/safe) +"bZl" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/frame/computer{ + anchored = 1; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"bZt" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + pixel_x = -6; + pixel_y = 8; + id = "Biohazard"; + name = "Biohazard Blast Door Control"; + req_access = list("research") + }, +/obj/machinery/button/door{ + pixel_x = 6; + pixel_y = 8; + id = "rnd2"; + name = "Research Lab Shutter Control"; + req_access = list("research") + }, +/obj/machinery/button/door{ + pixel_x = -6; + pixel_y = -2; + id = "xenobiomain"; + name = "Xenobiology Containment Blast Door Control"; + req_access = list("xenobiology") + }, +/obj/machinery/button/door{ + id = "rd_office"; + name = "Privacy Shutters Control"; + pixel_x = 6; + pixel_y = -2; + req_access = list("rd") + }, +/turf/open/floor/carpet/purple, +/area/station/command/heads_quarters/rd) +"bZv" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance/testlab) +"bZF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"bZG" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"bZK" = ( +/obj/machinery/light/directional/west, +/obj/structure/sign/departments/restroom/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/dorms) +"bZN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research/glass{ + name = "Genetics Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/genetics, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"caj" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/structure/table/glass, +/obj/item/healthanalyzer, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/gloves/latex, +/obj/item/storage/box/beakers, +/obj/item/storage/box/syringes{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/box/vials{ + pixel_y = 4; + pixel_x = -2 + }, +/obj/machinery/firealarm/directional/south, +/obj/item/storage/box/monkeycubes/mousecubes, +/obj/item/storage/box/monkeycubes/mousecubes{ + pixel_x = 6; + pixel_y = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"cau" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/station/solars/starboard/aft) +"caF" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"caL" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"cbe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/structure/window/reinforced/tinted, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters{ + id = "visitation"; + name = "Visitation Shutters" + }, +/turf/open/floor/plating, +/area/station/security/prison/visit) +"cbh" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/newscaster/directional/north, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/upgraded, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"cbj" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"cbn" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/security/prison/workout) +"cbB" = ( +/turf/closed/wall, +/area/station/security/prison) +"cbD" = ( +/obj/structure/dresser, +/turf/open/floor/carpet/blue, +/area/station/commons/dorms) +"cbY" = ( +/obj/structure/table/wood, +/obj/item/folder/blue, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"cbZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/service{ + name = "Bar" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark/textured, +/area/station/service/bar) +"cch" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron/white, +/area/station/science/explab) +"ccp" = ( +/turf/open/floor/wood, +/area/station/service/library) +"ccs" = ( +/obj/structure/closet/cardboard{ + name = "Mime's Cardboard box"; + desc = "The mime uses this box to store his resentment for the clown for getting so many brand deals. It also serves as a bed" + }, +/turf/open/floor/carpet/black, +/area/station/service/theater) +"ccL" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = -3; + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"ccW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"ccZ" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, +/obj/machinery/newscaster/directional/east, +/obj/machinery/light/directional/east, +/obj/structure/table/reinforced, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/item/reagent_containers/dropper, +/turf/open/floor/iron/checker, +/area/station/science/lab) +"cde" = ( +/obj/machinery/firealarm/directional/east{ + pixel_y = -5 + }, +/obj/machinery/light_switch/directional/east{ + pixel_y = 5 + }, +/obj/structure/mirror/directional/north, +/obj/structure/sink/directional/south, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/service/janitor) +"cdi" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"cdl" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Service - Library, Printer Room"; + name = "service camera" + }, +/turf/open/floor/iron/dark, +/area/station/service/library/printer) +"cdu" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"cdz" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/structure/sign/directions/supply/directional/north{ + pixel_y = 41; + dir = 2 + }, +/obj/structure/sign/directions/cryo/directional/north{ + dir = 4 + }, +/obj/structure/sign/directions/evac/directional/north{ + dir = 4; + pixel_y = 23 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"cdA" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/detectives_office) +"cdE" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"cdI" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"cdN" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"cdP" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/maintenance/port) +"ceb" = ( +/obj/structure/filingcabinet, +/obj/item/folder/documents, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"cee" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/office) +"cem" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"ces" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"cet" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"cev" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"cew" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/landmark/start/depsec/supply, +/obj/machinery/button/door/directional/north{ + id = "cargo_security_post"; + name = "Security Post Shutters Control"; + req_access = list("security") + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"ceH" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/aft) +"ceT" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/structure/sign/departments/rndserver/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/science/research) +"ceX" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "engineering"; + name = "Engineering Blast Door" + }, +/turf/open/floor/plating, +/area/station/engineering/main) +"cfc" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/structure/table/optable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/maintenance/port/fore) +"cfl" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/item/radio/intercom/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/turf/open/floor/iron/dark/side, +/area/station/cargo/office) +"cfm" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/structure/sign/warning/no_smoking/directional/north, +/obj/structure/cable, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"cfv" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"cfC" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/chem_mass_spec, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"cfN" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/engineering/break_room) +"cfP" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"cgb" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/library/printer) +"cge" = ( +/obj/structure/sign/flag/nanotrasen/directional/west, +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/captain{ + dir = 1 + }, +/obj/effect/landmark/start/captain, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"cgm" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"cgs" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"cgC" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"cgG" = ( +/obj/effect/turf_decal/bot, +/obj/structure/rack, +/obj/item/training_toolbox, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness/recreation) +"cgP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"cgX" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"chg" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/sepia, +/area/station/service/library/artgallery) +"chk" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/landmark/start/lawyer, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"chq" = ( +/obj/structure/showcase/horrific_experiment, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"chs" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"chv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"chy" = ( +/obj/machinery/door/window/left/directional/north, +/obj/structure/table/wood/fancy/blue, +/obj/structure/sign/painting/library{ + pixel_y = -32 + }, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"chD" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/status_display/supply{ + pixel_y = -32 + }, +/obj/machinery/rnd/production/techfab/department/cargo, +/turf/open/floor/iron/dark/side, +/area/station/cargo/office) +"chG" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/large, +/area/station/science/ordnance) +"chH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"chW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"chZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/grunge{ + name = "Prison Showers" + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/shower) +"cid" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Commons - Vacant Office, East"; + name = "commons camera" + }, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"cim" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "garbage" + }, +/obj/machinery/door/poddoor/preopen{ + id = "disposal_exit"; + name = "Disposal Exit Vent" + }, +/obj/structure/plasticflaps, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"cit" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/clothing/suit/apron/surgical{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/item/reagent_containers/medigel/sterilizine{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/clothing/gloves/latex, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"cix" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"ciA" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics/garden) +"ciG" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/computer/department_orders/security{ + dir = 1 + }, +/obj/structure/noticeboard/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/office) +"ciO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table, +/obj/item/wirecutters, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"ciR" = ( +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/hydroponics) +"ciT" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"ciW" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"cjf" = ( +/obj/machinery/computer/mechpad{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"cjG" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/atm, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/lobby) +"cjI" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"cjW" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ckh" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"ckA" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/yellow/corner, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"ckD" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + name = "Asteroid Magnet" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/iron/white/textured, +/area/station/science/auxlab) +"ckL" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"ckO" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/window/right/directional/north{ + name = "Science Deliveries"; + req_access = list("research") + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/science/breakroom) +"ckP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"cla" = ( +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/office) +"clf" = ( +/obj/effect/decal/cleanable/oil, +/obj/structure/barricade/wooden, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"clg" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/light/small/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/vending/clothing, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) +"clh" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/door/poddoor/preopen{ + id = "bridge_blast_doors"; + name = "Bridge Access Blast Door" + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"clk" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"cll" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron/white, +/area/station/science/explab) +"clr" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable/layer3, +/obj/machinery/flasher/directional/west{ + id = "AI"; + name = "Meatbag Pacifier" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/highsecurity{ + name = "AI Chamber" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "ai-passthrough" + }, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/turret_protected/aisat_interior) +"clv" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"cmn" = ( +/obj/machinery/atmospherics/components/unary/passive_vent, +/turf/open/floor/plating/airless, +/area/space) +"cmt" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"cmw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"cmI" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/security/brig) +"cmP" = ( +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/dark/smooth_large, +/area/station/maintenance/department/security) +"cmW" = ( +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port) +"cnk" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/turf/open/floor/iron, +/area/station/science/ordnance) +"cnl" = ( +/obj/machinery/computer/communications, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"cnu" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"cnA" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/obj/machinery/button/door/directional/west{ + id = "genetics_shutters"; + name = "Genetics Shutters Control"; + req_access = list("genetics") + }, +/obj/structure/table/glass, +/obj/item/paper_bin, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"cnG" = ( +/obj/structure/closet/crate/trashcart/laundry, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/shoes/sneakers/orange, +/obj/item/clothing/shoes/sneakers/orange, +/obj/item/clothing/shoes/sneakers/orange, +/obj/item/clothing/shoes/sneakers/orange, +/obj/effect/spawner/random/contraband/prison, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/shower) +"cnH" = ( +/obj/structure/table/wood, +/obj/item/storage/lockbox/medal, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"cnP" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"cnU" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"cnX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/banner/medical/mundane, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"coh" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - Atmospherics Mixed Air Chamber"; + name = "engineering camera" + }, +/turf/open/floor/engine/air, +/area/station/engineering/atmos) +"cot" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) +"cou" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"cox" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/five, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"coA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"coE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"cpv" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/window/left/directional/north{ + name = "Incoming Mail"; + req_access = list("shipping") + }, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) +"cpz" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/solars/port/fore) +"cpE" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/item/kirbyplants/photosynthetic, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"cpH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"cpJ" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"cpO" = ( +/obj/machinery/light/directional/south, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"cpX" = ( +/obj/structure/sign/poster/contraband/clown/directional/east, +/obj/structure/closet/secure_closet/freezer/cream_pie{ + anchored = 1 + }, +/obj/item/food/pie/cream, +/obj/item/food/pie/cream, +/obj/item/food/pie/cream, +/turf/open/floor/eighties/red, +/area/station/service/theater) +"cqF" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"cqR" = ( +/turf/closed/wall/r_wall, +/area/station/security/execution/transfer) +"cre" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"crl" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"crt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"crI" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"crM" = ( +/turf/closed/wall/r_wall, +/area/station/security/warden) +"crV" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/science/research) +"cse" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/bodycontainer/morgue{ + dir = 2 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"csj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/office) +"cst" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"csE" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"csZ" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/rack, +/obj/item/gun/ballistic/shotgun/riot{ + pixel_x = 3; + pixel_y = 5 + }, +/obj/item/gun/ballistic/shotgun/riot{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/item/gun/ballistic/shotgun/riot{ + pixel_x = 3; + pixel_y = -1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"ctb" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"ctc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"ctk" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"ctt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"ctz" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) +"ctF" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/storage/medkit/regular, +/turf/open/floor/iron/white, +/area/station/medical/office) +"ctP" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_freezer_chamber_input{ + dir = 1 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/freezerchamber) +"cua" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/firealarm/directional/east{ + pixel_y = 6 + }, +/obj/machinery/light_switch/directional/east{ + pixel_y = -4 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"cub" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/commons/dorms) +"cud" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_lockdown"; + name = "Medbay Emergency Lockdown Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/medical/storage) +"cug" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/cable, +/obj/machinery/light/directional/north, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"cui" = ( +/turf/closed/wall, +/area/station/service/theater) +"cuo" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/cable/multilayer/connected, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"cus" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/west, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 5 + }, +/obj/item/folder{ + pixel_y = 7 + }, +/obj/item/pen{ + pixel_y = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/explab) +"cuE" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"cuK" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"cuU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"cve" = ( +/turf/closed/wall/r_wall, +/area/station/science/robotics/mechbay) +"cvj" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible, +/turf/closed/wall/r_wall, +/area/station/maintenance/starboard/aft) +"cvn" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/vending/hydroseeds{ + slogan_delay = 700 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics) +"cvr" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/conveyor{ + id = "package_sort_2" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) +"cvK" = ( +/obj/structure/table/reinforced, +/obj/structure/cable, +/obj/machinery/door/window/left/directional/south{ + name = "Reception Desk"; + req_access = list("security") + }, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Reception Desk"; + req_access = list("armory") + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"cvS" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/command/storage/eva) +"cwb" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"cwB" = ( +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"cwK" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"cwL" = ( +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"cwN" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"cwQ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"cxk" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad2" + }, +/obj/machinery/door/poddoor{ + id = "qm_load_door_2"; + name = "Supply Dock Loading Door" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) +"cxl" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/bodycontainer/morgue{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"cxp" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/sorting) +"cxK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"cxW" = ( +/obj/structure/table/wood, +/obj/item/storage/box/matches{ + pixel_x = 4 + }, +/obj/item/clothing/mask/cigarette/cigar, +/obj/item/reagent_containers/cup/glass/flask/gold{ + pixel_x = 6; + pixel_y = 14 + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"cxY" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron/white, +/area/station/science/research) +"cye" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"cyp" = ( +/obj/docking_port/stationary{ + dheight = 1; + dir = 8; + dwidth = 12; + height = 17; + name = "northeast of station"; + width = 23; + shuttle_id = "syndicate_ne" + }, +/turf/open/space, +/area/space) +"cyt" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"cyB" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"cyF" = ( +/obj/machinery/air_sensor/carbon_tank, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) +"cza" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer4{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"czt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"czu" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"czB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen_sec_shutters"; + name = "Kitchen Shutters"; + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/kitchen) +"czD" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = 8 + }, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"czJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"czU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"cAm" = ( +/turf/open/floor/carpet/purple, +/area/station/commons/dorms) +"cAy" = ( +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/dark/smooth_large, +/area/station/engineering/storage) +"cAM" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) +"cAR" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/box/red, +/obj/machinery/porta_turret/ai{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"cBa" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"cBc" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) +"cBe" = ( +/obj/machinery/light/directional/south, +/obj/machinery/status_display/evac/directional/south, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"cBH" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/button/door/directional/south{ + id = "med_priv_2"; + name = "Privacy Shutters" + }, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_b) +"cBM" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/item/roller{ + pixel_x = -1 + }, +/obj/item/roller{ + pixel_x = 4 + }, +/obj/item/storage/medkit/regular{ + pixel_y = 1 + }, +/turf/open/floor/iron, +/area/station/command/gateway) +"cCc" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"cCf" = ( +/turf/closed/wall, +/area/station/security/prison/shower) +"cCi" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"cCp" = ( +/obj/machinery/air_sensor/plasma_tank, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"cCr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"cCv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"cCy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"cCF" = ( +/obj/structure/plasticflaps/opaque, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "Security" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/security/brig) +"cCP" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"cDu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/commons/fitness) +"cDv" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/science/xenobiology) +"cDA" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Medical - Cryogenics"; + name = "medical camera"; + network = list("ss13","medbay") + }, +/obj/structure/table, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone, +/obj/item/storage/pill_bottle/mannitol, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/syringe/epinephrine, +/obj/item/wrench/medical, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/medical/cryo) +"cDC" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/pen/red{ + pixel_x = -4 + }, +/obj/item/book/manual/wiki/medicine, +/obj/item/book/manual/wiki/infections{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/reagent_containers/syringe/antiviral, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/hand_labeler, +/obj/item/radio/headset/headset_med, +/obj/machinery/newscaster/directional/south, +/obj/item/clothing/glasses/science, +/obj/item/extrapolator, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"cDF" = ( +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"cDP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side, +/area/station/hallway/secondary/exit/departure_lounge) +"cDS" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"cEi" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/sign/warning/secure_area/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"cEm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"cEn" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"cEx" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"cEz" = ( +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"cEG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"cEN" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "ce_privacy"; + name = "CE Office Shutters"; + dir = 4 + }, +/obj/machinery/door/poddoor/preopen{ + id = "engineering"; + name = "Engineering Blast Door" + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/ce) +"cEO" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/structure/table, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil{ + pixel_x = -1; + pixel_y = -3 + }, +/obj/item/stock_parts/micro_laser, +/obj/item/stock_parts/micro_laser{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/stock_parts/capacitor, +/obj/item/stock_parts/capacitor{ + pixel_y = 6; + pixel_x = 3 + }, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/manipulator{ + pixel_y = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/lab) +"cEQ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/engineering/storage_shared) +"cFj" = ( +/obj/structure/closet, +/obj/item/instrument/piano_synth, +/obj/item/instrument/recorder, +/obj/item/instrument/saxophone, +/obj/item/instrument/trombone, +/obj/item/instrument/trumpet, +/obj/item/instrument/violin, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"cFF" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/closet/secure_closet/engineering_personal, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/storage_shared) +"cFG" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/sign/warning/hot_temp/directional/west, +/turf/open/floor/plating/reinforced, +/area/station/maintenance/department/science) +"cFT" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "Waste Release" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"cFU" = ( +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/mail_sorting/science/ordnance, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"cGc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"cGh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/service/janitor_closet, +/turf/open/floor/plating, +/area/station/maintenance/port) +"cGj" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, +/obj/machinery/light_switch/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/checker, +/area/station/science/lab) +"cGk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/two, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"cGB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"cGF" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"cGM" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"cGR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"cHh" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/storage) +"cHp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"cHD" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/rd) +"cHF" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/textured, +/area/station/security/interrogation) +"cHJ" = ( +/obj/effect/turf_decal/trimline/purple/line, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"cIi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/tcommsat/computer) +"cIv" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"cID" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/machinery/light/directional/south, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"cIJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"cIL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"cIP" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"cIV" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"cJf" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"cJi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Library" + }, +/obj/effect/landmark/navigate_destination/library, +/turf/open/floor/iron/dark/textured, +/area/station/service/library) +"cJu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"cJB" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"cJJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table, +/obj/item/storage/box/matches, +/obj/effect/spawner/random/entertainment/lighter{ + pixel_y = 4; + pixel_x = 4 + }, +/obj/effect/spawner/random/entertainment/lighter, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"cJN" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/cable, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"cJO" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"cJW" = ( +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/exit/departure_lounge) +"cKk" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 5 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Medical - Central, East"; + network = list("ss13","medbay"); + name = "medical camera" + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"cKn" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/turf/open/floor/iron, +/area/station/science/ordnance) +"cKv" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/structure/reagent_dispensers/wall/peppertank/directional/north, +/obj/structure/table, +/obj/item/folder/red{ + pixel_x = 3 + }, +/obj/item/taperecorder{ + pixel_x = -3 + }, +/obj/item/assembly/flash/handheld, +/obj/item/reagent_containers/spray/pepper, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"cKw" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 1 + }, +/obj/machinery/flasher/directional/east{ + id = "AI" + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"cKx" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"cKF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"cKS" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"cLc" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/office) +"cLl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"cLo" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"cLs" = ( +/turf/closed/wall, +/area/station/cargo/lobby) +"cLR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"cLU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"cLY" = ( +/obj/structure/cable, +/obj/machinery/camera/emp_proof/directional/north{ + c_tag = "Engineering - External Particle Accelerator, Northwest"; + name = "engineering camera"; + dir = 9 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"cLZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port) +"cMj" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 9 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, +/area/station/science/research) +"cMq" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/multitool, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"cMv" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/structure/table/glass, +/obj/item/nanite_scanner{ + pixel_x = -4; + pixel_y = -2 + }, +/obj/item/nanite_remote{ + pixel_y = 6; + pixel_x = 5 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"cMx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Engineering Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"cMy" = ( +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space/nearstation) +"cMA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"cMB" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"cMT" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/hydroponics/garden) +"cMU" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/light/small/directional/north, +/obj/structure/table, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/secondary/service) +"cNc" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/camera/autoname/directional/east, +/obj/structure/chair, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"cNi" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"cNk" = ( +/obj/machinery/light/directional/north, +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/floor/grass, +/area/station/command/bridge) +"cNm" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"cNp" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/clothing/costume, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"cNz" = ( +/obj/effect/turf_decal/trimline/purple/line, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"cNN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/cafeteria, +/area/station/maintenance/starboard/aft) +"cOa" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/light/small/directional/south, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Service Hallway"; + name = "Service Fax Machine" + }, +/turf/open/floor/iron/dark/side, +/area/station/hallway/secondary/service) +"cOn" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"cOo" = ( +/obj/machinery/corral_corner{ + mapping_id = "6" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "6" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"cOG" = ( +/obj/effect/turf_decal/bot, +/obj/structure/sign/nanotrasen{ + pixel_x = -32 + }, +/obj/structure/cable, +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/turf/open/floor/iron/large, +/area/station/engineering/gravity_generator) +"cOH" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/white, +/area/station/science/research) +"cOJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/particle_accelerator/particle_emitter/right, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"cPj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"cPo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"cPr" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/lockers) +"cPI" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/storage/box/matches, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"cPO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"cPV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"cPX" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/computer/records/security{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"cPZ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/warning, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"cQe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"cQj" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"cQl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"cQs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/frame/computer{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"cQt" = ( +/obj/machinery/asteroid_magnet{ + center_x = 144; + center_y = 179; + area_size = 3 + }, +/turf/open/floor/iron/white, +/area/station/science/auxlab) +"cQv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"cQA" = ( +/obj/effect/turf_decal/tile/neutral/half, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/smooth_half{ + dir = 4 + }, +/area/station/command/gateway) +"cQM" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"cQO" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/bodycontainer/morgue{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"cQR" = ( +/obj/structure/table, +/obj/item/transfer_valve{ + pixel_x = -10 + }, +/obj/item/transfer_valve{ + pixel_x = -5 + }, +/obj/item/transfer_valve{ + pixel_x = 10 + }, +/obj/item/transfer_valve{ + pixel_x = 5 + }, +/obj/item/transfer_valve, +/turf/open/floor/iron, +/area/station/science/ordnance) +"cQT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine/atmos) +"cQY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"cRg" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"cRk" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"cRl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"cRp" = ( +/turf/closed/wall, +/area/station/maintenance/department/cargo) +"cRq" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/oven/range, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"cRQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/camera/directional/north{ + c_tag = "Commons - Vacant Office, North"; + name = "commons camera" + }, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"cSm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/telecomms/broadcaster/preset_left, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"cSq" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) +"cSv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Departures Cryogenic Lounge" + }, +/obj/effect/landmark/navigate_destination/common/cryogenics, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"cSw" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"cSx" = ( +/obj/machinery/hydroponics/soil, +/turf/open/floor/grass, +/area/station/service/chapel/funeral) +"cSz" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/research/glass{ + name = "Ordnance Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/science/ordnance/office) +"cSJ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Prisoner Processing" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron/dark/textured, +/area/station/security/processing) +"cSQ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"cSY" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/grass, +/area/station/service/chapel/funeral) +"cTa" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"cTc" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side, +/area/station/engineering/break_room) +"cTq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"cTs" = ( +/obj/machinery/light_switch/directional/south{ + pixel_x = 8 + }, +/obj/machinery/firealarm/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"cTz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen_sec_shutters"; + name = "Kitchen Shutters"; + dir = 8 + }, +/obj/structure/displaycase/forsale/kitchen{ + pixel_y = 10 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/kitchen) +"cTG" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"cTJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"cTK" = ( +/obj/structure/sink/directional/south, +/obj/item/reagent_containers/cup/bucket, +/turf/open/floor/plating, +/area/station/maintenance/port) +"cTL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"cTT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/sign/departments/medbay/alt/directional/east, +/obj/machinery/camera/directional/east{ + c_tag = "Medical - Lobby"; + network = list("ss13","medbay"); + name = "medical camera" + }, +/obj/structure/chair/sofa/corp/right{ + color = "#7fb3d5"; + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"cUe" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/right/directional/north{ + name = "Security Checkpoint Desk"; + req_access = list("security") + }, +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/south{ + name = "Security Checkpoint Desk" + }, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/machinery/door/poddoor/shutters{ + id = "arrivals_security_post"; + name = "Security Post Shutters" + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"cUh" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"cUp" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"cUr" = ( +/obj/structure/sign/warning/radiation/directional/south, +/obj/machinery/light/small/directional/south, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"cUz" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/table, +/obj/item/stack/wrapping_paper{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/storage/box, +/obj/item/storage/box, +/obj/item/storage/box, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/cargo/sorting) +"cUD" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/reinforced, +/obj/item/restraints/handcuffs, +/obj/item/assembly/flash/handheld, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"cUR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"cUV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/main) +"cVb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"cVe" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/engineering_all, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"cVu" = ( +/obj/effect/turf_decal/bot_red, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"cVw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"cVR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"cVY" = ( +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"cWi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"cWn" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics/garden) +"cWy" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/structure/sign/warning/secure_area/directional/north, +/obj/machinery/light/directional/north, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"cWF" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"cWI" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) +"cWL" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"cWX" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/structure/sign/directions/cryo/directional/north{ + dir = 4; + pixel_y = 23 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"cXi" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"cXs" = ( +/obj/structure/cable, +/obj/machinery/power/solar{ + id = "starboardsolar"; + name = "Starboard Solar Array" + }, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/starboard/aft) +"cXu" = ( +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"cXJ" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"cXK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"cXN" = ( +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"cXU" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"cXW" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"cYh" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"cYs" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/turf/open/floor/plastic, +/area/station/security/prison/safe) +"cYz" = ( +/obj/machinery/computer/slot_machine, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"cYA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"cYG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"cYM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "testlab"; + name = "Xenobiology Secure Chamber Blast Door" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/machinery/door/window/left/directional/north{ + name = "Test Chamber"; + req_access = list("xenobiology") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"cYN" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/firealarm/directional/north, +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"cYX" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) +"cZl" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/side, +/area/station/tcommsat/computer) +"cZs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/poddoor{ + id = "iso_cell_hall_vent"; + name = "Isolation Cell Hall Vent" + }, +/turf/open/floor/plating, +/area/station/security/prison) +"cZu" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"cZI" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/suit_storage_unit/security, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"cZL" = ( +/obj/machinery/newscaster/directional/south, +/obj/machinery/reagentgrinder{ + pixel_y = 5 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/obj/structure/table/reinforced/plasmarglass, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"cZU" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"dae" = ( +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"dah" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Engineering - Atmospherics, External HFR Access"; + name = "engineering camera" + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"daj" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/pdapainter/medbay, +/turf/open/floor/iron/dark/side, +/area/station/command/heads_quarters/cmo) +"daN" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/circuitboard/machine/stasis, +/obj/item/wrench/medical, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"daQ" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning, +/obj/structure/chair/office, +/obj/effect/landmark/start/roboticist, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"daR" = ( +/obj/machinery/light/directional/south, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/cell_5k, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"daT" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/commons/locker) +"daY" = ( +/obj/structure/closet/crate/coffin, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/fore) +"dbl" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"dbt" = ( +/obj/structure/closet, +/obj/item/stock_parts/scanning_module, +/obj/item/stock_parts/scanning_module, +/obj/item/stock_parts/scanning_module, +/obj/item/stock_parts/scanning_module/adv, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"dbG" = ( +/obj/machinery/shieldgen, +/turf/open/floor/plating, +/area/station/engineering/main) +"dbS" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"dbW" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/wood/parquet, +/area/station/security/prison/safe) +"dct" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"dcz" = ( +/obj/effect/turf_decal/trimline/green/filled/warning, +/obj/effect/turf_decal/trimline/green/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"dcA" = ( +/obj/structure/closet/crate/coffin, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/fore) +"ddr" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"ddu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/effect/turf_decal/bot, +/obj/effect/landmark/secequipment, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"ddy" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/port) +"ddB" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) +"ddK" = ( +/obj/structure/sign/warning/vacuum/external/directional/south, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) +"ddL" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_lockdown"; + name = "Medbay Emergency Lockdown Shutters"; + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/medical/exam_room) +"ddQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"ddT" = ( +/obj/machinery/light/directional/east, +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/flasher/directional/east{ + id = "transfer_flash" + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"deb" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"dec" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 8 + }, +/obj/structure/sign/departments/maint/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"dee" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"dej" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"det" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/sepia, +/area/station/service/library/artgallery) +"deB" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"deF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/table/wood, +/obj/item/stack/package_wrap, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"deQ" = ( +/obj/machinery/light/neon_lining{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) +"deW" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"dfr" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Holodeck Door" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "holodeck" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/fitness) +"dfy" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/requests_console/directional/north{ + department = "Robotics"; + name = "Robotics Requests Console"; + receive_ore_updates = 1; + supplies_requestable = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"dfE" = ( +/obj/structure/table, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/right/directional/north, +/obj/machinery/door/window/right/directional/south, +/obj/machinery/door/poddoor/shutters{ + id = "visitation"; + name = "Visitation Shutters" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"dfL" = ( +/obj/structure/particle_accelerator/power_box, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"dfS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Brig Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"dfV" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/exit/departure_lounge) +"dfX" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/machinery/gulag_teleporter, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"dgd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/station/maintenance/port) +"dgl" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) +"dgy" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_lockdown"; + name = "Medbay Emergency Lockdown Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/medical/exam_room) +"dgz" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron, +/area/station/engineering/storage) +"dgD" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/flasher/directional/north{ + id = "hopflash" + }, +/obj/structure/table/reinforced, +/obj/structure/desk_bell{ + pixel_y = 10; + pixel_x = -4 + }, +/obj/machinery/door/window/left/directional/north{ + dir = 8; + name = "Reception Window" + }, +/obj/machinery/door/window/brigdoor/right/directional/east{ + req_access = list("hop"); + name = "Head of Personnel's Desk" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "hop"; + name = "Privacy Shutters" + }, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/hop) +"dgH" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"dgK" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/cable, +/obj/machinery/computer/security{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"dgP" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"dgR" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"dgS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"dgT" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"dhd" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"dhi" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine/atmos) +"dhq" = ( +/obj/effect/turf_decal/bot, +/obj/structure/table, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"dhs" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/pumproom) +"dhz" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/status_display/ai/directional/east, +/obj/machinery/computer/monitor{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"dhE" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"dhL" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"dhZ" = ( +/obj/structure/table/wood, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"dim" = ( +/obj/machinery/computer/bank_machine, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"dio" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/library/printer) +"dix" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Prison Garden" + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/garden) +"diy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/medical/storage) +"diA" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"diI" = ( +/obj/structure/cable, +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"diJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"diY" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/security/glass{ + name = "Armory" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/security/armory) +"djl" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Command - Secure Eva Storage"; + name = "motion-sensitive command camera" + }, +/obj/structure/closet/crate/rcd, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"djD" = ( +/obj/machinery/field/generator, +/turf/open/floor/plating, +/area/station/engineering/main) +"djF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"djP" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"djT" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"djX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/construction) +"dkb" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + name = "Research Division Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "sci-entrance" + }, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/science/research) +"dkY" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/structure/table, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/capacitor, +/obj/item/stock_parts/micro_laser, +/obj/item/stock_parts/micro_laser/high, +/obj/item/stock_parts/micro_laser/high, +/obj/item/stock_parts/micro_laser/high, +/obj/item/stock_parts/micro_laser/high, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"dlc" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/engineering/break_room) +"dle" = ( +/obj/structure/sign/departments/engineering/directional/west, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/seven, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"dli" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/folder/red, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"dlj" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/commons/storage/primary) +"dlp" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/machinery/light/directional/north, +/obj/structure/table, +/obj/item/stack/cable_coil, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/engineering/break_room) +"dly" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/line, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"dlC" = ( +/obj/docking_port/stationary{ + dir = 8; + dwidth = 3; + height = 15; + name = "arrivals"; + roundstart_template = /datum/map_template/shuttle/arrival/box; + width = 7; + shuttle_id = "arrival_stationary" + }, +/turf/open/space/basic, +/area/space) +"dlH" = ( +/obj/effect/turf_decal/arrows{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"dlI" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"dlY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/telecomms/server/presets/command, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"dmh" = ( +/obj/machinery/light/directional/east, +/obj/machinery/vending/boozeomat/all_access, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"dmm" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"dmt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"dmw" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/science/ordnance/storage) +"dmE" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_x = -32 + }, +/obj/structure/cable, +/obj/machinery/power/solar_control{ + dir = 4; + id = "portsolar"; + name = "Port Quarter Solar Control" + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"dnc" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "6"; + dir = 2 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"dnd" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/machinery/airalarm/mixingchamber{ + pixel_x = 24; + dir = 4 + }, +/obj/effect/turf_decal/box/red, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/freezerchamber) +"dnn" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/closet/secure_closet/psychology, +/obj/item/toy/plush/moth{ + name = "Dr. Moff" + }, +/turf/open/floor/wood, +/area/station/medical/psychology) +"dnp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"dnA" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"dnE" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/office) +"dnR" = ( +/turf/closed/wall/r_wall, +/area/station/medical/storage) +"dnV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/cable, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/command/storage/satellite) +"dnW" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron, +/area/station/engineering/main) +"dnX" = ( +/obj/machinery/status_display/evac/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) +"dop" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/bz, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"dor" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 7 + }, +/obj/item/clothing/glasses/sunglasses/big, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"dos" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "Port Docking Bay 3" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/entry) +"dot" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plastic, +/area/station/security/prison/safe) +"doA" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"doH" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/reagent_containers/cup/bottle/morphine{ + pixel_x = -4; + pixel_y = 1 + }, +/obj/item/reagent_containers/cup/bottle/chloralhydrate, +/obj/item/reagent_containers/cup/bottle/toxin{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/bottle/morphine{ + pixel_x = 5; + pixel_y = 1 + }, +/obj/item/reagent_containers/cup/bottle/facid{ + name = "fluorosulfuric acid bottle"; + pixel_x = -3; + pixel_y = 6 + }, +/obj/item/reagent_containers/syringe, +/obj/item/reagent_containers/syringe{ + pixel_y = 5 + }, +/obj/item/reagent_containers/dropper, +/obj/item/assembly/signaler{ + pixel_x = -3; + pixel_y = 2 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"doR" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/cell_5k, +/obj/machinery/plumbing/ooze_compressor, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"doW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"dpc" = ( +/obj/machinery/conveyor{ + dir = 6; + id = "garbage" + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"dpd" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"dpu" = ( +/obj/structure/table/wood, +/obj/item/cigbutt{ + pixel_y = 16; + pixel_x = -3 + }, +/obj/effect/spawner/random/entertainment/cigarette_pack{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/glass/bottle/champagne{ + pixel_x = 8; + pixel_y = 12 + }, +/obj/effect/spawner/random/entertainment/lighter{ + pixel_x = -7; + pixel_y = -2 + }, +/obj/item/toy/figure/mime, +/turf/open/floor/carpet/black, +/area/station/service/theater) +"dpy" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/sorting) +"dpZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"dqb" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/dorms) +"dqg" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_lockdown"; + name = "Medbay Emergency Lockdown Shutters" + }, +/turf/open/floor/plating, +/area/station/medical/break_room) +"dqt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"dqx" = ( +/obj/structure/weightmachine/stacklifter, +/turf/open/floor/iron/dark, +/area/station/security/prison/workout) +"dqH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"drg" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/machinery/vending/wardrobe/viro_wardrobe, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"dro" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "Escape Pod One" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/landmark/navigate_destination/dockescpod1, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/entry) +"dru" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron, +/area/station/commons/dorms) +"drv" = ( +/obj/machinery/computer/teleporter{ + dir = 1 + }, +/obj/machinery/button/door/directional/west{ + id = "tele_shutter"; + name = "Teleporter Shutter Control"; + req_access = list("teleporter") + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"drH" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/station/service/chapel) +"drJ" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/computer/security/telescreen/cmo{ + dir = 4; + pixel_x = -30 + }, +/obj/machinery/modular_computer/preset/id{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) +"drQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Fitness" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms/laundry) +"drR" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/miningoffice) +"dsd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/research) +"dsf" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"dsn" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/atmospheric_technician, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"dsu" = ( +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/lab) +"dsE" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/meeting_room) +"dsR" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"dsU" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"dsV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/bonfire, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"dsX" = ( +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"dtm" = ( +/obj/machinery/suit_storage_unit/atmos, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"dtT" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"dub" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"duj" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"duu" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/courtroom) +"duE" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"duF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"duH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/lobby) +"duQ" = ( +/obj/structure/sign/departments/engineering/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"dvd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"dvO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "library_desk_shutters"; + name = "Library Desk Shutters"; + dir = 1 + }, +/obj/machinery/libraryscanner, +/turf/open/floor/iron/dark/textured, +/area/station/service/library/printer) +"dvS" = ( +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"dwc" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/ordnance/testlab) +"dwh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"dwq" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/structure/sign/warning/biohazard/directional/north, +/obj/item/wirecutters, +/obj/item/screwdriver, +/obj/item/storage/box/lights/mixed, +/obj/item/toy/plush/slimeplushie, +/obj/structure/table/reinforced/plasmarglass, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"dws" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"dwz" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"dwB" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/assembly/igniter, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"dwH" = ( +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"dwJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"dwS" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/command/glass{ + name = "Server Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/rd, +/turf/open/floor/iron/dark/textured, +/area/station/science/server) +"dxk" = ( +/turf/closed/wall, +/area/station/science/robotics/lab) +"dxq" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/structure/sign/departments/security/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"dxA" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"dxH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/engineering{ + name = "EVA Storage" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/welded, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/iron/textured, +/area/station/maintenance/starboard/aft) +"dxP" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"dxW" = ( +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"dyk" = ( +/obj/effect/turf_decal/tile/green/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"dyv" = ( +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/office) +"dyI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Brig Control" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/turf/open/floor/iron/dark/textured, +/area/station/security/warden) +"dyL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"dyU" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"dzj" = ( +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"dzl" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/vending/boozeomat/all_access, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"dzH" = ( +/obj/structure/flora/bush/jungle/b/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"dzI" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/surgery) +"dzP" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/leafy, +/turf/open/floor/grass, +/area/station/command/bridge) +"dzR" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/light/small/directional/west, +/obj/structure/sign/painting/library{ + pixel_x = -32 + }, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"dzU" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/cable, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"dzV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"dzW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/plastic, +/area/station/security/prison/safe) +"dAg" = ( +/obj/machinery/airalarm/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Research Director's Office"; + name = "Research Director's Fax Machine" + }, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) +"dAo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/sign/warning/radiation/directional/west, +/obj/machinery/light/small/directional/west, +/obj/effect/mapping_helpers/apc/cell_5k, +/obj/structure/cable, +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"dAx" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/rack, +/obj/item/gun/energy/e_gun{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/gun/energy/e_gun, +/obj/item/gun/energy/e_gun{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"dAB" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/station/commons/dorms) +"dAR" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"dAS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/storage) +"dAW" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/obj/machinery/rnd/production/techfab/department/security, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/office) +"dBd" = ( +/obj/structure/cable, +/obj/structure/sign/departments/vault/directional/north, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/hallway/primary/port) +"dBo" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"dBr" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/welded, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"dBA" = ( +/obj/machinery/firealarm/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"dBH" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/firealarm/directional/north, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/engineering/break_room) +"dBO" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/library/printer) +"dBU" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/construction) +"dCc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/turf/open/floor/engine, +/area/station/medical/cryo) +"dCd" = ( +/obj/structure/table/reinforced, +/obj/item/folder/red{ + pixel_y = 3 + }, +/obj/item/storage/box/handcuffs{ + pixel_y = -5; + pixel_x = -6 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"dCt" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"dCw" = ( +/turf/closed/wall, +/area/station/science/lab) +"dCA" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/obj/structure/table/wood, +/obj/machinery/fax{ + fax_name = "Psychology Office"; + name = "Psychology Office Fax Machine" + }, +/turf/open/floor/wood, +/area/station/medical/psychology) +"dCB" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"dCC" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/closet/secure_closet/personal/patient, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_b) +"dCP" = ( +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"dCT" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"dCZ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "hydroponics_shutters"; + name = "Hydroponics Shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) +"dDd" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"dDn" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/structure/tank_holder, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"dDp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"dDC" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/plant_analyzer, +/obj/item/stock_parts/cell/high, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"dDE" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table_frame, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"dDF" = ( +/obj/machinery/vending/clothing, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"dDZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/theater) +"dEg" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Arrivals - Escape Pod Bay 2"; + name = "arrivals camera" + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/entry) +"dEu" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/status_display/ai/directional/west, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"dEE" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"dEG" = ( +/obj/structure/cable, +/turf/closed/wall/r_wall, +/area/station/security/prison/visit) +"dEH" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/five, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"dEK" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"dEL" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/weldingtool/mini{ + pixel_y = 8; + pixel_x = -4 + }, +/obj/item/storage/fancy/cigarettes{ + pixel_y = 2; + pixel_x = 8 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"dEQ" = ( +/obj/item/cigbutt/cigarbutt{ + pixel_x = 7 + }, +/obj/item/phone{ + desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + pixel_x = -3; + pixel_y = 3 + }, +/obj/structure/table/wood, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"dFp" = ( +/obj/structure/table/wood, +/obj/item/storage/dice, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"dFq" = ( +/obj/machinery/light/floor/has_bulb, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"dFB" = ( +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"dFC" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/cable, +/obj/machinery/light/small/directional/south, +/obj/machinery/status_display/evac/directional/south, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/large, +/area/station/engineering/gravity_generator) +"dFP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/locker) +"dFT" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - Atmospherics Carbon Dioxide Chamber"; + name = "engineering camera" + }, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) +"dFW" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"dGg" = ( +/obj/structure/chair/sofa/right/brown{ + dir = 8 + }, +/turf/open/floor/carpet/blue, +/area/station/medical/psychology) +"dGu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/port) +"dGM" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"dGT" = ( +/obj/machinery/light/directional/east, +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"dGY" = ( +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/dorms) +"dHb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"dHc" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/warning, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"dHd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"dHj" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/entry) +"dHn" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"dHx" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"dHz" = ( +/obj/effect/turf_decal/stripes/end, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table/glass, +/obj/item/wrench/medical, +/obj/item/storage/pill_bottle/epinephrine{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/hypospray/medipen/morphine{ + pixel_y = 12 + }, +/obj/item/reagent_containers/hypospray/medipen/morphine{ + pixel_y = 6 + }, +/turf/open/floor/iron/dark, +/area/station/medical/exam_room) +"dHX" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"dIb" = ( +/obj/machinery/mechpad, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"dIp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat_interior) +"dIu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/restraints/handcuffs/cable/zipties/used, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"dIE" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"dIF" = ( +/obj/effect/turf_decal/trimline/purple/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"dIG" = ( +/obj/structure/sign/poster/official/no_erp/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/commons/dorms) +"dIJ" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/camera/autoname/directional/north, +/obj/structure/closet/crate/wooden/toy, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/service/theater) +"dIM" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"dIO" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/light/directional/west, +/obj/structure/chair/office/light{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"dIV" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/mail_sorting/service/law_office, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"dIW" = ( +/turf/closed/wall, +/area/station/service/lawoffice) +"dIY" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"dJc" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"dJe" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/turf/open/floor/iron/white, +/area/station/science/research) +"dJA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/table/glass, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/item/storage/medkit/regular{ + pixel_y = 3 + }, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = 7 + }, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/surgical, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/iron/white, +/area/station/security/medical) +"dKa" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"dKf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"dKl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) +"dKm" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/grass, +/area/station/command/bridge) +"dKn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/science/research, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"dKv" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"dKB" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/floor/grass, +/area/station/command/bridge) +"dKQ" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"dLp" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/structure/closet/secure_closet/brig{ + id = "Cell 3"; + name = "Cell 3 Locker" + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"dLv" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"dLF" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/sign/warning/vacuum/external/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"dLL" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"dMb" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/structure/closet/emcloset, +/obj/item/clothing/head/costume/festive, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"dMl" = ( +/obj/machinery/computer/upload/borg{ + dir = 4 + }, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai_upload) +"dMq" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"dMC" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/vending/cigarette, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"dMO" = ( +/turf/closed/wall, +/area/station/science/genetics) +"dMR" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Central Hallway North-East" + }, +/obj/effect/turf_decal/trimline/purple/line, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"dMV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Interrogation Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"dMW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Foyer" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/obj/effect/landmark/navigate_destination/engineering, +/obj/effect/landmark/navigate_destination/atmos, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/break_room) +"dNr" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/carpet/green, +/area/station/commons/locker) +"dNt" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"dNu" = ( +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"dNx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/light_switch/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat_interior) +"dNK" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/sign/warning/hot_temp/directional/east, +/turf/open/floor/plating/reinforced, +/area/station/maintenance/department/science) +"dNX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/command/storage/satellite) +"dOa" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"dOf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/miningoffice) +"dOn" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 8 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Arrivals Hallway" + }, +/obj/structure/sign/directions/medical/directional/east{ + pixel_y = 9 + }, +/obj/structure/sign/directions/science/directional/east, +/obj/structure/sign/directions/vault/directional/east{ + pixel_y = -9 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"dOo" = ( +/obj/structure/table/glass, +/obj/machinery/light/directional/south, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"dOt" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/flashlight/flare/candle{ + pixel_x = 6 + }, +/obj/item/flashlight/flare/candle{ + pixel_x = -6 + }, +/obj/item/fakeartefact, +/obj/machinery/light/small/broken/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"dOx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"dOy" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron/white, +/area/station/science/research) +"dOM" = ( +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron, +/area/station/construction) +"dOS" = ( +/turf/closed/wall, +/area/station/security/prison/work) +"dOX" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/machinery/conveyor{ + dir = 8; + id = "QMLoad2" + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/storage) +"dPd" = ( +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"dPy" = ( +/obj/machinery/igniter/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"dPz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"dPD" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"dPF" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white, +/area/station/science/research) +"dPO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/grunge{ + name = "Stall 1" + }, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"dPP" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/rnd/production/circuit_imprinter, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/break_room) +"dPT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"dPU" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/structure/crate, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/maintenance/port/fore) +"dQg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"dQh" = ( +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"dQx" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) +"dQE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"dQJ" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/mail_sorting/security/hos_office, +/turf/open/floor/iron/dark, +/area/station/security/office) +"dQL" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"dQR" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"dRb" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/machinery/medical_kiosk, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"dRd" = ( +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"dRH" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"dRJ" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/ai_all, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"dRR" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/green/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"dRS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"dSb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "Escape Pod Two" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/entry) +"dSd" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"dSr" = ( +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/office) +"dSI" = ( +/obj/effect/turf_decal/box/white{ + color = "#9FED58" + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"dSO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"dSP" = ( +/turf/open/floor/engine/o2, +/area/station/engineering/atmos) +"dSU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"dTj" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"dTx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Equipment Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron/dark/textured, +/area/station/security/lockers) +"dTD" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"dTG" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/office) +"dTK" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/iron/dark, +/area/station/security/office) +"dTN" = ( +/obj/effect/artifact_spawner, +/turf/open/floor/engine, +/area/station/science/explab) +"dTS" = ( +/obj/effect/turf_decal/trimline/red/filled/corner, +/obj/effect/turf_decal/trimline/red/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"dTW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/circuit, +/area/station/ai_monitored/command/nuke_storage) +"dTX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/break_room) +"dTZ" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/iron/white, +/area/station/medical/office) +"dUc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "The Tider Lounge"; + desc = "This former locker room has been taken over by a 'respectable' group of 'gentle''men' who identify themselves as the 'Tophat Clan''" + }, +/obj/effect/landmark/navigate_destination{ + location = "The Tider Lounge (Locker Room)" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/locker) +"dUd" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/cargo/storage) +"dUm" = ( +/turf/closed/wall, +/area/station/medical/chemistry) +"dUt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/mineral/ore_redemption{ + input_dir = 2; + output_dir = 1 + }, +/obj/machinery/door/window/right/directional/south{ + name = "Ore Redemption"; + req_access = list("cargo") + }, +/obj/machinery/door/window/right/directional/north{ + name = "Ore Redemption" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "cargo_desk"; + name = "Cargo Desk Shutters" + }, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/office) +"dUu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/sign/poster/random/directional/west, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"dUx" = ( +/turf/closed/wall/r_wall, +/area/station/security/checkpoint/science) +"dUM" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"dVe" = ( +/obj/effect/turf_decal/delivery/white, +/obj/machinery/light/directional/north, +/obj/structure/closet/crate/critter, +/obj/effect/spawner/random/clothing/kittyears_or_rabbitears, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"dVk" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"dVx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"dVT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "Security Departure Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/exit/departure_lounge) +"dVZ" = ( +/obj/machinery/light/built/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"dWs" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/office) +"dWN" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"dWS" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/starboard/fore) +"dXd" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/service/chapel/funeral) +"dXL" = ( +/obj/structure/table, +/obj/item/electronics/airlock{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/electronics/airlock{ + pixel_x = -7; + pixel_y = 2 + }, +/obj/item/electronics/apc, +/obj/item/electronics/apc{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stock_parts/cell/high{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/item/stock_parts/cell/high, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/engineering/main) +"dXR" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/structure/table/glass, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"dXW" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/checker, +/area/station/science/lab) +"dYc" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"dYe" = ( +/obj/item/radio/intercom/directional/south, +/obj/machinery/recharge_station, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"dYg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"dYt" = ( +/turf/open/floor/engine, +/area/station/science/xenobiology) +"dYv" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/camera/autoname/directional/north, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/cargo/storage) +"dYx" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"dYI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/red/filled/corner, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"dYQ" = ( +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/bot_white/left, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 4 + }, +/area/station/engineering/gravity_generator) +"dYS" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/table/glass, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = 3 + }, +/obj/item/wrench/medical, +/obj/item/stack/cable_coil, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"dYV" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - Atmospherics Oxygen Chamber"; + name = "engineering camera" + }, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos) +"dYW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Post - Engineering" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron/dark/textured, +/area/station/security/checkpoint/engineering) +"dZe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"dZu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8 + }, +/obj/effect/mapping_helpers/mail_sorting/service/hydroponics, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"dZz" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"dZE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"dZF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/hallway/secondary/service) +"dZM" = ( +/turf/open/floor/engine/air, +/area/station/engineering/atmos) +"dZU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/janitor) +"dZV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"eaa" = ( +/obj/machinery/duct, +/turf/open/floor/carpet/red, +/area/station/security/prison/safe) +"eac" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"eae" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/office) +"eaf" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"ean" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/north{ + name = "Robotics Desk" + }, +/obj/machinery/door/window/left/directional/south{ + name = "Robotics Desk"; + req_access = list("robotics") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics_sci_shutters"; + name = "Robotics Shutters" + }, +/obj/structure/desk_bell{ + pixel_x = 7; + pixel_y = 7 + }, +/turf/open/floor/iron/white/textured, +/area/station/science/robotics/lab) +"eav" = ( +/turf/closed/wall, +/area/station/medical/exam_room) +"eaw" = ( +/obj/structure/sign/warning/biohazard/directional/east, +/obj/effect/turf_decal/tile/neutral/anticorner, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 1 + }, +/area/station/command/gateway) +"eaB" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"eaC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Main SMES Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/structure/cable/layer1, +/turf/open/floor/iron/textured, +/area/station/engineering/engine_smes) +"eaE" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/structure/closet/firecloset{ + anchored = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"eaL" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/light/small/directional/west, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"eaS" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/table/reinforced, +/obj/item/folder/yellow{ + pixel_y = 4 + }, +/obj/item/multitool, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"eaV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/entry) +"eaW" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/bodycontainer/morgue, +/turf/open/floor/iron/white, +/area/station/security/medical) +"ebp" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/obj/structure/sign/poster/official/space_cops/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"ebw" = ( +/turf/closed/wall, +/area/station/maintenance/department/security) +"ebD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/science/research) +"ebL" = ( +/obj/machinery/photocopier, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"ebO" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/freezerchamber) +"ebS" = ( +/obj/machinery/computer/atmos_control/oxygen_tank{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"ecf" = ( +/obj/structure/sign/warning/no_smoking/directional/north, +/obj/effect/turf_decal/bot, +/obj/structure/closet/radiation, +/turf/open/floor/iron, +/area/station/science/ordnance) +"ecg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"ech" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron/white, +/area/station/science/research) +"ecF" = ( +/obj/structure/rack, +/obj/item/storage/briefcase, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"ecX" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 8 + }, +/obj/structure/table/glass, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"edc" = ( +/obj/item/storage/pill_bottle, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"edD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) +"edF" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/arrow_ccw{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"edP" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/plaque{ + icon_state = "L11" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"edQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/morgue{ + name = "Confession Booth (Chaplain)"; + req_access = list("chapel_office"); + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/chapel/office) +"edT" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/neutral/corner, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"eed" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"eer" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"eeM" = ( +/obj/machinery/button/door/directional/south{ + id = "dorm_6"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/carpet/red, +/area/station/commons/dorms) +"eeV" = ( +/obj/structure/sign/poster/official/random/directional/north, +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/locker) +"efb" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/reinforced, +/obj/item/taperecorder, +/obj/item/tape/random, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"efo" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/white, +/area/station/science/research) +"efp" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"efs" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 5 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"efB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"efQ" = ( +/obj/machinery/light/directional/east, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"efV" = ( +/obj/effect/turf_decal/trimline/blue/filled/end{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/healthanalyzer, +/obj/item/gun/syringe, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"efW" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/carpet, +/area/station/service/chapel) +"egs" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/closet/firecloset{ + anchored = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"egC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"egK" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/lobby) +"egM" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/detectives_office) +"ehj" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/structure/cable, +/obj/structure/table, +/obj/machinery/chem_dispenser/drinks/beer{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/bar) +"ehr" = ( +/obj/effect/spawner/random/trash/moisture_trap, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"ehB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/light_switch/directional/west, +/obj/machinery/light/small/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/break_room) +"ehP" = ( +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"eia" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/central) +"eib" = ( +/obj/structure/cable, +/obj/machinery/power/smes, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"eil" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"eiO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"ejc" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/dark/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"ejh" = ( +/obj/effect/turf_decal/box, +/turf/open/floor/iron/large, +/area/station/commons/storage/primary) +"ejt" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"ejv" = ( +/obj/structure/table/wood, +/obj/machinery/cassette/adv_cassette_deck{ + pixel_y = 8 + }, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"ejw" = ( +/obj/structure/table/wood, +/obj/item/camera_film, +/obj/item/camera, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"ejy" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/machinery/door/airlock/atmos{ + name = "Turbine Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/landmark/navigate_destination/incinerator, +/turf/open/floor/iron/textured, +/area/station/maintenance/department/engine/atmos) +"ejE" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) +"ejK" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/computer/nanite_chamber_control{ + dir = 8 + }, +/obj/machinery/status_display/ai/directional/east, +/turf/open/floor/iron/white, +/area/station/science/research) +"ejP" = ( +/obj/machinery/computer/crew, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"ejR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"ekx" = ( +/obj/effect/turf_decal/tile/neutral/half, +/obj/effect/turf_decal/box/white, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/command/nuke_storage) +"ekL" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ekU" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/assembly/timer, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"ell" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/structure/table, +/obj/machinery/syndicatebomb/training, +/turf/open/floor/iron/dark, +/area/station/security/office) +"elu" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/computer/security{ + dir = 1 + }, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/office) +"elU" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/structure/fireaxecabinet/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"elW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/quantum_server, +/turf/open/floor/iron/dark/smooth_large, +/area/station/bitrunning/den) +"emd" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark, +/area/station/medical/medbay/central) +"emg" = ( +/obj/effect/turf_decal/tile/green/half/contrasted, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/hydroponics) +"emk" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/genetics) +"emu" = ( +/obj/effect/turf_decal/stripes/box, +/obj/machinery/computer/mech_bay_power_console{ + dir = 8 + }, +/turf/open/floor/iron/large, +/area/station/science/robotics/mechbay) +"emv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/bathroom{ + name = "Bathroom" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/captain/private) +"emI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/directional/north, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"emN" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"emS" = ( +/obj/effect/turf_decal/bot_white, +/obj/machinery/light_switch/directional/west, +/obj/structure/cargo_shelf, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"emX" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"emZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"enc" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"enf" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"ent" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Justice Gas Pump" + }, +/obj/machinery/door/window/right/directional/north{ + name = "Justice Storage"; + req_access = list("security") + }, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"enx" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/firealarm/directional/west, +/obj/structure/table, +/obj/item/storage/medkit/regular, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/storage/primary) +"eny" = ( +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"enB" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "kitchen_sec_shutters"; + name = "Kitchen Shutters Control"; + req_access = list("kitchen") + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"enD" = ( +/obj/machinery/airalarm/directional/west, +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"enE" = ( +/obj/machinery/light/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/atmos_control/nocontrol/incinerator{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal/incinerator) +"enT" = ( +/obj/structure/tank_dispenser, +/turf/open/floor/iron, +/area/station/science/ordnance/office) +"enU" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/ce) +"eoc" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"eog" = ( +/obj/structure/chair/stool/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"eoo" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"eot" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/sign/poster/random/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/blobstart, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"eoA" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 6 + }, +/obj/structure/table/optable{ + name = "Robotics Operating Table" + }, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) +"eoB" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/fireaxecabinet/mechremoval/directional/east, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"eoJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"eoL" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"eoS" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"epc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/box, +/turf/open/floor/plating, +/area/station/maintenance/port) +"epd" = ( +/obj/effect/spawner/random/maintenance, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/central) +"epk" = ( +/turf/open/floor/iron/dark/side, +/area/station/commons/locker) +"epA" = ( +/obj/effect/spawner/random/structure/musician/piano/random_piano, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"epF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"epO" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + location = "QM #5" + }, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/storage) +"epW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"eqa" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"eql" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark/side, +/area/station/commons/storage/primary) +"eqm" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"eqC" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/storage_shared) +"eqJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"eqS" = ( +/obj/machinery/light/directional/north, +/obj/structure/sign/poster/official/no_erp/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/dorms) +"eri" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"erA" = ( +/obj/effect/turf_decal/bot, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/flasher/portable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/security/armory) +"erC" = ( +/obj/item/stack/spacecash/c1000{ + pixel_y = 11; + pixel_x = 5; + value = 0; + name = "spess-opoly cash" + }, +/turf/open/floor/eighties/red, +/area/station/service/theater) +"erQ" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/paper_bin, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"erS" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"erV" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) +"esk" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Chemistry Factory" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/effect/landmark/navigate_destination/chemfactory, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/maintenance/starboard/aft) +"esr" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"ess" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"esS" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/structure/sign/departments/maint/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"esT" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"esU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"etg" = ( +/obj/structure/chair, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/iron, +/area/station/engineering/storage) +"etn" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"etp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Cargo Security Post Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/plating, +/area/station/maintenance/port) +"ett" = ( +/obj/machinery/teleport/station, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"etx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"etC" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/hydroponics/garden) +"etV" = ( +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo" + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"etW" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/gateway) +"eub" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"euj" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"euq" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/department/eva) +"euK" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) +"euP" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/structure/table/reinforced, +/obj/machinery/computer/security/telescreen/ordnance{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"euX" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable/multilayer/connected, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"eva" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/cable, +/obj/machinery/computer/security{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"evd" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Air to Distro"; + target_pressure = 500 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"evf" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"evj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outer_brig"; + name = "Brig Entrance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brigentrance" + }, +/obj/effect/landmark/navigate_destination/sec, +/turf/open/floor/iron/dark/textured, +/area/station/security/brig/entrance) +"evo" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/prison/visit) +"evr" = ( +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"evt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/frame/machine, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"evu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden, +/turf/open/floor/engine, +/area/station/security/execution) +"evv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"evx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"evD" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/machinery/suit_storage_unit/security, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"evJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"ewn" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"ewB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"ewE" = ( +/obj/structure/sign/warning/vacuum/external/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"ewG" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/airalarm/directional/west, +/obj/structure/chair/office/light{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/server) +"ewM" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Science - Artifact Lab, Test Chamber"; + name = "science camera"; + network = list("ss13","rd") + }, +/turf/open/floor/engine, +/area/station/science/explab) +"ewZ" = ( +/obj/machinery/power/floodlight, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"exf" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/highsecurity{ + name = "AI Upload Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/landmark/navigate_destination/aiupload, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"exj" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/five, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"exk" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/button/door/directional/east{ + id = "qm_warehouse"; + name = "Warehouse Door Control"; + req_access = list("cargo") + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/storage) +"ext" = ( +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "garbage"; + name = "disposal conveyor" + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"exw" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/directional/south, +/obj/machinery/computer/operating{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/exam_room) +"exz" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/central) +"exD" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/virology/glass{ + name = "Isolation B" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/turf/open/floor/iron/white/textured, +/area/station/medical/virology) +"exG" = ( +/obj/structure/hoop{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/security/prison/workout) +"exJ" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Medical - Pathology, Secondary Lab"; + name = "medical camera"; + network = list("ss13","medbay") + }, +/obj/structure/reagent_dispensers/wall/virusfood/directional/north, +/obj/machinery/disease2/centrifuge, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"exO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/port) +"exU" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/neutral/corner, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"eyh" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/button/door/directional/west{ + id = "toilet_5"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/structure/toilet{ + pixel_y = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"eyp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"eyt" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) +"eyN" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/service/library/artgallery) +"eyU" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/light_switch/directional/east, +/obj/machinery/firealarm/directional/south, +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical, +/obj/item/multitool, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/tcommsat/computer) +"ezd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/security/medical) +"ezf" = ( +/turf/closed/wall, +/area/station/commons/storage/primary) +"ezp" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"ezP" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"ezY" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/commons/locker) +"ezZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Funeral Parlor Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"eAg" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"eAj" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"eAp" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"eAS" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/conveyor{ + id = "package_sort_2" + }, +/obj/structure/plasticflaps, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) +"eBg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"eBj" = ( +/obj/structure/flora/rock/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"eBl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"eBn" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/closet/secure_closet/bar, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"eBw" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/wood/tile, +/area/station/security/prison/safe) +"eBD" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/light/directional/west, +/obj/machinery/status_display/evac/directional/west, +/obj/structure/closet/crate/trashcart/laundry, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) +"eBF" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"eBR" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/light/small/directional/south, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/folder/red{ + pixel_y = 6 + }, +/obj/item/pen{ + pixel_y = 6 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"eBU" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"eCd" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"eCu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"eCO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/food_or_drink/booze{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = -5; + pixel_y = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"eDg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/sign/warning/secure_area/directional/west, +/obj/machinery/shower/directional/east, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) +"eDk" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/paper_bin, +/obj/item/folder/white, +/obj/item/pen, +/turf/open/floor/iron/white, +/area/station/medical/office) +"eDD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"eDN" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"eDT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/dorms) +"eED" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"eEP" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/storage_shared) +"eFe" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics/garden) +"eFj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"eFs" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"eFM" = ( +/obj/effect/turf_decal/tile/neutral/anticorner, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/bot_white/right, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 1 + }, +/area/station/engineering/gravity_generator) +"eFV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/science/ordnance/office) +"eFX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/hidden{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"eGa" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Work Room" + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/work) +"eGm" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/cargo/storage) +"eGs" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/components/binary/tank_compressor{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"eGw" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=1"; + location = "Bridge" + }, +/obj/structure/plasticflaps/opaque, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/maintenance/central) +"eGI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"eGM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"eGT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"eGV" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/four, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"eGX" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/recharger, +/turf/open/floor/iron, +/area/station/command/gateway) +"eHe" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/obj/machinery/photocopier, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"eHO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"eIh" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/radio/intercom/directional/east, +/obj/structure/closet/secure_closet/medical2, +/obj/item/clothing/mask/breath/medical, +/obj/item/clothing/mask/breath/medical, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"eIj" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"eIw" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/plaque{ + icon_state = "L9" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"eIJ" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light_switch/directional/north, +/obj/machinery/suit_storage_unit/engine, +/turf/open/floor/iron, +/area/station/engineering/main) +"eIP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/grass, +/area/station/medical/virology) +"eIW" = ( +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/machinery/status_display/evac/directional/east, +/obj/structure/statue/sandstone/assistant, +/turf/open/floor/wood, +/area/station/commons/locker) +"eJg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/research) +"eJo" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = -8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/medical/cryo) +"eJp" = ( +/obj/machinery/light/directional/west, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"eJq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"eJt" = ( +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"eJA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/wood, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"eJD" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"eJG" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/washing_machine, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) +"eKm" = ( +/obj/machinery/atmospherics/miner/oxygen, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos) +"eKp" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/structure/table, +/obj/item/shovel, +/obj/item/storage/box/emptysandbags, +/turf/open/floor/iron, +/area/station/command/gateway) +"eKr" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/storage) +"eKA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/telecomms/server/presets/service, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"eKT" = ( +/obj/effect/spawner/random/trash/box, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"eKY" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/gun/energy/e_gun/dragnet{ + pixel_y = 4 + }, +/obj/item/gun/energy/e_gun/dragnet, +/obj/effect/nettingportal, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"eLl" = ( +/obj/machinery/light/small/built/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"eLo" = ( +/obj/machinery/light/floor/has_bulb, +/obj/machinery/duct, +/turf/open/floor/plastic, +/area/station/security/prison/safe) +"eLx" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/small/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/glass, +/obj/item/storage/medkit/regular{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/storage/medkit/brute{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/brute, +/obj/item/storage/medkit/brute{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/machinery/door/window/left/directional/east{ + name = "First-Aid Supplies"; + req_access = list("medical") + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"eLA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/door/poddoor/preopen{ + id = "execution_fireblast" + }, +/obj/machinery/door/airlock/security/glass{ + name = "Justice Chamber Interior" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/security/execution) +"eMa" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - Tech Storage"; + name = "engineering camera" + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"eMb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security{ + name = "Evidence Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron/dark/textured, +/area/station/security/evidence) +"eMc" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"eMh" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 5 + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/cargo/storage) +"eMi" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"eMz" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"eMH" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/grass, +/area/station/ai_monitored/security/armory) +"eMR" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"eNi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/tcommsat/computer) +"eNn" = ( +/obj/machinery/light/directional/south, +/obj/structure/sign/poster/official/nanotrasen_logo/directional/south, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"eNs" = ( +/turf/closed/wall, +/area/station/hallway/primary/central) +"eNx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/binary/valve/digital/on, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"eNC" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"eNK" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side, +/area/station/cargo/miningoffice) +"eNN" = ( +/obj/structure/bodycontainer/crematorium{ + id = "crematorium_chapel"; + dir = 8 + }, +/obj/machinery/button/crematorium{ + id = "crematorium_chapel"; + pixel_x = 26 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"eNV" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/binary/valve{ + name = "Justice Gas Valve" + }, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"eNW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/storage) +"eOe" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"eOj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"eOt" = ( +/obj/effect/turf_decal/trimline/neutral/warning, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"eOJ" = ( +/obj/item/target/clown, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"eON" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ePa" = ( +/obj/structure/table/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/assembly/timer, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"ePb" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"ePf" = ( +/obj/item/storage/secure/safe/directional/east, +/obj/structure/displaycase/captain, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"ePr" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/iron/white/textured, +/area/station/science/auxlab) +"ePw" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ePO" = ( +/obj/item/radio/intercom/directional/east, +/obj/structure/table/reinforced, +/obj/item/radio/off, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"ePQ" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/bed/dogbed, +/mob/living/basic/pet/dog/bullterrier{ + name = "Walter"; + real_name = "Walter"; + desc = "It's Walter!" + }, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"ePX" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/janitor) +"eQj" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"eQm" = ( +/obj/effect/turf_decal/box, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/virology) +"eQw" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/south{ + name = "Kitchen and Bar"; + req_access = list("bar") + }, +/obj/machinery/door/window/left/directional/north{ + name = "Kitchen and Bar"; + req_access = list("kitchen") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen_sec_shutters"; + name = "Kitchen Shutters"; + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/kitchen) +"eQI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/freezerchamber) +"eQN" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/wood, +/area/station/service/library) +"eQO" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/structure/table/wood, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"eQZ" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/closet/secure_closet/medical3, +/obj/item/wrench/medical, +/turf/open/floor/iron/white, +/area/station/medical/office) +"eRr" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "secure_storage"; + name = "Engineering Secure Storage" + }, +/obj/machinery/button/door/directional/north{ + id = "engineering"; + name = "Engineering Lockdown"; + pixel_x = -11 + }, +/obj/machinery/button/door/directional/north{ + id = "atmos"; + name = "Atmospherics Lockdown"; + pixel_x = 11 + }, +/obj/structure/table/reinforced, +/obj/machinery/fax{ + fax_name = "Chief Engineer's Office"; + name = "Chief Engineer's Fax Machine" + }, +/obj/machinery/keycard_auth/directional/north{ + pixel_y = 34 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"eRs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"eRQ" = ( +/obj/machinery/vending/cigarette, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"eRV" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"eSd" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"eSr" = ( +/obj/effect/spawner/random/engineering/material_cheap, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"eSC" = ( +/obj/effect/turf_decal/delivery/white, +/obj/machinery/light/directional/south, +/obj/structure/closet/crate/freezer, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"eSL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/security/glass{ + name = "Cell 4" + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/safe) +"eSQ" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/structure/chair, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"eSX" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/duct, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"eTd" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "tele_shutter"; + name = "Teleporter Shutters"; + pixel_x = -6; + pixel_y = 8 + }, +/obj/machinery/button/door{ + id = "eva_shutters"; + name = "EVA Shutters"; + pixel_x = 6; + pixel_y = 8 + }, +/obj/machinery/button/door{ + id = "bridge_blast_doors"; + name = "Bridge Access Blast doors"; + pixel_x = 6; + pixel_y = -2 + }, +/obj/machinery/button/door{ + id = "bridge_windows"; + name = "Bridge View Blast doors"; + pixel_x = -6; + pixel_y = -2 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"eTo" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"eTq" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"eTt" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"eTx" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_blue/line, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"eTG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 8 + }, +/obj/effect/mapping_helpers/mail_sorting/supply/qm_office, +/turf/open/floor/iron, +/area/station/cargo/storage) +"eTW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port) +"eTY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"eUa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark_red/arrow_ccw{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"eUc" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/structure/table, +/obj/item/book/manual/wiki/cooking_to_serve_man, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = 9; + pixel_y = 3 + }, +/obj/item/storage/fancy/egg_box, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"eUr" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"eUB" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"eUE" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"eUK" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"eUO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"eUW" = ( +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"eVi" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"eVz" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/port) +"eVB" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"eVF" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/aft) +"eVL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"eVT" = ( +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"eVV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"eVZ" = ( +/obj/effect/turf_decal/tile/green, +/obj/item/radio/intercom/directional/north, +/obj/structure/table, +/obj/machinery/plantgenes{ + pixel_y = 6 + }, +/obj/item/clothing/suit/apron, +/obj/item/clothing/accessory/armband/hydro, +/obj/item/wrench, +/obj/item/botanical_lexicon, +/obj/item/botanical_lexicon, +/obj/item/botanical_lexicon, +/obj/item/botanical_lexicon, +/obj/item/botanical_lexicon, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/service/hydroponics) +"eWa" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"eWd" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/vending/coffee, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"eWq" = ( +/obj/structure/toilet{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/captain/private) +"eWs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 5 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 5; + pixel_x = 4 + }, +/obj/item/stack/rods/fifty{ + pixel_y = 6; + pixel_x = -6 + }, +/obj/item/stack/rods/fifty, +/turf/open/floor/iron, +/area/station/engineering/storage) +"eWv" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"eWw" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/structure/sign/departments/maint/directional/north, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"eWx" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"eWG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"eXv" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"eXy" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Post - Medbay" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron/dark/textured, +/area/station/security/checkpoint/medical) +"eXJ" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible/layer2, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"eXV" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port) +"eYm" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/mask/cigarette/cigar, +/obj/item/pinpointer/nuke, +/obj/machinery/light/directional/west, +/obj/item/melee/baton, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"eYp" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/requests_console/directional/north{ + department = "Cargo Bay"; + name = "Cargo Bay Requests Console"; + supplies_requestable = 1 + }, +/obj/machinery/computer/order_console/bitrunning, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/storage) +"eYI" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname/directional/south, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/holding_cell) +"eYU" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"eYX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"eYZ" = ( +/obj/machinery/airalarm/directional/east, +/obj/structure/table/wood, +/obj/item/razor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/flashlight/lamp/green, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"eZf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/chair, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"eZq" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/light/directional/south, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/cable, +/obj/machinery/computer/crew{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"eZC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/structure/closet/secure_closet/atmospherics, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"eZG" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/gravity_generator) +"eZM" = ( +/obj/effect/turf_decal/bot_red, +/obj/item/toy/plush/space_lizard_plushie, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"eZP" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/prison/workout) +"eZR" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/storage/backpack/duffelbag/med/surgery, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"fab" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/computer/monitor, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"faw" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/west, +/obj/structure/closet/crate, +/obj/item/stack/sheet/iron/five, +/obj/item/assembly/shock_kit, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"fay" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"fbk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"fbm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"fbw" = ( +/obj/machinery/modular_computer/preset/id{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"fbx" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/miningoffice) +"fby" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"fbT" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/wood, +/area/station/maintenance/starboard/aft) +"fbU" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"fce" = ( +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/bot_white/left, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 4 + }, +/area/station/command/gateway) +"fch" = ( +/obj/structure/table, +/obj/item/shovel/spade, +/obj/item/plant_analyzer, +/obj/item/cultivator, +/obj/item/reagent_containers/cup/watering_can, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"fck" = ( +/obj/structure/table, +/obj/item/analysis_bin, +/turf/open/floor/iron/white, +/area/station/science/auxlab) +"fcm" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/rd{ + dir = 4 + }, +/obj/effect/landmark/start/research_director, +/turf/open/floor/iron/vaporwave, +/area/station/command/heads_quarters/rd) +"fcr" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/structure/sign/warning/secure_area/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"fcR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"fcY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"fdb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/grunge{ + name = "Stall 2" + }, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"fde" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"fdt" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space, +/area/space/nearstation) +"fdC" = ( +/obj/structure/sign/departments/aisat/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Engineering - MiniSat Transit Pod Access, External"; + network = list("ss13","rd","xeno_pens"); + name = "engineering camera"; + start_active = 1 + }, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"fdI" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"fdO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/iron/white, +/area/station/maintenance/port/fore) +"fdT" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating/airless, +/area/station/engineering/atmos) +"fec" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"fei" = ( +/obj/machinery/light/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"fep" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"feq" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"fex" = ( +/obj/structure/railing{ + dir = 4; + layer = 4.1 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"feD" = ( +/obj/structure/closet/wardrobe/green, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/locker) +"feS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"feW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"feX" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"feY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"fft" = ( +/obj/structure/rack, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil{ + pixel_y = 7; + pixel_x = 3 + }, +/obj/item/crowbar/red, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"ffw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch{ + name = "Satellite Antechamber" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "ai-passthrough" + }, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/turret_protected/aisat_interior) +"ffx" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"ffz" = ( +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"ffH" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/storage) +"fge" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"fgj" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance/freezerchamber) +"fgv" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 10 + }, +/turf/open/space/basic, +/area/space/nearstation) +"fgw" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"fgC" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/structure/sign/directions/cryo/directional/west{ + dir = 4 + }, +/obj/structure/sign/directions/dorms/directional/west{ + pixel_y = -9 + }, +/obj/structure/sign/directions/arrival/directional/west{ + pixel_y = 9 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"fgD" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/service/janitor) +"fgE" = ( +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"fgI" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/computer/crew, +/turf/open/floor/iron, +/area/station/medical/paramedic) +"fgN" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + name = "Surgery" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/iron/white/textured, +/area/station/medical/surgery) +"fgW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/cargo/office) +"fhd" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"fhe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"fhs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"fhw" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Post - Arrivals" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron/dark/textured, +/area/station/security/checkpoint/customs/auxiliary) +"fhD" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 5 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/freezerchamber) +"fii" = ( +/obj/structure/table/wood, +/obj/machinery/cassette/dj_station{ + pixel_y = 12 + }, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"fim" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"fiq" = ( +/obj/structure/sign/painting/library{ + pixel_y = -32 + }, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"fir" = ( +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"fiA" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/engineering/main) +"fiB" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/filingcabinet, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"fiC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"fiS" = ( +/obj/machinery/light/directional/west, +/obj/machinery/status_display/ai/directional/west, +/turf/open/floor/carpet, +/area/station/service/chapel) +"fjo" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness) +"fjx" = ( +/obj/item/radio/intercom/directional/north, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"fjE" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/medical/psychology) +"fjH" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/bodycontainer/morgue{ + dir = 2 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"fjT" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/machinery/atmospherics/components/trinary/filter/atmos/n2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"fjY" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/tcommsat/computer) +"fkC" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"fkD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"fkT" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"flc" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"fld" = ( +/turf/closed/wall, +/area/station/security/courtroom) +"fli" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/hop) +"flo" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/miningoffice) +"flr" = ( +/obj/structure/sign/warning/rad_shelter/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"flt" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"flu" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/chair/sofa/corp/left{ + color = "#7fb3d5"; + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"flJ" = ( +/obj/structure/table/wood, +/obj/item/storage/photo_album/chapel, +/obj/item/camera, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"flK" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/red/corner, +/obj/structure/table, +/obj/item/gun/energy/laser/practice, +/obj/item/gun/energy/laser/practice{ + pixel_x = 2; + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"flM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Chapel Lobby" + }, +/obj/effect/landmark/navigate_destination/chapel, +/turf/open/floor/iron/dark/textured, +/area/station/service/chapel) +"flR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 8 + }, +/obj/effect/mapping_helpers/mail_sorting/service/bar, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"flU" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/table, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/breath/medical, +/obj/item/tank/internals/anesthetic, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) +"fmb" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning, +/turf/open/floor/iron/dark/side, +/area/station/cargo/storage) +"fme" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"fmr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "perma_lockdown"; + name = "Lockdown Blast Door" + }, +/obj/machinery/door/airlock/public/glass{ + name = "Visitation" + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/visit) +"fmJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat_interior) +"fmZ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/structure/reagent_dispensers/wall/peppertank/directional/north, +/obj/machinery/requests_console/directional/east{ + anon_tips_receiver = 1; + assistance_requestable = 1; + department = "Security"; + name = "Security Requests Console" + }, +/obj/structure/closet/secure_closet/security/cargo, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"fni" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/newscaster/directional/north, +/obj/machinery/light/small/directional/north, +/obj/structure/filingcabinet, +/turf/open/floor/wood, +/area/station/medical/psychology) +"fnt" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/tcommsat/computer) +"fnw" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 10 + }, +/obj/structure/cable, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"fnH" = ( +/obj/machinery/light/directional/north, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/structure/bookcase/random/religion, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"fnI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/floor/has_bulb, +/obj/machinery/duct, +/turf/open/floor/stone, +/area/station/science/xenobiology) +"fnK" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"fnN" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/dorms) +"fon" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/status_display/evac/directional/west, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"fop" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"foq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"foE" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"foK" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/cable, +/obj/item/radio/intercom/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"foP" = ( +/obj/structure/chair/stool/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) +"foU" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/warning, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"fpa" = ( +/obj/machinery/conveyor{ + dir = 9; + id = "garbage" + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"fpk" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"fpp" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/status_display/ai/directional/north, +/obj/machinery/rnd/production/protolathe/department/engineering, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/break_room) +"fpF" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/aft) +"fpM" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 8 + }, +/obj/machinery/door/window/left/directional/west{ + name = "Waste Management"; + req_access = list("shipping") + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/sorting) +"fpO" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"fpV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"fpY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/table/wood, +/obj/item/paper_bin, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"fqe" = ( +/turf/closed/wall/r_wall, +/area/station/security/processing) +"fqj" = ( +/obj/structure/closet/crate, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"fqk" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/miningoffice) +"fqx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"fqH" = ( +/obj/structure/dresser, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"fqI" = ( +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 4 + }, +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"fqJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"fqQ" = ( +/turf/open/floor/grass, +/area/station/science/genetics) +"fqV" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"fqY" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"fro" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"frv" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/spawner/random/clothing/gloves, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"frw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"frx" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness) +"frC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/light/small/directional/west, +/obj/item/radio/intercom/directional/west, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/closet/crate, +/obj/item/stack/ore/iron, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/miningoffice) +"frS" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/recharge_station, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"fsd" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"fsm" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"fsE" = ( +/turf/closed/wall/r_wall, +/area/station/science/genetics) +"fsF" = ( +/obj/structure/sign/warning/electric_shock/directional/south, +/obj/machinery/light/directional/south, +/obj/structure/cable/multilayer/connected, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/ai_monitored/command/storage/satellite) +"fsH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"fte" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/structure/bed/roller, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"ftk" = ( +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"ftr" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"fuc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/trash/box, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"fuf" = ( +/mob/living/carbon/human/species/monkey, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"fuh" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/nanite_chamber, +/turf/open/floor/iron/white, +/area/station/science/research) +"fuM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"fuS" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"fvh" = ( +/obj/structure/disposalpipe/sorting/mail{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/mail_sorting/service/hop_office, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"fvk" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=2"; + location = "Engineering" + }, +/obj/structure/plasticflaps/opaque, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) +"fvn" = ( +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"fvt" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/delivery/white, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"fvz" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"fvH" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/qm) +"fvV" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/wirecutters, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"fvW" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"fvX" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/cargo/miningoffice) +"fwb" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"fwd" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"fwn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) +"fwt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"fwv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"fwB" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"fwT" = ( +/obj/machinery/light/directional/west, +/obj/structure/sign/painting/library{ + pixel_x = -32 + }, +/turf/open/floor/wood, +/area/station/service/library) +"fxh" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"fxk" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/main) +"fxu" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/table/wood, +/obj/item/toy/plush/snakeplushie, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"fxy" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/filingcabinet/chestdrawer, +/obj/machinery/light_switch/directional/south{ + pixel_x = 8 + }, +/obj/item/storage/secure/briefcase, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) +"fxF" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"fxG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"fxI" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) +"fxL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"fxN" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/machinery/requests_console/auto_name/directional/south, +/obj/machinery/vending/assist, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"fxU" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/closet/emcloset, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"fyc" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/light/small/directional/north, +/obj/machinery/computer/security/telescreen/interrogation{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"fyf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"fyt" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 6 + }, +/turf/open/space/basic, +/area/space/nearstation) +"fyu" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/station/maintenance/port) +"fyA" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"fyZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"fza" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"fzi" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Mix to Filter" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"fzB" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"fzI" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/large, +/area/station/service/hydroponics) +"fzJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/table/wood, +/obj/machinery/requests_console/auto_name/directional/west, +/obj/machinery/newscaster/directional/north, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"fzK" = ( +/obj/machinery/firealarm/directional/west, +/obj/machinery/light/small/directional/west, +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"fzM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"fzW" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"fAa" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/clothing/mask/surgical, +/obj/item/clothing/mask/surgical{ + pixel_y = 8 + }, +/obj/item/wrench/medical, +/obj/item/book/manual/wiki/surgery, +/obj/item/tank/internals/anesthetic, +/obj/item/tank/internals/anesthetic, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"fAf" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"fAn" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"fAq" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/carpet/purple, +/area/station/commons/dorms) +"fAE" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos/storage) +"fAL" = ( +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"fAQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"fBd" = ( +/obj/structure/chair/office, +/turf/open/floor/carpet/red, +/area/station/commons/vacant_room/office) +"fBh" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/light/small/directional/east, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"fBi" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"fBQ" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"fBU" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"fBY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"fCb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/carpet, +/area/station/service/library) +"fCw" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"fCT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/fitness) +"fDb" = ( +/obj/effect/turf_decal/trimline/neutral/filled/end{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"fDe" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/closet/secure_closet/brig, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"fDg" = ( +/obj/structure/dresser, +/turf/open/floor/carpet/purple, +/area/station/commons/dorms) +"fDt" = ( +/obj/machinery/duct, +/turf/open/floor/wood/large, +/area/station/security/prison/safe) +"fDB" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"fDD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"fDG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Funeral Parlor" + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/chapel/funeral) +"fDQ" = ( +/obj/structure/closet/firecloset{ + anchored = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"fEm" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) +"fEr" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/iron/dark/side, +/area/station/cargo/storage) +"fEs" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/obj/item/stack/ore/iron, +/obj/item/stack/ore/iron, +/obj/item/stack/ore/iron, +/obj/item/stack/ore/iron, +/obj/item/stack/ore/iron, +/turf/open/floor/plating, +/area/station/maintenance/port) +"fEz" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/plaque{ + icon_state = "L14" + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"fEG" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning, +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"fEJ" = ( +/obj/effect/turf_decal/trimline/green/filled/warning, +/obj/effect/turf_decal/trimline/green/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"fEP" = ( +/obj/structure/lattice, +/obj/effect/spawner/random/structure/grille, +/turf/open/space/basic, +/area/space/nearstation) +"fET" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"fEX" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"fFd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"fFe" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/wood/large, +/area/station/security/prison/safe) +"fFi" = ( +/obj/structure/table/reinforced, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"fFr" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"fFP" = ( +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness/recreation) +"fFR" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/status_display/door_timer{ + id = "Cell 2"; + name = "Cell 2"; + pixel_y = -32 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"fFV" = ( +/turf/closed/wall, +/area/station/solars/port/aft) +"fGh" = ( +/obj/structure/sign/warning/test_chamber/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"fGl" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/commons/storage/primary) +"fGD" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/sign/warning/no_smoking/directional/north, +/obj/machinery/space_heater, +/turf/open/floor/iron, +/area/station/engineering/storage) +"fGH" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/structure/chair/sofa/corp/right{ + color = "#7fb3d5"; + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"fGO" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/line, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"fHb" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"fHc" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"fHm" = ( +/obj/effect/mapping_helpers/dead_body_placer, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"fHo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"fHz" = ( +/obj/structure/sign/warning/vacuum/directional/north, +/obj/structure/table, +/obj/item/crowbar/red, +/obj/item/wrench, +/obj/item/clothing/mask/gas, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"fHA" = ( +/obj/effect/turf_decal/trimline/purple/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"fHI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"fHK" = ( +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness) +"fHS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/grunge{ + name = "Vacant Office" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/vacant_room/office) +"fHX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"fHY" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"fIl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"fIw" = ( +/obj/machinery/atmospherics/components/tank/oxygen{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"fIz" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/storage/primary) +"fIH" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/modular_computer/preset/id{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"fII" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) +"fIO" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"fIV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"fIX" = ( +/turf/closed/wall/r_wall, +/area/station/science/robotics/lab) +"fJb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security{ + name = "Detective's Office" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/detective, +/obj/effect/landmark/navigate_destination/det, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured, +/area/station/security/detectives_office) +"fJd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"fJh" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/office) +"fJl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"fJn" = ( +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/janitor) +"fJv" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"fJx" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/machinery/newscaster/directional/north, +/obj/structure/sign/poster/random/directional/west, +/obj/machinery/vending/wardrobe/cargo_wardrobe, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/cargo/storage) +"fJA" = ( +/turf/closed/wall/r_wall, +/area/station/science/genetics/cloning) +"fJK" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/ai) +"fJY" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"fKj" = ( +/turf/closed/wall, +/area/station/maintenance/department/science/xenobiology) +"fKo" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"fKp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"fKO" = ( +/obj/structure/marker_beacon/burgundy, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"fKX" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/radio/intercom/directional/east, +/obj/structure/chair/office, +/obj/effect/landmark/start/detective, +/turf/open/floor/iron/dark, +/area/station/security/detectives_office) +"fLf" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light_switch/directional/south, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"fLi" = ( +/obj/effect/turf_decal/tile/green, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/botanist, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/service/hydroponics) +"fLA" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"fLJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/public/glass{ + name = "Cafeteria" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"fLO" = ( +/obj/machinery/light/small/broken/directional/north, +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"fMd" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/sign/warning/vacuum/external/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"fMj" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/plating, +/area/station/science/server) +"fMm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "bridge_blast_doors"; + name = "Bridge Access Blast Door" + }, +/obj/machinery/door/airlock/command/glass{ + name = "Conference Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/command/meeting_room) +"fMq" = ( +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 8 + }, +/turf/open/floor/iron/large, +/area/station/engineering/gravity_generator) +"fMt" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) +"fMv" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/prison/workout) +"fMx" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/station/engineering/gravity_generator) +"fMC" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Service - Chapel Office, Backroom"; + name = "service camera" + }, +/obj/structure/table/wood, +/obj/item/clothing/under/misc/burial, +/obj/item/clothing/under/misc/burial, +/obj/item/clothing/under/misc/burial, +/obj/item/clothing/under/misc/burial, +/obj/item/clothing/under/misc/burial, +/obj/item/storage/box/bodybags{ + pixel_x = 4; + pixel_y = 6 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"fNe" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/office) +"fNr" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"fNy" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"fNF" = ( +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"fOe" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"fOn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"fOz" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"fOA" = ( +/turf/closed/wall/r_wall, +/area/space/nearstation) +"fOB" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/computer/pod/old/mass_driver_controller/trash{ + pixel_x = -6; + pixel_y = 24 + }, +/obj/machinery/button/door/directional/north{ + id = "disposal_exit"; + name = "Disposal Vent Control"; + req_access = list("maint_tunnels"); + pixel_x = 6 + }, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"fOT" = ( +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) +"fOV" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "apothecary_shutters"; + name = "Apothecary Shutters" + }, +/turf/open/floor/plating, +/area/station/medical/pharmacy) +"fOZ" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics) +"fPj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"fPp" = ( +/obj/machinery/atmospherics/components/binary/valve{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"fPr" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"fPs" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"fPL" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"fPN" = ( +/turf/closed/wall, +/area/station/maintenance/port/fore) +"fPS" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics) +"fQq" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"fQt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Departure Lounge" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/landmark/navigate_destination/dockesc, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"fQI" = ( +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) +"fQJ" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"fQS" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"fQY" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"fRi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east, +/obj/machinery/netpod, +/turf/open/floor/iron/dark/smooth_large, +/area/station/bitrunning/den) +"fRp" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + name = "Research Division Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/turf/open/floor/iron/white/textured, +/area/station/science/research) +"fRq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"fRr" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/table, +/obj/item/clothing/gloves/color/yellow, +/obj/item/storage/toolbox/electrical{ + pixel_y = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"fRx" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"fRT" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/white/smooth_large, +/area/station/maintenance/department/science) +"fRU" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"fRW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"fSg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"fSi" = ( +/obj/machinery/power/terminal, +/obj/machinery/light/small/directional/east, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"fSj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/workout) +"fSw" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 6 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/cargo/sorting) +"fSG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/xenobio, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"fSM" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"fSW" = ( +/obj/machinery/modular_computer/preset/id, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"fSX" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"fTg" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/trimline/dark_blue/line, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"fTi" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"fTm" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"fTr" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/medical/medbay/lobby) +"fTu" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"fTx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/security/prison/workout) +"fTE" = ( +/obj/structure/closet/toolcloset, +/turf/open/floor/iron, +/area/station/construction) +"fTT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/iv_drip, +/turf/open/floor/iron/white, +/area/station/maintenance/port/fore) +"fTU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/secondary/service) +"fUs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port) +"fUU" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"fUV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"fUX" = ( +/obj/machinery/newscaster/directional/north, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"fVh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/janitor) +"fVi" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters{ + id = "engi_security_post"; + name = "Security Post Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/security/checkpoint/engineering) +"fVj" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/side, +/area/station/cargo/sorting) +"fVn" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"fVA" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/main) +"fVB" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"fVI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/office) +"fVP" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"fVR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/requests_console/auto_name/directional/west, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"fVU" = ( +/obj/machinery/light/small/broken/directional/north, +/obj/effect/spawner/random/structure/table, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/cell/lead, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"fVV" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"fVX" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 9 + }, +/obj/machinery/light_switch/directional/west, +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/landmark/start/roboticist, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"fVY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/corner, +/area/station/commons/fitness/recreation) +"fWm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/science/ordnance) +"fWt" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"fWD" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/light/directional/east, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"fXb" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"fXd" = ( +/obj/structure/closet/secure_closet/freezer/kitchen/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"fXj" = ( +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"fXk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"fXE" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/station/solars/port/fore) +"fXF" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 6 + }, +/obj/item/radio/off{ + pixel_x = -5 + }, +/obj/item/screwdriver{ + pixel_y = 10 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"fXZ" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/obj/structure/sign/departments/custodian/directional/west, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"fYg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/service{ + name = "Service Hall" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/general, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/service) +"fYh" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/airalarm/directional/east, +/obj/machinery/medical_kiosk, +/turf/open/floor/iron/dark, +/area/station/medical/exam_room) +"fYj" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/obj/machinery/light/directional/south, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"fYu" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/table/reinforced, +/obj/item/storage/belt/utility, +/obj/item/crowbar/large, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"fYx" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"fYL" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/computer/crew{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"fYX" = ( +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"fZp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"fZy" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_lockdown"; + name = "Medbay Emergency Lockdown Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/medical/paramedic) +"fZB" = ( +/turf/open/floor/wood, +/area/station/service/bar) +"fZD" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"fZK" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"fZN" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/line, +/obj/structure/table, +/obj/item/electronics/apc, +/obj/item/electronics/airlock, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"fZO" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/chem_master/condimaster, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics) +"fZT" = ( +/obj/machinery/light/directional/east, +/obj/structure/sign/poster/random/directional/east, +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"fZX" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"gaa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"gag" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"gai" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/maintenance/port) +"gap" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/ore_box, +/turf/open/floor/plating, +/area/station/maintenance/port) +"gav" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"gax" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot, +/obj/machinery/status_display/evac/directional/west, +/obj/machinery/light/small/directional/west, +/obj/machinery/vending/imported, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"gay" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/structure/table, +/obj/structure/reagent_dispensers/wall/peppertank/directional/north, +/obj/machinery/recharger{ + pixel_x = -7 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/light/directional/north, +/obj/machinery/recharger{ + pixel_x = 7 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -3; + pixel_y = -5 + }, +/obj/item/clothing/glasses/sunglasses{ + pixel_x = 8; + pixel_y = 10 + }, +/obj/machinery/camera/autoname/directional/east{ + dir = 6 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"gbh" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"gbn" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"gbD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"gbH" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/lab) +"gbM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"gbS" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/dresser, +/turf/open/floor/iron/dark, +/area/station/security/detectives_office) +"gcq" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"gct" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"gcu" = ( +/obj/machinery/light/directional/east, +/obj/structure/table, +/obj/item/taperecorder, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"gcx" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"gcz" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"gcD" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/storage/tech) +"gcH" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"gdg" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/light/small/directional/south, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/structure/closet{ + name = "Evidence Closet" + }, +/turf/open/floor/iron/dark, +/area/station/security/evidence) +"gdk" = ( +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"gdm" = ( +/obj/effect/turf_decal/trimline/green/filled/warning, +/obj/effect/turf_decal/trimline/green/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"gdw" = ( +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"gdx" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"gdB" = ( +/obj/item/radio/intercom/directional/north, +/obj/structure/closet/crate, +/obj/item/crowbar/red, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"gea" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"geu" = ( +/obj/structure/table, +/obj/item/stock_parts/subspace/amplifier, +/obj/item/stock_parts/subspace/amplifier, +/obj/item/stock_parts/subspace/amplifier, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"gey" = ( +/obj/machinery/duct, +/turf/open/floor/wood/tile, +/area/station/security/prison/safe) +"geB" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 6 + }, +/obj/machinery/firealarm/directional/south, +/obj/structure/closet/secure_closet/courtroom, +/obj/item/gavelhammer, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"geR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"geT" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/effect/mapping_helpers/apc/full_charge, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"gfn" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"gfA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"gfI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"gfK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) +"gfX" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/red/corner, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"ggk" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/structure/sign/warning/rad_shelter/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"ggo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/mess) +"ggp" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner, +/turf/open/floor/iron/dark/corner, +/area/station/cargo/storage) +"ggq" = ( +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/theater) +"ggz" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/vending/wardrobe/gene_wardrobe, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"ggR" = ( +/turf/open/floor/carpet/red, +/area/station/commons/dorms) +"ggV" = ( +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 4 + }, +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"ghg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/camera/motion/directional/north{ + c_tag = "AI Sat - AI Chamber North"; + network = list("aicore") + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"ghk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"ghp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) +"ghs" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/structure/chair/office, +/obj/effect/landmark/start/warden, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"ghA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/barricade/wooden, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"ghH" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"ghN" = ( +/obj/machinery/light/floor/has_bulb, +/obj/effect/landmark/event_spawn, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"ghV" = ( +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/commons/fitness) +"gim" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Primary AI Core"; + req_access = list("ai_upload") + }, +/obj/machinery/flasher/directional/south{ + id = "AI"; + name = "Meatbag Pacifier"; + pixel_x = -6 + }, +/obj/machinery/light_switch/directional/south{ + pixel_x = 6 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "primary_ai_core_shutters"; + name = "Primary AI Core Shutters" + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"giy" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/button/door/directional/west{ + id = "toilet_4"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/structure/toilet{ + pixel_y = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"giM" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/prison) +"giZ" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/reagent_dispensers/wall/peppertank/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"gja" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"gjb" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"gje" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"gji" = ( +/turf/closed/wall, +/area/station/service/library/printer) +"gjB" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/lavendergrass/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"gkG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Chief Engineer's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/ce, +/turf/open/floor/iron/textured, +/area/station/command/heads_quarters/ce) +"gkH" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"gkK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"gkM" = ( +/obj/machinery/door/window/right/directional/south, +/obj/structure/table/wood/fancy, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"gkP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/service{ + name = "Theater Backstage" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/theatre, +/obj/effect/landmark/navigate_destination/common/theatrebackstage, +/turf/open/floor/iron/dark/textured, +/area/station/service/theater) +"gkZ" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"gla" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 8 + }, +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/item/pen, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/office) +"gli" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"gln" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/radiation/directional/east, +/turf/open/space/basic, +/area/space/nearstation) +"glB" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_lockdown"; + name = "Medbay Emergency Lockdown Shutters"; + dir = 8 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/cryo) +"gmc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Teleport Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/teleporter, +/obj/effect/landmark/navigate_destination, +/turf/open/floor/iron/dark/textured, +/area/station/command/teleporter) +"gmh" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Brig Control" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/turf/open/floor/iron/dark/textured, +/area/station/security/warden) +"gmo" = ( +/mob/living/basic/slime, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"gmC" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"gmD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/trinary/filter/atmos/co2{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/medical/cryo) +"gmE" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos) +"gmK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/dorms) +"gmN" = ( +/obj/machinery/light/directional/west, +/obj/machinery/computer/security/telescreen/entertainment/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness/recreation) +"gmT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/obj/effect/spawner/random/trash/cigbutt, +/obj/item/broken_bottle, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"gmU" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/structure/table, +/obj/item/paper_bin, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron/white, +/area/station/science/lab) +"gnj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/starboard/aft) +"gnk" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"gnK" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/button/flasher{ + id = "holding_flash"; + name = "Holding Cell Flasher"; + pixel_y = -26; + req_access = list("security") + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"goc" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/landmark/start/depsec/science, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"goi" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"goq" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"gow" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"goz" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/hydroponics/garden) +"goA" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) +"goC" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"goI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"goP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"goR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"gpi" = ( +/obj/machinery/light/directional/north, +/obj/machinery/button/door/directional/north{ + id = "xenobiomain"; + name = "Containment Blast Doors"; + req_access = list("xenobiology") + }, +/obj/structure/table/reinforced/plasmarglass, +/obj/item/vacuum_pack, +/obj/item/vacuum_pack, +/obj/item/vacuum_pack, +/obj/item/disk/vacuum_upgrade/biomass, +/obj/item/disk/vacuum_upgrade/biomass, +/obj/item/disk/vacuum_upgrade/biomass, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"gpq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/frame/machine, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"gpt" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) +"gpy" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/light/small/directional/north, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"gpz" = ( +/obj/item/radio/intercom/directional/west{ + freerange = 1; + listening = 0; + name = "Common Channel"; + pixel_y = -12 + }, +/obj/item/radio/intercom/directional/east{ + freerange = 1; + listening = 0; + name = "Custom Channel"; + pixel_y = -12 + }, +/obj/item/radio/intercom/directional/south{ + freerange = 1; + frequency = 1447; + listening = 0; + name = "Private Channel" + }, +/obj/effect/landmark/start/ai, +/obj/machinery/button/door/directional/south{ + pixel_x = -24; + req_access = list("ai_upload"); + id = "primary_ai_core_shutters"; + name = "Primary AI Core Shutters Control" + }, +/obj/machinery/button/door/directional/south{ + pixel_x = 24; + req_access = list("ai_upload"); + name = "AI Chamber Lockdown"; + id = "AI Chamber entrance shutters" + }, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai) +"gqj" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + name = "freezer passive vent" + }, +/turf/open/floor/circuit/telecomms/server, +/area/station/science/server) +"gqk" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/machinery/airalarm/directional/west, +/obj/structure/table/glass, +/obj/machinery/computer/records/medical/laptop, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"gqq" = ( +/obj/structure/sign/poster/official/ian/directional/north, +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"gqF" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/closet/secure_closet/warden, +/obj/item/clothing/mask/gas/sechailer, +/obj/item/key/security, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"gqK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"gqL" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/autolathe, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"gqX" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"grj" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/fore) +"grz" = ( +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"grB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"grF" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"grG" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"grI" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/closet/wardrobe/mixed, +/turf/open/floor/iron/white, +/area/station/science/genetics/cloning) +"grL" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/structure/sign/poster/official/report_crimes/directional/east, +/turf/open/floor/iron/white, +/area/station/science/research) +"grO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"grW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"gsh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"gsj" = ( +/obj/machinery/mineral/stacking_machine{ + input_dir = 1; + stack_amt = 10 + }, +/obj/machinery/mineral/stacking_unit_console{ + pixel_x = 32 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"gsl" = ( +/obj/item/stack/ore/slag, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"gsz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"gsA" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"gsI" = ( +/obj/machinery/requests_console/directional/south{ + anon_tips_receiver = 1; + assistance_requestable = 1; + department = "Bridge"; + name = "Bridge Requests Console"; + can_send_announcements = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"gtd" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/light_switch/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"gti" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/lockers) +"gtp" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"gtx" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"gtA" = ( +/obj/effect/turf_decal/tile/green, +/obj/machinery/button/door/directional/north{ + id = "hydro_back_shutters"; + name = "Hydroponics Backroom Shutters Control"; + req_access = list("hydroponics") + }, +/obj/structure/table, +/obj/item/fish_feed{ + pixel_y = 3 + }, +/obj/item/fishing_hook, +/obj/item/fishing_line, +/obj/item/fishing_rod, +/obj/item/aquarium_kit, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/service/hydroponics) +"gtL" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/landmark/start/chief_engineer, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"gtN" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"gtO" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"gtP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"gtT" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"gtV" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/engine, +/area/station/science/explab) +"gtY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat_interior) +"guA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/iron/white, +/area/station/medical/office) +"guB" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/airlock/research/glass{ + name = "Ordnance Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/iron/textured, +/area/station/science/ordnance) +"guH" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"guX" = ( +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law, +/obj/item/book/manual/wiki/security_space_law{ + pixel_y = 5 + }, +/obj/item/pen/red, +/obj/machinery/button/door/directional/east{ + id = "law_office_shutters"; + name = "Law Office Shutters Control"; + req_access = list("lawyer") + }, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"gvb" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/carpet, +/area/station/service/library) +"gvd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"gvo" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/item/radio/intercom/directional/south, +/obj/machinery/computer/security{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"gvD" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/blackbox_recorder, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"gvF" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/computer/records/security{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"gvK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"gvO" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/vending/coffee, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"gwa" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/medical/paramedic) +"gwz" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"gwG" = ( +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/camera/autoname/directional/north, +/obj/structure/sink/directional/south, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/hydroponics) +"gwS" = ( +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"gwW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/plaque/static_plaque/atmos{ + pixel_y = -32 + }, +/obj/structure/closet/secure_closet/atmospherics, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"gwY" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/machinery/camera/directional/west{ + c_tag = "Engineering - Atmospherics, Gas Control Lower"; + name = "engineering camera" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"gxh" = ( +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"gxn" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"gxw" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/firealarm/directional/south, +/obj/structure/chair{ + dir = 4 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"gxx" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"gxH" = ( +/turf/closed/wall, +/area/station/science/breakroom) +"gxN" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/rack, +/obj/item/clothing/suit/armor/bulletproof{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/clothing/suit/armor/bulletproof{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/clothing/head/helmet/alt{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/head/helmet/alt, +/obj/item/clothing/head/helmet/alt{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"gxP" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/cafeteria, +/area/station/maintenance/starboard/aft) +"gxT" = ( +/obj/machinery/atmospherics/miner/nitrogen, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos) +"gxY" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"gyo" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) +"gyp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/warning, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"gyt" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/leavy/style_random, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/grass, +/area/station/command/bridge) +"gyv" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"gyw" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"gyK" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"gyN" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/north{ + name = "Genetics Desk"; + req_access = list("genetics") + }, +/obj/machinery/door/window/left/directional/south{ + name = "Genetics Desk" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "genetics_shutters"; + name = "Genetics Shutters"; + dir = 1 + }, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"gzt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"gzy" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"gzz" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/glass, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/item/ai_module/reset, +/obj/item/ai_module/reset/purge{ + pixel_y = 4; + pixel_x = -5 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"gzC" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/structure/sign/poster/official/no_erp/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/dorms) +"gzD" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/machinery/light/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/components/binary/pump/on/scrubbers/visible/layer2{ + dir = 4; + name = "External Ports to Filter" + }, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/engineering/break_room) +"gzP" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"gzQ" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/storage) +"gzR" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"gzT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/wood, +/area/station/medical/psychology) +"gzX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"gzZ" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/storage) +"gAb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/port) +"gAf" = ( +/obj/effect/decal/cleanable/blood/footprints, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/maintenance/department/medical) +"gAj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"gAk" = ( +/obj/structure/particle_accelerator/fuel_chamber, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"gAu" = ( +/obj/machinery/power/turbine/inlet_compressor{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"gAx" = ( +/obj/machinery/airalarm/directional/east, +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/iron/white/textured, +/area/station/science/auxlab) +"gAC" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"gAH" = ( +/obj/effect/spawner/random/trash/moisture_trap, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"gAI" = ( +/obj/structure/chair/comfy/beige{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"gAJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"gAM" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine/atmos) +"gAW" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"gAX" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood, +/area/station/commons/locker) +"gBc" = ( +/obj/machinery/door/airlock/grunge{ + id_tag = "toilet_2"; + name = "Stall 2" + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"gBr" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"gBF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/sign/warning/no_smoking/directional/north, +/turf/open/floor/iron/textured, +/area/station/engineering/main) +"gBL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"gBR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"gBW" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"gCi" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + name = "Ordnance Launch Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/iron/white/textured, +/area/station/science/ordnance/testlab) +"gCs" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/security/prison/workout) +"gCA" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/commons/storage/primary) +"gCF" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/computer/teleporter{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"gCP" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"gCR" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/commons/fitness/recreation) +"gCT" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/medical) +"gDn" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/structure/closet/crate/freezer, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood/o_plus{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/reagent_containers/blood/o_minus, +/obj/item/reagent_containers/blood/b_plus, +/obj/item/reagent_containers/blood/b_minus, +/obj/item/reagent_containers/blood/a_plus, +/obj/item/reagent_containers/blood/a_minus, +/obj/item/reagent_containers/blood/lizard, +/obj/item/reagent_containers/blood/ethereal, +/obj/item/reagent_containers/blood{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/reagent_containers/blood{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/reagent_containers/blood{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"gDq" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/plating, +/area/station/engineering/main) +"gDV" = ( +/obj/machinery/newscaster/directional/west, +/obj/machinery/vending/wardrobe/jani_wardrobe, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/service/janitor) +"gEh" = ( +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/machinery/plumbing/pill_press, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry) +"gEi" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/item/radio/intercom/directional/west, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/storage) +"gEs" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"gEt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"gEw" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/sign/warning/secure_area/directional/west, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"gEQ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Escape Pod Four" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/storage) +"gEY" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics) +"gFi" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"gFm" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output{ + dir = 8 + }, +/turf/open/floor/engine/air, +/area/station/engineering/atmos) +"gFs" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port) +"gFJ" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"gGh" = ( +/turf/closed/wall/r_wall, +/area/station/science/server) +"gGi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"gGu" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"gGx" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/rack, +/obj/item/gun/energy/laser{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"gGG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat_interior) +"gGI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/newscaster/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"gGL" = ( +/obj/structure/table/glass, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"gGX" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"gGY" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) +"gHc" = ( +/obj/machinery/newscaster/directional/west, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/food_or_drink/snack, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"gHr" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"gHs" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"gHv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"gHw" = ( +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/hydroponics) +"gHE" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "bridge_blast_doors"; + name = "Bridge Access Blast Door" + }, +/turf/open/floor/iron/dark/textured, +/area/station/command/bridge) +"gHO" = ( +/obj/machinery/shower/directional/north, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"gHQ" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"gHS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"gIe" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/structure/table, +/obj/item/book/manual/wiki/cooking_to_serve_man{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/book/manual/chef_recipes, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"gIg" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/grass, +/area/station/command/bridge) +"gIn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/biogenerator, +/obj/machinery/door/window/left/directional/east{ + name = "Kitchen Biogenerator"; + req_access = list("kitchen") + }, +/obj/machinery/door/window/right/directional/west{ + name = "Kitchen Biogenerator"; + req_access = list("hydroponics") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "hydro_kitchen_shutters"; + name = "Hydro-Kitchen Shutters"; + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/hydroponics) +"gIv" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/checkpoint/engineering) +"gIy" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/item/radio/intercom/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"gIA" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/sign/warning/vacuum/external/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"gIG" = ( +/turf/open/floor/carpet, +/area/station/service/chapel) +"gIR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"gIY" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) +"gJb" = ( +/obj/machinery/airalarm/directional/east, +/obj/structure/chair/pew/right{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"gJd" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/sink/directional/west, +/obj/structure/mirror/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"gJi" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"gJq" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Engineering Lobby"; + name = "Engineering Lobby Fax Machine" + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/engineering/break_room) +"gJI" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"gJJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Dorm 2" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/maintenance/starboard/aft) +"gJK" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"gJM" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/prison/mess) +"gJO" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"gJU" = ( +/obj/effect/turf_decal/delivery/red, +/obj/machinery/status_display/evac/directional/west, +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/iron/textured, +/area/station/ai_monitored/command/storage/eva) +"gJY" = ( +/turf/closed/wall, +/area/station/cargo/storage) +"gKd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"gKi" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"gKj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"gKk" = ( +/obj/structure/sign/warning/cold_temp/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"gKq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"gKA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/security/execution) +"gKN" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engi_lobby_shutters"; + name = "Engineering Lobby Shutters"; + dir = 4 + }, +/obj/machinery/door/poddoor/preopen{ + id = "engineering"; + name = "Engineering Blast Door" + }, +/turf/open/floor/plating, +/area/station/engineering/break_room) +"gKP" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"gKT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/science/research) +"gLh" = ( +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"gLp" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/plaque{ + icon_state = "L7" + }, +/obj/effect/landmark/observer_start, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"gLs" = ( +/obj/structure/table, +/obj/item/stack/cable_coil{ + amount = 5 + }, +/obj/item/flashlight, +/turf/open/floor/iron, +/area/station/construction) +"gLv" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/commons/storage/primary) +"gLw" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Commons - Holodeck Control" + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) +"gLB" = ( +/obj/machinery/corral_corner{ + mapping_id = "4" + }, +/obj/machinery/light/neon_lining{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"gLF" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/east, +/obj/structure/chair/sofa/middle/maroon{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood, +/area/station/commons/locker) +"gLH" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"gLM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"gLN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side, +/area/station/commons/dorms) +"gLS" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/holding_cell) +"gLW" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp{ + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/office) +"gLY" = ( +/obj/machinery/smartfridge, +/turf/closed/wall, +/area/station/service/hydroponics) +"gMb" = ( +/obj/docking_port/stationary/escape_pod{ + dir = 2 + }, +/turf/open/space/basic, +/area/space) +"gMm" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/button/door/directional/west{ + id = "inner_brig"; + name = "Brig Interior Doors Control"; + normaldoorcontrol = 1; + pixel_y = 8; + req_access = list("security") + }, +/obj/machinery/button/door/directional/west{ + id = "outer_brig"; + name = "Brig Exterior Doors Control"; + normaldoorcontrol = 1; + pixel_y = -8; + req_access = list("security") + }, +/obj/machinery/button/door/directional/west{ + id = "brig_post"; + name = "Brig Post Shutters Control"; + pixel_y = 8; + pixel_x = -36; + req_access = list("security") + }, +/obj/machinery/button/door/directional/west{ + id = "cell_pub_shutters"; + name = "Cell Shutters Control"; + pixel_y = -8; + req_access = list("security"); + pixel_x = -36 + }, +/obj/machinery/button/flasher{ + id = "brig_entry_flash"; + pixel_x = -24; + req_access = list("security") + }, +/obj/machinery/computer/warrant{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"gMs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"gMW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"gNh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"gNk" = ( +/obj/structure/table, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil{ + pixel_y = 7; + pixel_x = 3 + }, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) +"gNn" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"gNB" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"gNM" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"gNS" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Security - Prison Workshop"; + network = list("ss13","prison") + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/work) +"gNX" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/assembly/prox_sensor{ + pixel_x = -13; + pixel_y = -1 + }, +/obj/item/assembly/signaler{ + pixel_x = -3; + pixel_y = 4 + }, +/obj/item/assembly/signaler{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/assembly/signaler, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"gOh" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/sign/poster/official/nanotrasen_logo/directional/north, +/obj/structure/chair, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"gOn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"gOs" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"gOv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "xenobiomain"; + name = "Containment Blast Door" + }, +/turf/open/floor/iron/white/textured, +/area/station/science/xenobiology) +"gOz" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"gOA" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"gOE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"gOK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"gOR" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/effect/landmark/start/hangover, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"gOS" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/status_display/evac/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/glass, +/obj/item/wrench/medical, +/obj/item/wrench/medical{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 8 + }, +/obj/item/storage/toolbox/electrical, +/obj/machinery/door/window/right/directional/east{ + name = "Miscellaneous Medical Supplies"; + req_access = list("medical") + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"gPa" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/obj/structure/sign/directions/medical/directional/south{ + pixel_y = -23; + dir = 4 + }, +/obj/structure/sign/directions/evac/directional/south{ + dir = 4 + }, +/obj/structure/sign/directions/engineering/directional/south{ + pixel_y = -41 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"gPd" = ( +/obj/structure/cable, +/turf/closed/wall/r_wall, +/area/station/security/holding_cell) +"gPu" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/office) +"gPM" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"gPS" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"gPV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/telecomms/receiver/preset_right, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"gQi" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/duct, +/turf/open/floor/wood/parquet, +/area/station/security/prison/safe) +"gQr" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/item/radio/intercom/directional/west, +/obj/structure/chair, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/cargo/lobby) +"gQA" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/holding_cell) +"gQB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"gQK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat_interior) +"gQO" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"gQT" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"gQX" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron/white, +/area/station/science/research) +"gRa" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/closet/crate/coffin, +/obj/effect/decal/cleanable/dirt, +/obj/structure/noticeboard/directional/east, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/fore) +"gRc" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/end{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark/telecomms, +/area/station/science/server) +"gRf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"gRk" = ( +/obj/structure/table/wood, +/obj/item/phone{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/mug/britcup{ + pixel_x = 8; + pixel_y = 8 + }, +/turf/open/floor/carpet/red, +/area/station/commons/vacant_room/office) +"gRo" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"gRr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/structure/cable/layer1, +/turf/open/floor/iron/large, +/area/station/engineering/storage) +"gRv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/aft) +"gRE" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/aft) +"gRM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/chair/wood, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"gRZ" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/leafy, +/turf/open/floor/grass, +/area/station/command/bridge) +"gSl" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"gSm" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/item/storage/secure/safe/directional/north, +/obj/machinery/disease2/diseaseanalyser, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"gSn" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning, +/turf/open/floor/iron/white, +/area/station/science/research) +"gSr" = ( +/obj/machinery/light_switch/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/construction) +"gSs" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"gSu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/security/glass{ + name = "Cell 7" + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/safe) +"gSz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/library/printer) +"gSA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"gSE" = ( +/turf/open/floor/carpet/purple, +/area/station/command/heads_quarters/rd) +"gSG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"gSL" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/chair, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"gSY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"gTl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"gTn" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/office) +"gTp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) +"gTH" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/storage) +"gTL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/duct, +/obj/machinery/light/neon_lining{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) +"gUf" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/chair, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/storage) +"gUl" = ( +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/workout) +"gUp" = ( +/obj/machinery/firealarm/directional/west, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/library/printer) +"gUS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/machinery/disposal/delivery_chute{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/door/window/left/directional/east{ + name = "Delivery Chute" + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"gVf" = ( +/obj/machinery/newscaster/directional/east, +/turf/open/floor/eighties/red, +/area/station/service/theater) +"gVo" = ( +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"gVB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"gVK" = ( +/obj/machinery/conveyor{ + id = "QMLoad" + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/station/cargo/storage) +"gVQ" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/structure/sign/warning/secure_area/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"gVV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/janitor, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/janitor) +"gWi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"gWk" = ( +/obj/structure/safe, +/obj/item/ammo_box/a357, +/obj/item/gun/ballistic/revolver/mateba{ + layer = 2.9 + }, +/obj/item/storage/backpack/duffelbag/syndie/hitman{ + layer = 2 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white/left, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"gWE" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/obj/item/pickaxe, +/obj/item/mining_scanner, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"gWG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/medical/storage) +"gWI" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Arrivals - Docking Bay 3"; + name = "arrivals camera" + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/entry) +"gWL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"gXk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"gXm" = ( +/obj/structure/table, +/obj/machinery/camera/autoname/directional/south, +/obj/item/toy/katana, +/obj/item/gun/ballistic/shotgun/toy/crossbow, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness/recreation) +"gXK" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"gXL" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/storage/box/zipties, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"gXO" = ( +/obj/effect/turf_decal/trimline/red/filled/corner, +/obj/effect/turf_decal/trimline/red/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"gXW" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"gXZ" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"gYl" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"gYt" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible{ + dir = 8 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"gYF" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white/left, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"gYH" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"gYL" = ( +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"gYS" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"gYW" = ( +/turf/open/floor/iron, +/area/station/service/janitor) +"gZb" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/structure/sign/departments/security/directional/north, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"gZc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/silver/glass{ + name = "Chapel Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, +/turf/open/floor/iron/dark/textured, +/area/station/service/chapel/office) +"gZw" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"gZC" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"gZH" = ( +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) +"gZP" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/machinery/firealarm/directional/west, +/obj/structure/table/glass, +/obj/item/hatchet, +/obj/item/cultivator, +/obj/item/crowbar/red, +/obj/item/plant_analyzer, +/obj/item/reagent_containers/cup/watering_can, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/service/hydroponics/garden) +"gZV" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/iron/dark, +/area/station/science/server) +"gZZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"hao" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/table/wood, +/turf/open/floor/carpet/purple, +/area/station/commons/dorms) +"haq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"hat" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"haD" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/line, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"haH" = ( +/obj/machinery/computer/security/hos, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"haO" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/plaque{ + icon_state = "L1" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"hbb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"hbj" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/flora/bush/leafy, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/grass/jungle/b/style_random, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_lockdown"; + name = "Medbay Emergency Lockdown Shutters"; + dir = 8 + }, +/turf/open/floor/grass, +/area/station/medical/medbay/central) +"hbt" = ( +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"hbW" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"hbX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness/recreation) +"hcq" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/structure/mirror/directional/north, +/obj/structure/sink/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"hct" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "Departure Lounge Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/exit/departure_lounge) +"hcu" = ( +/obj/machinery/smartfridge/extract/preloaded, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"hcx" = ( +/obj/structure/foamedmetal, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"hcB" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"hcJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"hcK" = ( +/obj/structure/sink/kitchen/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"hda" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) +"hdi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/office, +/obj/effect/landmark/start/depsec/engineering, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"hdj" = ( +/turf/closed/wall, +/area/station/hallway/secondary/service) +"hdl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/station/maintenance/starboard/aft) +"hdC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Fitness" + }, +/obj/effect/landmark/navigate_destination/common/fitness, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms/laundry) +"hdQ" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/holopad, +/obj/structure/cable, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"hdS" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/sorting) +"hee" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/window/reinforced/tinted, +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"hei" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/grass, +/area/station/command/bridge) +"hen" = ( +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"hey" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/status_display/ai/directional/south, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/portable_atmospherics/scrubber/huge, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"heD" = ( +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"heI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Hydroponics" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/turf/open/floor/iron/dark/textured, +/area/station/service/hydroponics) +"hfb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"hff" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "cmo_shutters"; + name = "CMO Office Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/cmo) +"hfh" = ( +/obj/structure/mirror/directional/north, +/obj/structure/sink/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/built/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"hfF" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/glass, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/door/window{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Core Modules"; + req_access = list("captain") + }, +/obj/item/ai_module/core/full/crewsimov{ + pixel_y = 7; + pixel_x = 1 + }, +/obj/item/ai_module/core/full/crewsimovpp, +/obj/effect/spawner/round_default_module, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"hfI" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Atmospherics Storage Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"hfZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"hgf" = ( +/obj/machinery/status_display/ai/directional/south, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"hgg" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"hgi" = ( +/obj/effect/spawner/random/trash/box, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"hgw" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/table/glass, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/upgraded, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"hhj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"hho" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/security/office) +"hhs" = ( +/turf/open/floor/iron/white, +/area/station/science/auxlab) +"hhG" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"hhK" = ( +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/commons/locker) +"hih" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"hil" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"hin" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/brigdoor/security/cell{ + id = "Cell 2"; + name = "Cell 2" + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"hio" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"hjc" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"hjd" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"hje" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/chair/stool/directional/north, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"hjx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/secondary/service) +"hjB" = ( +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"hjG" = ( +/turf/closed/wall, +/area/station/security/detectives_office) +"hjI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"hjP" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/structure/table, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil{ + pixel_y = 7; + pixel_x = 3 + }, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock{ + pixel_x = -7; + pixel_y = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"hjU" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/vehicle/ridden/wheelchair{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"hjZ" = ( +/turf/open/floor/iron, +/area/station/security/prison/workout) +"hkf" = ( +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/tcommsat/computer) +"hkg" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"hkj" = ( +/obj/machinery/space_heater/improvised_chem_heater, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"hkl" = ( +/obj/effect/spawner/random/engineering/material_cheap, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"hkm" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"hkn" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"hkz" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/carpet/red, +/area/station/security/courtroom) +"hkO" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/effect/landmark/start/hangover, +/turf/open/floor/carpet/blue, +/area/station/commons/dorms) +"hkQ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/structure/chair, +/obj/machinery/firealarm/directional/east, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"hkR" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/space_heater, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"hkS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"hll" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Tertiary AI Core"; + req_access = list("ai_upload") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "tertiary_ai_core_shutters"; + name = "Tertiary AI Core Shutters" + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"hln" = ( +/obj/structure/sink/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"hlp" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 6 + }, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/main) +"hlu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"hlw" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/virology{ + autoclose = 0; + frequency = 1449; + id_tag = "pathology_airlock_interior"; + name = "Pathology Interior Airlock" + }, +/obj/machinery/door_buttons/access_button{ + idDoor = "pathology_airlock_interior"; + idSelf = "pathology_airlock_control"; + name = "Pathology Access Button"; + pixel_y = 6; + req_access = list("pathology"); + pixel_x = -24 + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/medical/virology) +"hlD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/warning, +/turf/open/floor/iron/dark/side, +/area/station/cargo/lobby) +"hlK" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/mechanical{ + desc = "Danger. Very robust. Did someone change this?" + }, +/obj/item/crowbar/large{ + desc = "Sic semper tyrannis."; + name = "The One Free Engineer's crowbar" + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"hlL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"hlP" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/auxlab) +"hmq" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/obj/machinery/bci_implanter, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"hnr" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"hnu" = ( +/obj/item/storage/secure/safe/hos{ + pixel_x = 35 + }, +/obj/structure/closet/secure_closet/hos, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"hnB" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"hnH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/obj/structure/cable, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"hnS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"hoa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/dorms) +"hoe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/large, +/area/station/hallway/secondary/service) +"hol" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"hoq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/freezer{ + name = "Coldroom" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/service/kitchen/coldroom) +"hoJ" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/medical/virology) +"hoX" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"hph" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/engineering/engine_smes) +"hpl" = ( +/turf/open/floor/iron/dark/side, +/area/station/commons/dorms) +"hpm" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/modular_computer/preset/id, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"hps" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/brigdoor/security/cell{ + id = "Cell 1"; + name = "Cell 1" + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"hpu" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/security_all, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"hpy" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/warning, +/turf/open/floor/iron/dark, +/area/station/security/office) +"hpB" = ( +/obj/structure/cable, +/obj/structure/chair/stool/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"hpC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"hpL" = ( +/obj/structure/dresser, +/turf/open/floor/wood/large, +/area/station/commons/dorms) +"hpM" = ( +/turf/closed/wall, +/area/station/construction) +"hpU" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"hpW" = ( +/obj/structure/sink/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"hpY" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"hqm" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/light_switch/directional/south{ + pixel_x = 8 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/white, +/area/station/science/explab) +"hqv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/sign/warning/electric_shock/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"hqK" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/obj/structure/closet{ + name = "Evidence Closet" + }, +/turf/open/floor/iron/dark, +/area/station/security/evidence) +"hqM" = ( +/obj/machinery/airalarm/directional/south, +/obj/machinery/plumbing/ooze_compressor, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"hqN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"hqV" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/machinery/disposal/bin, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) +"hqW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"hrk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"hrp" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/telecomms, +/area/station/science/server) +"hrH" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Distro to Waste" + }, +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - Atmospherics Pumping Room"; + name = "engineering camera" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"hrL" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"hrT" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Prison Recreation Room" + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/rec) +"hsc" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/hidden{ + dir = 4 + }, +/obj/structure/closet/firecloset, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"hsf" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"hsg" = ( +/obj/machinery/light/directional/north, +/obj/machinery/airalarm/directional/north, +/obj/machinery/computer/atmos_control/ordnancemix, +/turf/open/floor/iron, +/area/station/science/ordnance) +"hso" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/corner, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"hsp" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 5 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"hsr" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_a) +"hsB" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/lighter{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/effect/spawner/random/entertainment/cigarette_pack{ + pixel_y = 2 + }, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"hsC" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"hsJ" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east{ + broadcasting = 1; + frequency = 1447; + listening = 0; + name = "AI Private Channel" + }, +/obj/machinery/camera/motion/directional/east{ + c_tag = "AI - Upload East"; + network = list("aiupload") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"hsT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/station/service/library) +"hsY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"htc" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/security/brig/entrance) +"hte" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/sign/flag/nanotrasen/directional/east, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"hts" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"htF" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"htX" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/sign/warning/hot_temp/directional/north, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"huo" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"hur" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"hus" = ( +/obj/effect/turf_decal/trimline/purple/line, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"hux" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"huy" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/west{ + name = "Brig Entrance Desk"; + req_access = list("security") + }, +/obj/machinery/door/window/right/directional/east{ + name = "Brig Entrance Desk" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "brig_post"; + name = "Security Shutters"; + dir = 8 + }, +/obj/structure/desk_bell{ + pixel_y = 2; + pixel_x = 6 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"huH" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 6 + }, +/obj/machinery/light/directional/south, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"huJ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable/layer1, +/obj/machinery/door/airlock/external{ + name = "Engineering External Access" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/main) +"hvc" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"hve" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"hvk" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/structure/table, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"hvm" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/glass, +/obj/item/storage/box/beakers, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/dropper, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"hvs" = ( +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/prison/workout) +"hvz" = ( +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/entry) +"hvE" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch{ + name = "Satellite Antechamber" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "ai-passthrough" + }, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/turret_protected/aisat_interior) +"hvU" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/machinery/fax{ + fax_name = "Medical Office"; + name = "Medical Office Fax Machine" + }, +/turf/open/floor/iron/white, +/area/station/medical/office) +"hvW" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"hvX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"hwe" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/warning, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"hwk" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/camera/directional/east{ + c_tag = "Medical - Operating Room"; + network = list("ss13","medbay"); + name = "medical camera" + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/light/small/directional/east, +/obj/structure/table/glass, +/obj/item/storage/backpack/duffelbag/med/surgery, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"hwr" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/obj/machinery/duct, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/execution/transfer) +"hwv" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"hwy" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research/glass{ + name = "Artifact Research" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/iron/white/textured, +/area/station/science/explab) +"hxe" = ( +/obj/structure/closet/emcloset, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"hxi" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/sorting) +"hxt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"hxv" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"hxw" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/newscaster/directional/west, +/obj/machinery/computer/scan_consolenew{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"hxy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/external/glass{ + name = "Supply Door Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/storage) +"hxM" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"hxS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/auxlab) +"hxV" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"hxY" = ( +/turf/closed/wall, +/area/station/maintenance/central) +"hya" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2{ + dir = 6 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"hyd" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"hzc" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/east, +/obj/machinery/space_heater, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"hzo" = ( +/obj/machinery/camera/directional/south{ + c_tag = "AI Sat - External Access"; + name = "exterior camera"; + network = list("minisat"); + start_active = 1 + }, +/turf/open/floor/plating/airless, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"hzA" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"hzK" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad2" + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/storage) +"hAc" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Holodeck - Aft"; + name = "holodeck camera" + }, +/turf/open/floor/engine{ + name = "Holodeck Projector Floor" + }, +/area/station/holodeck/rec_center) +"hAe" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"hAo" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, +/obj/machinery/firealarm/directional/east, +/obj/machinery/vending/wardrobe/science_wardrobe, +/turf/open/floor/iron/checker, +/area/station/science/lab) +"hAE" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/sign/warning/vacuum/external/directional/south, +/obj/machinery/computer/security/mining{ + dir = 4 + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/miningoffice) +"hBe" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"hBg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"hBi" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"hBp" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"hBx" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/office) +"hBG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/blobstart, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"hBK" = ( +/obj/effect/turf_decal/stripes/box, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/computer/mech_bay_power_console{ + dir = 4 + }, +/turf/open/floor/iron/large, +/area/station/science/robotics/mechbay) +"hBR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"hCe" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance{ + name = "Service Hall Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/general, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port) +"hCj" = ( +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/commons/locker) +"hCz" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/components/tank/air, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"hCH" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics/garden) +"hCN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/iron/textured, +/area/station/maintenance/starboard/aft) +"hCP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"hDl" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/captain/private) +"hDp" = ( +/turf/closed/wall/r_wall, +/area/station/security/brig) +"hDs" = ( +/obj/structure/table/reinforced, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/north{ + name = "Brig Entrance Desk"; + req_access = list("security") + }, +/obj/machinery/door/window/left/directional/south{ + name = "Brig Entrance Desk" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "brig_post"; + name = "Security Shutters"; + dir = 1 + }, +/obj/structure/desk_bell{ + pixel_y = 2; + pixel_x = 6 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"hDE" = ( +/obj/structure/tank_dispenser, +/turf/open/floor/iron/white, +/area/station/science/auxlab) +"hDJ" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/green/corner{ + dir = 1 + }, +/obj/structure/sign/departments/evac/directional/east, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"hDN" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 5; + pixel_y = 13 + }, +/obj/item/book/manual/wiki/detective{ + pixel_x = -7; + pixel_y = 5 + }, +/obj/item/reagent_containers/cup/glass/bottle/whiskey{ + pixel_y = 7; + pixel_x = 5 + }, +/obj/item/clothing/mask/cigarette{ + pixel_x = -6 + }, +/obj/item/lighter{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/item/clothing/glasses/hud/security/sunglasses, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"hEi" = ( +/obj/structure/table, +/obj/item/clothing/mask/balaclava{ + pixel_x = -8; + pixel_y = 8 + }, +/obj/item/toy/cards/deck{ + pixel_x = 2 + }, +/turf/open/floor/iron, +/area/station/commons/dorms) +"hEk" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/table/glass, +/obj/item/healthanalyzer, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/regular, +/obj/item/clothing/glasses/regular, +/obj/item/clothing/glasses/regular, +/obj/machinery/door/window/left/directional/east{ + name = "Miscellaneous Medical Supplies"; + req_access = list("medical") + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"hEq" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/delivery, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=2"; + location = "Tool Storage" + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"hEy" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/status_display/ai/directional/north, +/obj/machinery/plumbing/pill_press, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry) +"hEC" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/cell_5k, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"hEL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "Security Departure Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/exit/departure_lounge) +"hEZ" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"hFk" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"hFF" = ( +/obj/structure/table, +/obj/item/pai_card, +/turf/open/floor/iron, +/area/station/commons/dorms) +"hFU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/public/glass{ + name = "Chapel" + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/chapel) +"hFW" = ( +/obj/structure/reagent_dispensers/cooking_oil, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"hGa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"hGd" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"hGj" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/table/wood, +/obj/item/storage/box/evidence, +/obj/item/hand_labeler, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"hGk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible/layer4, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos) +"hGm" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/department/security) +"hGE" = ( +/obj/machinery/air_sensor/nitrogen_tank, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos) +"hGH" = ( +/obj/structure/sign/warning/electric_shock/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/engineering/storage) +"hGS" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"hGZ" = ( +/obj/effect/turf_decal/trimline/red/filled/corner, +/obj/effect/turf_decal/trimline/red/line{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"hHd" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Security Post Desk"; + req_access = list("security") + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"hHs" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"hHw" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/ai_upload) +"hHy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) +"hHz" = ( +/obj/docking_port/stationary{ + dheight = 4; + dwidth = 4; + height = 9; + name = "Aux Base Zone"; + roundstart_template = /datum/map_template/shuttle/aux_base/default; + shuttle_id = "aux_base_zone"; + width = 9; + dir = 2 + }, +/turf/open/floor/plating, +/area/station/construction/mining/aux_base) +"hHH" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/item/food/mint{ + pixel_y = 7; + pixel_x = -7 + }, +/obj/item/reagent_containers/condiment/enzyme, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"hHJ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/west, +/obj/structure/table, +/obj/item/multitool/circuit{ + pixel_x = -8 + }, +/obj/item/multitool/circuit{ + pixel_x = -4 + }, +/obj/item/multitool/circuit, +/obj/item/stock_parts/cell/high{ + pixel_x = 8; + pixel_y = -2 + }, +/obj/item/stock_parts/cell/high{ + pixel_x = 8; + pixel_y = 9 + }, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"hIb" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"hIe" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"hIk" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half, +/obj/effect/turf_decal/bot_white, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_edge, +/area/station/command/gateway) +"hIl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/obj/item/toy/figure/secofficer, +/turf/open/floor/iron/dark, +/area/station/security/office) +"hIE" = ( +/obj/machinery/light/directional/west, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/janitor) +"hIW" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"hJb" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"hJi" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"hJr" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"hJs" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/trimline/dark_blue/line, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"hKf" = ( +/obj/machinery/shieldgen, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"hKj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/plating/airless, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"hKq" = ( +/obj/structure/flora/grass/jungle/b, +/mob/living/basic/butterfly, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/station/command/bridge) +"hKs" = ( +/obj/machinery/camera/directional/west{ + c_tag = "AI Sat - External, Southeast"; + network = list("minisat"); + start_active = 1 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"hKz" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) +"hKA" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/landmark/start/librarian, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"hKC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"hKM" = ( +/obj/machinery/door/airlock/external{ + name = "Labor Camp Shuttle Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/security/processing) +"hKX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"hLe" = ( +/obj/structure/rack, +/obj/item/mop, +/obj/item/reagent_containers/cup/bottle/ammonia, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/clothing/mask/breath, +/turf/open/floor/plating, +/area/station/security/prison) +"hLt" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/computer/rdservercontrol, +/turf/open/floor/iron/dark, +/area/station/science/server) +"hLv" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Central Hallway, West - HoP Line"; + name = "hallway camera" + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/delivery/white, +/obj/machinery/light/small/directional/north, +/obj/machinery/ticket_machine/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"hLB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port) +"hLH" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/structure/closet/secure_closet/brig{ + id = "Cell 2"; + name = "Cell 2 Locker" + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"hLV" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/atm, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"hLW" = ( +/obj/machinery/computer/pod/old/mass_driver_controller/chapelgun{ + pixel_x = 24 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Service - Chapel Funeral Parlor"; + name = "service camera" + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"hLX" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"hMn" = ( +/obj/machinery/light/directional/west, +/obj/structure/chair/stool/directional/north, +/turf/open/floor/wood/large, +/area/station/commons/dorms) +"hMw" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"hMy" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/item/paper/pamphlet/gateway, +/obj/item/paper/pamphlet/gateway{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/structure/rack, +/turf/open/floor/iron, +/area/station/command/gateway) +"hMB" = ( +/obj/machinery/requests_console/directional/west{ + department = "Chapel"; + name = "Chapel Requests Console"; + assistance_requestable = 1 + }, +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/obj/effect/landmark/start/chaplain, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"hMD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"hMJ" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"hMW" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"hNi" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/computer/department_orders/science{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"hNo" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/footprints, +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"hNp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) +"hNt" = ( +/obj/machinery/light/directional/north, +/obj/machinery/status_display/evac/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"hNB" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"hNJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"hNM" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/plaque{ + icon_state = "L5" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"hNN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) +"hNQ" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/obj/structure/sign/poster/official/obey/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"hNX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"hOc" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"hOh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/large, +/area/station/command/gateway) +"hOn" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/newscaster/directional/north, +/obj/structure/closet/secure_closet/chemical, +/obj/item/wrench/medical, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"hOt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) +"hOx" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/item/radio/intercom/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"hOU" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"hPf" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"hPx" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/window{ + id = "station_away_gate"; + name = "Gateway Access Shutters" + }, +/turf/open/floor/iron/dark/textured, +/area/station/command/gateway) +"hPA" = ( +/obj/structure/table, +/obj/item/clothing/gloves/cargo_gauntlet{ + pixel_y = -3 + }, +/obj/item/clothing/gloves/cargo_gauntlet, +/obj/item/clothing/gloves/cargo_gauntlet{ + pixel_y = 3 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"hPB" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/table, +/obj/item/radio/off, +/obj/item/crowbar/red, +/obj/item/assembly/flash/handheld, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"hPM" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) +"hPN" = ( +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"hPO" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/table, +/obj/item/experi_scanner{ + pixel_x = -4 + }, +/obj/item/experi_scanner, +/obj/item/experi_scanner{ + pixel_x = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/lab) +"hPT" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"hQe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 8 + }, +/obj/effect/mapping_helpers/mail_sorting/medbay/chemistry, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"hQL" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/yellow/corner{ + dir = 4 + }, +/obj/structure/table, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/treatment, +/obj/item/stock_parts/subspace/treatment, +/obj/item/stock_parts/subspace/treatment, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"hQP" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/entertainment/drugs, +/obj/effect/spawner/random/entertainment/lighter, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"hQZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"hRe" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Science - Xenobiology Secure Cell Interior"; + name = "science camera"; + network = list("ss13","test","rd","xeno") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"hRt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 8 + }, +/obj/machinery/meter, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"hRA" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"hRJ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_x = -7 + }, +/obj/machinery/recharger{ + pixel_x = 7 + }, +/obj/machinery/button/door/directional/east{ + id = "armory_side_access"; + name = "Armory Side Access"; + req_access = list("armory"); + pixel_y = -6 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Security - Armory, East"; + name = "security camera" + }, +/obj/machinery/button/door/directional/east{ + id = "armory_window_shutters"; + name = "Armory Window Shutters Control"; + req_access = list("armory"); + pixel_y = 6; + pixel_x = 38 + }, +/obj/machinery/button/door/directional/east{ + id = "armory_desk"; + name = "Armory Desk Shutters Control"; + req_access = list("armory"); + pixel_y = 6 + }, +/obj/item/toy/figure/warden{ + pixel_y = 14 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"hRV" = ( +/obj/machinery/vending/games, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness/recreation) +"hSc" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/medical/medbay/lobby) +"hSi" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Vault Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/vault, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/port) +"hSr" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"hSy" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/computer/prisoner/management{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"hSz" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics/garden) +"hSP" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"hTf" = ( +/obj/effect/turf_decal/tile/neutral/half, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/smooth_half{ + dir = 4 + }, +/area/station/command/gateway) +"hTn" = ( +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"hTs" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/carpet/blue, +/area/station/commons/dorms) +"hTx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"hTN" = ( +/obj/effect/spawner/random/structure/closet_private, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"hTS" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "cmo_shutters"; + name = "CMO Office Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/cmo) +"hTV" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Arrivals - Bay 1, Lower Hallway"; + name = "arrivals camera" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"hUt" = ( +/obj/structure/chair/stool/directional/south, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness) +"hUA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"hUQ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/bridge) +"hUS" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/machinery/airalarm/directional/south, +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"hUW" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"hVl" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/medical/cryo) +"hVF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"hVK" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"hWv" = ( +/obj/structure/sign/poster/ripped/directional/east, +/obj/structure/bed/pod, +/obj/item/bedsheet/mime, +/obj/effect/landmark/start/mime, +/turf/open/floor/carpet/black, +/area/station/service/theater) +"hWx" = ( +/obj/structure/disposalpipe/junction/yjunction, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"hWF" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"hWV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/port) +"hXf" = ( +/obj/structure/sign/warning/rad_shelter/directional/east, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"hXj" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"hXt" = ( +/turf/open/floor/iron/white, +/area/station/science/genetics) +"hXv" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/upgraded, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/storage) +"hXU" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/south, +/obj/structure/table, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"hYj" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"hYk" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/office) +"hYl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"hYC" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/structure/sign/departments/maint/directional/east, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"hYH" = ( +/obj/structure/sign/warning/biohazard/directional/north, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"hYM" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/computer/cargo/request{ + dir = 4 + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/lobby) +"hYU" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"hYY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/camera/directional/west{ + c_tag = "AI Sat - Maintenance"; + name = "satellite camera"; + network = list("minisat") + }, +/turf/open/floor/engine, +/area/station/ai_monitored/command/storage/satellite) +"hYZ" = ( +/turf/closed/wall, +/area/station/commons/dorms/laundry) +"hZj" = ( +/obj/machinery/door/window/left/directional/north{ + name = "Labor Camp Observation"; + req_access = list("security") + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"hZp" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/commons/locker) +"hZS" = ( +/obj/effect/turf_decal/delivery/red, +/obj/structure/cable, +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/iron/textured, +/area/station/ai_monitored/command/storage/eva) +"iac" = ( +/obj/structure/table, +/obj/structure/frame/machine, +/obj/item/stack/cable_coil/five, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"iap" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"iay" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/obj/machinery/duct, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"iaB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"iaE" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/directional/east, +/obj/structure/closet/firecloset, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"iaL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/structure/closet/l3closet/scientist, +/obj/item/extinguisher, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) +"iaT" = ( +/turf/closed/wall, +/area/station/science/robotics/mechbay) +"ibc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"ibw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"ibD" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"icr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mob_spawn/corpse/human/damaged, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"icu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"icv" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/power/port_gen/pacman/pre_loaded, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/large, +/area/station/engineering/gravity_generator) +"icx" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/auxlab) +"icE" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/station/solars/starboard/fore) +"icT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table, +/obj/item/airlock_painter/decal/tile{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/item/airlock_painter{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/item/airlock_painter/decal{ + pixel_x = 5; + pixel_y = -1 + }, +/obj/item/toner/extreme, +/obj/item/toner/extreme, +/obj/item/toner/extreme, +/obj/item/toner/large, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) +"icZ" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"idF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/light_switch/directional/east, +/obj/machinery/netpod, +/turf/open/floor/iron/dark/smooth_large, +/area/station/bitrunning/den) +"idJ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) +"idR" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"iea" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"iej" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain) +"ieE" = ( +/obj/structure/cable, +/obj/machinery/power/solar{ + id = "foreport"; + name = "Fore-Port Solar Array" + }, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/port/fore) +"ieK" = ( +/obj/docking_port/stationary/escape_pod, +/turf/open/space/basic, +/area/space) +"ieL" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/machinery/defibrillator_mount/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"ieP" = ( +/obj/effect/turf_decal/trimline/green/filled/warning, +/obj/effect/turf_decal/trimline/green/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"ifb" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/structure/chair/sofa/corp{ + color = "#7fb3d5"; + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ifC" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ifE" = ( +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/components/trinary/mixer/flipped, +/turf/open/floor/iron, +/area/station/science/ordnance) +"ifN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"ifT" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"igl" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/line, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"igm" = ( +/turf/closed/wall, +/area/station/engineering/storage) +"igL" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"ihc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/requests_console/directional/west{ + department = "Theatre"; + name = "Theater Requests Console" + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/theater) +"ihg" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/structure/closet/emcloset, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ihh" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/main) +"iho" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/wood/large, +/area/station/commons/dorms) +"ihC" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"ihJ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"ihP" = ( +/obj/structure/sign/warning/rad_shelter/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"iiv" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"iix" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/service/hydroponics) +"iiC" = ( +/obj/machinery/cryopod/prison{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"iiE" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"iiQ" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/iron/white, +/area/station/security/medical) +"ija" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering/glass{ + name = "Server Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/tcommsat/computer) +"ijg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"ijj" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"ijl" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/east{ + name = "Apothecary Desk"; + req_access = list("pharmacy") + }, +/obj/machinery/door/window/right/directional/west{ + name = "Apothecary Desk" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "apothecary_shutters"; + name = "Apothecary Shutters"; + dir = 8 + }, +/obj/structure/desk_bell{ + pixel_x = -6 + }, +/turf/open/floor/iron, +/area/station/medical/pharmacy) +"ijn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Construction Area Maintenance" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"ijp" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"ijG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"ijI" = ( +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"ijM" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/white, +/area/station/science/research) +"ijP" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"ijZ" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"ika" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/computer/apc_control{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"iki" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/closet/toolcloset, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/storage_shared) +"ikm" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/science/auxlab) +"iko" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/machinery/shower/directional/west, +/turf/open/floor/iron/white/textured, +/area/station/medical/medbay/central) +"ikp" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 10 + }, +/turf/open/space, +/area/space/nearstation) +"ikq" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = 8 + }, +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/folder/yellow, +/obj/item/pen/red, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/office) +"ikD" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"ikU" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/griddle, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"ikX" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ila" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Post - Science" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron/dark/textured, +/area/station/security/checkpoint/science) +"ilg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"iln" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"ilE" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"ilH" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/duct, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/breakroom) +"ilM" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"ilT" = ( +/obj/structure/table, +/obj/item/clothing/mask/translator{ + pixel_y = 10 + }, +/obj/item/clothing/mask/translator{ + pixel_y = 5 + }, +/obj/item/clothing/mask/translator, +/turf/open/floor/iron/dark, +/area/station/security/office) +"ilX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"imb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness) +"img" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) +"imn" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/requests_console/directional/east{ + assistance_requestable = 1; + department = "Engineering"; + name = "Engineering Requests Console"; + supplies_requestable = 1 + }, +/obj/structure/table, +/obj/machinery/light/small/directional/east, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/construction/plumbing/engineering, +/obj/item/plunger, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/engineering/storage_shared) +"imo" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"imr" = ( +/obj/machinery/airalarm/directional/south, +/obj/machinery/light/directional/south, +/mob/living/carbon/human/species/monkey, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"imt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"imx" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"imG" = ( +/obj/machinery/light/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"imH" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/cable, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = -8 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"imJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/explab) +"imU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/research) +"imV" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"ina" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/telecomms/bus/preset_four, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"inn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) +"ins" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"inB" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"inF" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"inK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness) +"inT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"ioi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"iol" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/aft) +"iom" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 6 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"ioq" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"ior" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/break_room) +"ioJ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/table, +/obj/item/stock_parts/cell/high, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"ioZ" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/spawner/random/vending/snackvend, +/obj/structure/sign/directions/cryo/directional/north{ + pixel_y = 23 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"ipb" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/prison/garden) +"ipd" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/light/small/directional/west, +/obj/machinery/camera/directional/west{ + c_tag = "AI - Upload Access" + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/recharge_station, +/obj/effect/landmark/start/cyborg, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"ipj" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 5 + }, +/obj/machinery/igniter/incinerator_atmos, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"ipp" = ( +/turf/open/floor/wood, +/area/station/maintenance/starboard/aft) +"ipt" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"ipC" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/hallway/secondary/service) +"ipF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"ipH" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/filingcabinet, +/obj/machinery/requests_console/directional/east{ + department = "Law Office"; + name = "Law Office Requests Console" + }, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"ipL" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/newscaster/directional/south, +/obj/machinery/modular_computer/preset/cargochat/service{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/hallway/secondary/service) +"ipY" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"iqb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"iqi" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"iqm" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/structure/table/glass, +/obj/item/roller{ + pixel_y = 6 + }, +/obj/item/roller{ + pixel_y = 11 + }, +/obj/item/roller{ + pixel_y = 13 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/medical/paramedic) +"iqq" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/landmark/start/warden, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"iqD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Arrivals" + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/port) +"iqM" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"iqP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"iqQ" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"iqR" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/table/glass, +/obj/item/book/manual/wiki/infections{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/book/manual/wiki/surgery{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/item/book/manual/wiki/medicine{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/book/manual/wiki/chemistry{ + pixel_x = 5 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"iqS" = ( +/obj/structure/closet/crate, +/obj/item/clothing/under/color/lightpurple, +/obj/effect/spawner/random/entertainment/money, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"irc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"irm" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"irn" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/storage/tech) +"irt" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Mining - Aux Base Construction"; + name = "mining camera" + }, +/obj/machinery/button/door/directional/north{ + id = "aux_base_shutters"; + name = "Public Shutters Control"; + req_access = list("aux_base") + }, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"irR" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/nanite_program_hub, +/turf/open/floor/iron/white, +/area/station/science/research) +"isa" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"isc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/office) +"isM" = ( +/obj/machinery/status_display/evac/directional/south, +/obj/structure/easel, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_twentythree, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness/recreation) +"isR" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/mob/living/basic/chicken, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"ita" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"itm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Head of Personnel's Office"; + name = "Head of Personnel's Fax Machine" + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"itv" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"itA" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) +"itB" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"itE" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/computer/rdconsole{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/lab) +"itK" = ( +/obj/machinery/light/built/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"itL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"itM" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Telecomms Monitoring"; + network = list("tcomms") + }, +/obj/structure/tank_holder/oxygen, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/tcommsat/computer) +"itN" = ( +/obj/machinery/light_switch/directional/south{ + pixel_x = -8 + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/commons/dorms) +"itU" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"itV" = ( +/obj/effect/turf_decal/bot_white/right, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"itW" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 10 + }, +/turf/open/space/basic, +/area/space/nearstation) +"iua" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"iue" = ( +/obj/machinery/status_display/supply{ + pixel_x = -32 + }, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -6; + pixel_y = 7 + }, +/obj/item/stamp/qm{ + pixel_x = 8; + pixel_y = 12 + }, +/obj/item/stamp{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/stamp/denied{ + pixel_x = 8 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"ium" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "cell_pub_shutters"; + name = "Security Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/security/brig) +"iuo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "External Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"iuu" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"iuF" = ( +/obj/machinery/light/directional/south, +/obj/machinery/chem_master, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"iuG" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/deepfryer, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"iuI" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/rack, +/obj/item/gun/energy/disabler{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/gun/energy/disabler, +/obj/item/gun/energy/disabler{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"iuJ" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"iuK" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"iuN" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"iuQ" = ( +/obj/machinery/computer/atmos_alert, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) +"iuR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/sign/warning/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/shower/directional/east, +/turf/open/floor/iron/white/textured, +/area/station/medical/virology) +"iuT" = ( +/obj/structure/closet, +/obj/effect/spawner/random/maintenance/two, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"iuU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/telecomms/server/presets/supply, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"ivb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/autolathe, +/obj/machinery/door/window/left/directional/south{ + name = "Public Autolathe"; + req_access = list("cargo") + }, +/obj/machinery/door/window/left/directional/north{ + name = "Public Autolathe" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "cargo_desk"; + name = "Cargo Desk Shutters" + }, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/office) +"ivd" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/structure/sign/directions/command/directional/north{ + pixel_y = 41; + dir = 2 + }, +/obj/structure/sign/directions/supply/directional/north{ + dir = 8 + }, +/obj/structure/sign/directions/vault/directional/north{ + pixel_y = 23; + dir = 8 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Hallway - Central North" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ivi" = ( +/obj/structure/bed/dogbed/renault, +/mob/living/basic/pet/fox/renault, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"ivj" = ( +/obj/effect/turf_decal/stripes/end, +/obj/structure/sign/warning/electric_shock/directional/south, +/obj/structure/cable, +/obj/structure/table, +/obj/item/storage/toolbox/electrical, +/obj/item/assembly/flash/handheld, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"ivl" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/camera/autoname/directional/south, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"ivp" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"ivq" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/vacuum/external/directional/north, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"ivt" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"ivH" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/plaque{ + icon_state = "L3" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ivM" = ( +/obj/structure/closet/crate/solarpanel_small, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/engineering/main) +"ivS" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"iwa" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/computer/station_alert{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"iwf" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"iwk" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"iwn" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"iwr" = ( +/obj/machinery/corral_corner{ + mapping_id = "4" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"iwL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"iwO" = ( +/obj/machinery/corral_corner{ + mapping_id = "4" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "4" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"iwZ" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"ixc" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"ixw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/item/kirbyplants/random, +/turf/open/floor/carpet/green, +/area/station/commons/locker) +"ixC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"ixJ" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/item/storage/secure/safe/directional/west, +/obj/structure/table, +/obj/item/aicard, +/obj/item/circuitboard/aicore, +/obj/item/computer_disk/ordnance, +/turf/open/floor/iron/vaporwave, +/area/station/command/heads_quarters/rd) +"iya" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Storage" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, +/turf/open/floor/iron/textured, +/area/station/engineering/storage) +"iyc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "aisat-pathatmos-maint-passthrough" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine/atmos) +"iye" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"iym" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/structure/sign/warning/no_smoking/directional/south, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"iyt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"iyE" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/yellow/corner, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"iyG" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/virology/glass{ + name = "Isolation A" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/turf/open/floor/iron/white/textured, +/area/station/medical/virology) +"iyI" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"iyL" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/glass, +/obj/item/toy/figure/borg, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"izg" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/north{ + dir = 9 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"izu" = ( +/obj/structure/water_source/puddle, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"izU" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron, +/area/station/engineering/main) +"iAb" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"iAi" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/iron/dark/side, +/area/station/cargo/lobby) +"iAn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Construction Area" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/landmark/navigate_destination/common/construction, +/turf/open/floor/plating, +/area/station/construction) +"iAo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"iAG" = ( +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"iAS" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/office) +"iAU" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"iBl" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/light_switch/directional/south{ + pixel_x = 5 + }, +/obj/machinery/firealarm/directional/south{ + pixel_x = -5 + }, +/obj/structure/table, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"iBo" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/security/prison) +"iBz" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"iBE" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"iBO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"iCo" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"iCv" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/medical_all, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"iCB" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"iCE" = ( +/obj/structure/lattice, +/obj/structure/sign/departments/engineering/directional/north, +/turf/open/space/basic, +/area/space/nearstation) +"iCW" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/green/corner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"iDb" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"iDf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/maintenance/port/fore) +"iDj" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/office) +"iDt" = ( +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"iDA" = ( +/obj/structure/cable/layer1, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"iDE" = ( +/obj/structure/sign/departments/medbay/alt/directional/east, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"iDK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_a) +"iDN" = ( +/obj/machinery/camera/directional/north{ + c_tag = "AI Sat - External, South"; + network = list("minisat"); + start_active = 1 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"iEa" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"iEO" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Hydroponics" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/turf/open/floor/iron/dark/textured, +/area/station/service/hydroponics) +"iEZ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"iFb" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/sign/warning/rad_shelter/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"iFj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"iFo" = ( +/obj/item/kirbyplants/random, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"iFw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"iFy" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/cargo/lobby) +"iFB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/service{ + name = "Kitchen Counter" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/turf/open/floor/iron/dark/textured, +/area/station/service/kitchen) +"iFK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"iFL" = ( +/obj/machinery/requests_console/directional/south{ + department = "Bar"; + name = "Bar Requests Console"; + supplies_requestable = 1 + }, +/obj/structure/table, +/obj/item/book/manual/wiki/barman_recipes{ + pixel_y = 4 + }, +/obj/item/storage/box/drinkingglasses{ + pixel_x = -6 + }, +/obj/item/storage/box/drinkingglasses{ + pixel_x = 6 + }, +/turf/open/floor/wood, +/area/station/service/bar) +"iFN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/science/ordnance) +"iGf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/medical/cryo) +"iGh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"iGj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"iGm" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/item/radio/intercom/directional/west{ + broadcasting = 1; + frequency = 1447; + listening = 0; + name = "AI Private Channel" + }, +/obj/machinery/flasher/directional/west{ + id = "AI"; + pixel_y = -9 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"iGp" = ( +/obj/machinery/newscaster/directional/west, +/obj/structure/table/reinforced, +/obj/machinery/computer/security/telescreen/rd{ + dir = 1 + }, +/turf/open/floor/carpet/purple, +/area/station/command/heads_quarters/rd) +"iGw" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"iGG" = ( +/turf/open/floor/iron, +/area/station/engineering/break_room) +"iGO" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 5 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"iGQ" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/structure/closet{ + name = "Evidence Closet" + }, +/turf/open/floor/iron/dark, +/area/station/security/evidence) +"iHe" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/duct, +/turf/open/floor/wood/large, +/area/station/security/prison/safe) +"iHk" = ( +/obj/item/radio/intercom/directional/south, +/obj/structure/table/wood, +/obj/item/storage/photo_album/library, +/obj/item/taperecorder, +/obj/item/camera, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"iHv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_half{ + dir = 8 + }, +/area/station/bitrunning/den) +"iHC" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"iHO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"iHR" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"iHT" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/light/directional/north, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/recharge_station, +/obj/effect/landmark/start/cyborg, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"iId" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"iIh" = ( +/turf/closed/wall/r_wall, +/area/station/security/checkpoint/supply) +"iIj" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/light/directional/north, +/obj/structure/sign/departments/security/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"iIn" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/structure/table/glass, +/obj/item/healthanalyzer, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/gloves/latex, +/obj/item/storage/box/beakers, +/obj/item/storage/box/syringes{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/box/vials{ + pixel_y = 4; + pixel_x = -2 + }, +/obj/machinery/newscaster/directional/south, +/obj/item/storage/box/monkeycubes/mousecubes, +/obj/item/storage/box/monkeycubes/mousecubes{ + pixel_x = 6; + pixel_y = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"iIr" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/stripes/box, +/obj/machinery/rnd/production/techfab/department/medical, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"iIy" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"iIA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"iIF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/decal/cleanable/oil, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"iII" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/sign/poster/official/no_erp/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"iIZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/machinery/defibrillator_mount/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"iJc" = ( +/obj/effect/spawner/random/engineering/material_cheap, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"iJl" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/rack, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/mask/gas{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/effect/mapping_helpers/apc/cell_5k, +/obj/item/tank/internals/oxygen/yellow{ + pixel_x = 5; + pixel_y = -3 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/break_room) +"iJp" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"iJv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research/glass{ + name = "Robotics Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/machinery/duct, +/turf/open/floor/iron/textured, +/area/station/science/robotics/lab) +"iJC" = ( +/obj/effect/turf_decal/trimline/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/south, +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"iJI" = ( +/obj/machinery/corral_corner{ + mapping_id = "1" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"iJR" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/disease2/centrifuge, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"iJX" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/kitchenspike, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"iKf" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/west, +/obj/machinery/light_switch/directional/west, +/obj/structure/rack, +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/secure/briefcase, +/turf/open/floor/iron/dark, +/area/station/security/detectives_office) +"iKB" = ( +/obj/machinery/gibber, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"iKJ" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/department/engine/atmos) +"iKL" = ( +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"iKO" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/shower) +"iKY" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/clothing/suit/apron/surgical, +/obj/item/clothing/glasses/hud/health, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"iLb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"iLe" = ( +/obj/machinery/light/directional/south, +/obj/structure/sign/poster/official/no_erp/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/commons/dorms) +"iLj" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"iLp" = ( +/obj/machinery/button/door/directional/north{ + id = "dorm_5"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/station/commons/dorms) +"iLr" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Arrivals - Escape Pod Bay 1"; + name = "arrivals camera" + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/entry) +"iLs" = ( +/obj/machinery/airalarm/directional/east, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"iLu" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/right/directional/east{ + name = "Medbay Front Desk"; + req_access = list("medical") + }, +/obj/machinery/door/window/left/directional/west{ + name = "Medbay Front Desk" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "medbay_desk_shutters"; + name = "Medbay Front Desk Shutters"; + dir = 4 + }, +/obj/structure/desk_bell{ + pixel_x = -6 + }, +/turf/open/floor/iron/white, +/area/station/medical/office) +"iLB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"iLG" = ( +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/chapel{ + dir = 4 + }, +/area/station/service/chapel) +"iLZ" = ( +/turf/closed/wall/r_wall, +/area/station/science/research/abandoned) +"iMj" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/machinery/disease2/diseaseanalyser, +/obj/machinery/airalarm/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"iMo" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/white, +/area/station/science/research) +"iMs" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/computer/records/medical, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"iMx" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/east{ + name = "Courtroom"; + req_access = list("court") + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"iMB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"iMN" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"iMQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Prison Laundry Room" + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/shower) +"iNd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"iNi" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"iNx" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/vending/tool, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/storage_shared) +"iNG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"iNK" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/machinery/biogenerator, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics/garden) +"iNM" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"iNS" = ( +/obj/structure/sign/poster/contraband/random/directional/south, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"iNT" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/checker, +/area/station/science/lab) +"iNY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=Security"; + location = "EVA2" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"iNZ" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer2, +/obj/machinery/door/airlock/research/glass{ + name = "Freeze Chamber Exterior Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/freezerchamber) +"iOi" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/button/door/directional/south{ + pixel_x = -6; + id = "justice_blast"; + name = "Emergency Justice Vent Control"; + req_access = list("security") + }, +/obj/machinery/button/door/directional/south{ + pixel_x = 6; + id = "execution_fireblast"; + name = "Justice Chamber Lockdown"; + req_access = list("security") + }, +/obj/machinery/button/ignition{ + id = "execution_burn"; + name = "Execution Ignition Switch"; + pixel_x = 6; + pixel_y = -36; + req_access = list("security") + }, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"iOl" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/landmark/start/detective, +/turf/open/floor/carpet/red, +/area/station/security/detectives_office) +"iOC" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"iOG" = ( +/obj/machinery/light/small/built/directional/south, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"iOJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/structure/sign/departments/maint/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"iOO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/port) +"iOT" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/storage) +"iOV" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/vending/hydronutrients, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics) +"iPu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"iPQ" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"iQd" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"iQo" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/line, +/obj/structure/sign/departments/science/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"iQy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"iQE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"iQM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Chief Medical Officer's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/cmo, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white/textured, +/area/station/command/heads_quarters/cmo) +"iQR" = ( +/obj/effect/turf_decal/box, +/obj/structure/disposalpipe/junction/flip{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/primary/central) +"iQW" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"iRe" = ( +/obj/structure/bookcase/random/nonfiction, +/turf/open/floor/wood, +/area/station/service/library) +"iRl" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output{ + dir = 8 + }, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"iRq" = ( +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"iRs" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness/recreation) +"iRv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Storage" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/layer1, +/turf/open/floor/iron/textured, +/area/station/engineering/storage) +"iRy" = ( +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"iRQ" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"iSa" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"iSe" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/firealarm/directional/north, +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"iSg" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"iSr" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"iSI" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"iSM" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/vehicle/ridden/wheelchair{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"iTg" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/structure/chair, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"iTi" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/structure/sign/warning/secure_area/directional/west, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"iTo" = ( +/turf/open/floor/iron/chapel{ + dir = 4 + }, +/area/station/service/chapel) +"iUf" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"iUg" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Service - Chapel Coffin Storage"; + name = "service camera" + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"iUt" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"iUx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/external{ + name = "External Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"iUz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/light/neon_lining{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) +"iUB" = ( +/turf/closed/wall/r_wall, +/area/station/security/lockers) +"iUP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"iVh" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/missing_gloves{ + pixel_x = 32 + }, +/obj/machinery/light/directional/south, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"iVj" = ( +/obj/machinery/light/directional/east, +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = -5; + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/station/service/library) +"iVq" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/turf/closed/wall/r_wall, +/area/station/security/holding_cell) +"iVC" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/mob/living/basic/butterfly, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/grass, +/area/station/command/bridge) +"iVI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"iWk" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/machinery/airalarm/directional/west, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/toy/figure/borg{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/pen{ + pixel_x = -4; + pixel_y = 6 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"iWu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"iWw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"iWI" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/entertainment/coin, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"iWL" = ( +/obj/machinery/light/directional/south, +/obj/machinery/computer/slot_machine, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"iWX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"iXg" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/pump/on/layer2{ + name = "External to Filter" + }, +/obj/machinery/atmospherics/components/binary/pump/on/layer4{ + dir = 1; + name = "Air to External" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"iXh" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"iXl" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/aft) +"iXp" = ( +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness/recreation) +"iXy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark/side, +/area/station/commons/storage/primary) +"iXB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"iXP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "prison_gate"; + name = "Prison Blast Door" + }, +/obj/machinery/door/airlock/public/glass{ + name = "Prison Wing" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron/dark/textured, +/area/station/security/brig) +"iXR" = ( +/obj/machinery/vending/wardrobe/chap_wardrobe, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"iXS" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/spawner/directional/north, +/obj/structure/table/glass, +/obj/item/book/manual/wiki/security_space_law, +/obj/item/toy/cards/deck{ + pixel_x = 2 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"iXU" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"iXY" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage" + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"iYk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"iYs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"iYF" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"iYH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"iYK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"iYW" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"iYZ" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/carpet/red, +/area/station/security/prison/safe) +"iZd" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/loading_area, +/obj/machinery/light/directional/east, +/obj/machinery/status_display/supply{ + pixel_x = 32 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/storage) +"iZr" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"iZB" = ( +/obj/machinery/atmospherics/components/binary/pump/layer4{ + dir = 8; + name = "Turbine to Waste" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"iZD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"iZM" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/warning, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/science/server) +"jac" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"jaf" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"jat" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + id_tag = "innercargo"; + name = "Cargo Bay" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/storage) +"jay" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"jaz" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/office) +"jaQ" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness) +"jbg" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/landmark/start/atmospheric_technician, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"jbt" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/shower/directional/east, +/turf/open/floor/iron/white, +/area/station/science/genetics/cloning) +"jbA" = ( +/obj/machinery/door/poddoor/preopen{ + id = "execution_fireblast" + }, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/security/execution) +"jbH" = ( +/obj/effect/landmark/start/hangover, +/turf/open/floor/engine{ + name = "Holodeck Projector Floor" + }, +/area/station/holodeck/rec_center) +"jbM" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"jbP" = ( +/obj/machinery/airalarm/directional/south, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"jbQ" = ( +/turf/open/floor/wood/large, +/area/station/commons/dorms) +"jbR" = ( +/obj/structure/bodycontainer/morgue{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"jbY" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/engineering/material_cheap, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"jcd" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/holding_cell) +"jcf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"jch" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/iron/dark, +/area/station/security/office) +"jci" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"jct" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"jcB" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"jcC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"jcF" = ( +/turf/closed/wall/r_wall, +/area/station/security/prison/shower) +"jcG" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"jcU" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/closet/wardrobe/miner, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/miningoffice) +"jcX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"jdb" = ( +/obj/machinery/firealarm/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"jdg" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/tcommsat/computer) +"jdh" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"jdA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"jdJ" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"jdN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/plumbed{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"jdV" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"jef" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"jet" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/welded, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"jeu" = ( +/obj/structure/sign/warning/radiation/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"jfI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/service{ + name = "Law Office" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/lawyer, +/obj/effect/landmark/navigate_destination/lawyer, +/turf/open/floor/iron/dark/textured, +/area/station/service/lawoffice) +"jga" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/cargo/storage) +"jgz" = ( +/obj/structure/table/glass, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"jgH" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"jgM" = ( +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"jgV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/medical/psychology) +"jgW" = ( +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_half{ + dir = 8 + }, +/area/station/command/gateway) +"jgZ" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/keycard_auth/directional/south, +/obj/machinery/newscaster/directional/east, +/obj/structure/closet/secure_closet/chief_medical, +/obj/item/screwdriver, +/obj/item/clothing/head/costume/nursehat, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) +"jhf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"jhj" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"jhk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/xenobio, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"jhq" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"jhr" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/grill, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"jht" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/cable, +/obj/structure/cable/layer3, +/turf/open/floor/engine, +/area/station/ai_monitored/command/storage/satellite) +"jhE" = ( +/obj/machinery/power/rad_collector, +/turf/open/floor/plating, +/area/station/engineering/main) +"jhJ" = ( +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"jic" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/item/radio/intercom/directional/west, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/vending/wardrobe/law_wardrobe, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"jit" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"jiu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain) +"jiy" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"jiL" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/hallway/secondary/service) +"jiS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/grille, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"jjk" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/ordnance/office) +"jjm" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"jjs" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"jjx" = ( +/obj/machinery/cryopod{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"jjz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness) +"jjD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"jjJ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) +"jjV" = ( +/obj/machinery/computer/atmos_control/nitrogen_tank{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"jkd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"jke" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"jkt" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/structure/chair/sofa/corp/right{ + color = "#7fb3d5"; + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"jkz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"jkD" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/bot_white, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"jkE" = ( +/obj/item/food/canned/beans, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"jkF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"jkJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"jkQ" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"jkU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"jli" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"jlo" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"jlu" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/entry) +"jlA" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"jlE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"jlN" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/computer/cargo{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/office) +"jlO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/storage) +"jlX" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"jmc" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"jmd" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/structure/chair/sofa/corp/right{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"jmh" = ( +/turf/closed/wall, +/area/station/service/hydroponics/garden) +"jmn" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"jmo" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/light/small/directional/south, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/engineering/break_room) +"jmy" = ( +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"jmB" = ( +/obj/effect/turf_decal/bot, +/obj/structure/table/reinforced, +/obj/item/stack/sheet/plasteel/twenty, +/obj/item/wrench, +/turf/open/floor/iron/large, +/area/station/engineering/gravity_generator) +"jmQ" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"jmS" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"jnb" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/effect/turf_decal/tile/dark_blue, +/obj/structure/sign/warning/secure_area/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"jnc" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"jnp" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/secure_area/directional/west, +/turf/open/space/basic, +/area/space/nearstation) +"jnS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"jnY" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/structure/sign/poster/official/help_others/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"joc" = ( +/obj/machinery/washing_machine, +/turf/open/floor/iron/dark, +/area/station/security/prison/shower) +"joj" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"jou" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"joE" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space, +/area/station/solars/port/aft) +"joH" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"joY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"jpg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"jpN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"jpQ" = ( +/obj/item/radio/intercom/directional/north, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/tcommsat/computer) +"jpU" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/sign/warning/pods/directional/south, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron, +/area/station/engineering/storage) +"jqs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) +"jqH" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"jrr" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"jrv" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"jrB" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/structure/table/reinforced, +/obj/item/storage/box/flashbangs{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/storage/box/flashes, +/obj/item/storage/box/teargas{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/handcuffs{ + pixel_y = 5; + pixel_x = 6 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"jsa" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"jsd" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"jse" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"jsw" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Security - Visitation Observation"; + name = "security camera" + }, +/obj/structure/table, +/obj/item/book/manual/wiki/security_space_law, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"jsB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"jsQ" = ( +/obj/structure/table, +/obj/item/clothing/under/rank/prisoner{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = -2 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = -8 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"jto" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"jty" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"jtE" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"jtU" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/clothing/costume, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"jub" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"juc" = ( +/turf/open/floor/iron, +/area/station/service/hydroponics) +"jug" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/cable, +/obj/structure/plaque/static_plaque/golden/commission/box, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"jui" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"juj" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/carbon_input{ + dir = 8 + }, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) +"juk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/dorms) +"jun" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/engine, +/area/station/medical/cryo) +"juH" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"juU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/station/maintenance/starboard/aft) +"jvd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/external{ + name = "Escape Pod Three" + }, +/obj/effect/landmark/navigate_destination/dockescpod3, +/turf/open/floor/iron/dark/textured_large, +/area/station/maintenance/department/security) +"jve" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/effect/turf_decal/trimline/red/filled/warning, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"jvi" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"jvj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/machinery/door/airlock/medical{ + name = "Psychology Office" + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/psychology) +"jvt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/holopad, +/turf/open/floor/wood, +/area/station/service/library/private) +"jvu" = ( +/turf/closed/wall, +/area/station/commons/fitness) +"jvA" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/engineering/main) +"jvO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"jwc" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"jwf" = ( +/obj/structure/sign/warning/biohazard/directional/west, +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 4 + }, +/area/station/command/gateway) +"jwt" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/four, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"jwu" = ( +/obj/structure/displaycase/trophy, +/turf/open/floor/wood, +/area/station/service/library) +"jww" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"jwC" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"jwD" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/flasher/directional/west{ + id = "Cell 4" + }, +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"jwP" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/obj/item/stack/ore/gold, +/obj/item/stack/ore/gold, +/obj/item/stack/ore/gold, +/obj/item/stack/ore/gold, +/obj/item/stack/ore/gold, +/turf/open/floor/plating, +/area/station/maintenance/port) +"jwW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"jwZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/sign/warning/secure_area/directional/south, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"jxd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"jxl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"jxr" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/table/glass, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science{ + pixel_x = 2; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/item/reagent_containers/dropper, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"jxy" = ( +/turf/closed/wall, +/area/station/maintenance/starboard/fore) +"jxF" = ( +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"jxM" = ( +/obj/vehicle/ridden/wheelchair{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"jxN" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/item/radio/intercom/directional/west, +/obj/structure/rack, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/mask/gas{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/tank/internals/oxygen/yellow{ + pixel_x = 5; + pixel_y = -3 + }, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/engineering/break_room) +"jya" = ( +/obj/effect/turf_decal/box/white, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/turret_protected/ai_upload) +"jyb" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/light/small/directional/east, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"jyf" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"jyz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/dorms) +"jyE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/obj/structure/noticeboard/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"jyS" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics_pub_shutters"; + name = "Robotics Shutters"; + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/science/robotics/lab) +"jzd" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"jze" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/plaque{ + icon_state = "L13" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"jzk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/fore) +"jzo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/smooth_large, +/area/station/maintenance/department/security) +"jzq" = ( +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron/dark/corner, +/area/station/commons/storage/primary) +"jzw" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"jzQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/chair/stool/directional/east, +/obj/effect/landmark/start/geneticist, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/genetics/cloning) +"jAb" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = -8 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"jAi" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/office) +"jAm" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/deck, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"jAw" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"jAA" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"jAL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"jAO" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"jBc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/cable/layer3, +/turf/open/floor/engine, +/area/station/ai_monitored/command/storage/satellite) +"jBi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"jBr" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Pure to Mix"; + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"jBv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/telecomms/receiver/preset_left, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"jBF" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/hidden, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"jBZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Medical Break Room Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"jCb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"jCl" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"jCx" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"jCy" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/heater, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"jCA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=HOP2"; + location = "Stbd" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"jCP" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"jCY" = ( +/obj/machinery/vending/wardrobe/curator_wardrobe, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"jDc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/mob/living/simple_animal/bot/secbot/beepsky/officer, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"jDg" = ( +/turf/closed/wall, +/area/station/science/ordnance/storage) +"jDj" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"jDp" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"jDq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) +"jDy" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"jDz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/port/fore) +"jDD" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"jDX" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"jEd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering/glass{ + name = "Server Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/tcommsat/computer) +"jEi" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port) +"jEw" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/table, +/obj/machinery/computer/security/telescreen/research, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"jEW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"jEX" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"jEY" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/prison/safe) +"jFb" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/roller{ + pixel_y = 6 + }, +/obj/item/roller{ + pixel_y = 12 + }, +/obj/machinery/button/door/directional/east{ + id = "surgery_privacy"; + name = "Surgery Privacy Shutters Control" + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"jFe" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"jFn" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/computer/security{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"jFo" = ( +/turf/closed/wall/r_wall, +/area/station/command/gateway) +"jFv" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) +"jFw" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/item/crowbar/red, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/item/reagent_containers/dropper, +/obj/item/flashlight/pen, +/obj/item/radio/headset/headset_medsci, +/obj/item/infuser_book, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"jFx" = ( +/turf/open/floor/circuit/green, +/area/station/engineering/gravity_generator) +"jFF" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"jFG" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"jFP" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/vending/engivend, +/obj/machinery/camera/directional/west{ + c_tag = "Engineering - Equipment Storage"; + name = "engineering camera" + }, +/obj/structure/sign/warning/electric_shock/directional/west, +/turf/open/floor/iron, +/area/station/engineering/storage) +"jGl" = ( +/obj/effect/turf_decal/bot, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron, +/area/station/engineering/main) +"jGm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/atmospheric_technician, +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"jGs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"jGt" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/sign/warning/rad_shelter/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"jGx" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "4"; + dir = 1; + pixel_y = 0 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"jGA" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/machinery/camera/directional/north{ + c_tag = "Arrivals - Bay 1, Upper Hallway" + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"jGJ" = ( +/obj/machinery/door/poddoor/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"jGV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"jGX" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/red/corner, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"jHa" = ( +/obj/structure/closet/crate/trashcart/laundry, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/shoes/sneakers/orange, +/obj/item/clothing/shoes/sneakers/orange, +/obj/item/clothing/shoes/sneakers/orange, +/obj/item/clothing/shoes/sneakers/orange, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/shower) +"jHh" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) +"jHl" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/hidden, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"jHm" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Port Hallway Center" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"jHn" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"jHI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"jHN" = ( +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness/recreation) +"jHT" = ( +/obj/machinery/button/door/directional/north{ + id = "dorm_4"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"jIp" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"jIr" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/window/reinforced/tinted, +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"jIu" = ( +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"jIv" = ( +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/maintenance/port) +"jII" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "N2 to Pure" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"jIO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"jJk" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/large, +/area/station/commons/dorms) +"jJq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/genetics/cloning) +"jJr" = ( +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"jJt" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"jJz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "library_desk_shutters"; + name = "Library Desk Shutters"; + dir = 1 + }, +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen/red, +/obj/item/pen/blue{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/library/printer) +"jJF" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/landmark/start/quartermaster, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"jJW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Paramedic Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/open/floor/iron/dark, +/area/station/medical/paramedic) +"jKa" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"jKd" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/brig) +"jKh" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/break_room) +"jKn" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"jKu" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/sign/painting/library{ + pixel_x = -32 + }, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"jKv" = ( +/obj/structure/table, +/obj/item/storage/toolbox/electrical{ + pixel_y = 10 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 4 + }, +/obj/item/storage/belt/utility, +/obj/item/flashlight, +/obj/item/clothing/glasses/meson/engine{ + pixel_x = 4; + pixel_y = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) +"jKA" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"jKB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"jKE" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/hallway/secondary/service) +"jKV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/station/maintenance/port/fore) +"jKW" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/directional/west, +/obj/structure/closet/emcloset, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"jLa" = ( +/obj/structure/closet/firecloset{ + anchored = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"jLf" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"jLl" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/structure/chair/wood{ + dir = 8 + }, +/obj/effect/landmark/start/chaplain, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"jLn" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron/white, +/area/station/science/lab) +"jLu" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters{ + id = "armory_window_shutters"; + name = "Armory Window Shutter" + }, +/turf/open/floor/plating, +/area/station/ai_monitored/security/armory) +"jLI" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/machinery/light_switch/directional/west, +/obj/structure/chair/sofa/corp{ + color = "#7fb3d5"; + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"jLL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"jLQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/carpet/neon/simple/green, +/area/station/science/xenobiology) +"jLR" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 10 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/cargo/sorting) +"jLS" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -7 + }, +/obj/item/folder/red{ + pixel_x = -7 + }, +/obj/item/pen{ + pixel_x = -7 + }, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 7 + }, +/obj/item/hand_labeler, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"jMb" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/smooth_large, +/area/station/engineering/main) +"jMj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"jMs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/item/t_scanner, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/engineering/break_room) +"jMP" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"jMT" = ( +/obj/item/stack/ore/slag, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"jNa" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"jNm" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = 8 + }, +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/iron/white/textured, +/area/station/science/auxlab) +"jNJ" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"jNL" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"jNZ" = ( +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"jOc" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"jOi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"jOm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/telecomms/server/presets/engineering, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"jOr" = ( +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"jOx" = ( +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"jOI" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"jON" = ( +/obj/structure/sign/poster/official/help_others/directional/east, +/obj/machinery/light/broken/directional/east, +/obj/structure/frame/computer{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/maintenance/port/fore) +"jOV" = ( +/obj/machinery/keycard_auth/directional/east, +/obj/structure/bed/dogbed/lia, +/mob/living/basic/carp/pet/lia, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"jOZ" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"jPm" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/lobby) +"jPq" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"jPt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/telecomms/broadcaster/preset_right, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"jPP" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"jPZ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/machinery/button/door/directional/west{ + id = "prison_release"; + name = "Labor Camp Shuttle Lockdown"; + req_access = list("brig") + }, +/obj/machinery/computer/shuttle/labor{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"jQb" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Chief Medical Officer's Quarters" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/cmo, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/cmo) +"jQr" = ( +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"jQu" = ( +/turf/open/floor/wood, +/area/station/commons/locker) +"jQO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"jQQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"jQZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"jRe" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"jRr" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/security/glass{ + name = "Armory" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/security/armory) +"jRs" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"jRC" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"jRM" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "apothecary_shutters"; + name = "Apothecary Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/medical/pharmacy) +"jRP" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/table, +/obj/machinery/splicer, +/obj/item/food/grown/poppy/lily, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/service/hydroponics) +"jRY" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/sign/painting/library{ + pixel_x = -32 + }, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"jRZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_a) +"jSh" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/landmark/start/head_of_personnel, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/hop) +"jSu" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"jSC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"jSM" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/hidden{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"jSO" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"jSX" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"jTa" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"jTi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/storage) +"jTs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"jTy" = ( +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/dorms) +"jTS" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/airlock/research{ + name = "Ordnance Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance_storage, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/science/ordnance/storage) +"jUa" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"jUb" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/structure/sign/departments/maint/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"jUk" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"jUm" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"jUt" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/computer/security/telescreen{ + desc = "Used for watching Prison Wing holding areas."; + name = "Prison Monitor"; + network = list("prison"); + pixel_y = -30; + dir = 1 + }, +/obj/machinery/computer/warrant{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"jUC" = ( +/obj/machinery/light/small/broken/directional/north, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"jUD" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Primary Tool Storage" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/storage/primary) +"jVd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"jVm" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/chair, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"jVp" = ( +/obj/structure/closet/crate/freezer, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/obj/effect/spawner/random/food_or_drink/booze, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"jVE" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"jVP" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/cargo_shelf, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"jVQ" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Science - Ordnance Launch Access"; + name = "science camera"; + network = list("ss13","rd") + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"jVS" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"jVU" = ( +/obj/structure/cable/multilayer/connected, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"jVY" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"jWq" = ( +/obj/machinery/light/neon_lining{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) +"jWy" = ( +/turf/closed/wall/r_wall, +/area/station/construction) +"jWA" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"jWK" = ( +/obj/effect/turf_decal/box, +/obj/machinery/camera/directional/north{ + c_tag = "AI Chamber - Primary Core"; + name = "core camera"; + network = list("aicore") + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"jWN" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/service/chapel/office) +"jWP" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"jWQ" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/storage) +"jWT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/layer_manifold/general/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engi_lobby_shutters"; + name = "Engineering Lobby Shutters"; + dir = 4 + }, +/obj/machinery/door/poddoor/preopen{ + id = "engineering"; + name = "Engineering Blast Door" + }, +/turf/open/floor/plating, +/area/station/engineering/break_room) +"jXh" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"jXi" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "bitrunner_den" + }, +/turf/open/floor/plating, +/area/station/bitrunning/den) +"jXr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/closet/secure_closet/personal/patient, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"jXu" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"jXV" = ( +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"jYc" = ( +/obj/machinery/light/small/broken/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/iron/white, +/area/station/maintenance/department/medical) +"jYd" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) +"jYg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/command/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/eva) +"jYp" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/light/directional/west, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/rack, +/obj/item/integrated_circuit/loaded/hello_world{ + pixel_x = 7 + }, +/obj/item/integrated_circuit/loaded/speech_relay{ + pixel_x = 7 + }, +/obj/item/compact_remote{ + pixel_x = -7 + }, +/obj/item/compact_remote{ + pixel_x = -7 + }, +/obj/item/controller{ + pixel_x = -7 + }, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"jYv" = ( +/obj/structure/chair/stool/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"jYF" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/grass, +/area/station/science/genetics) +"jZa" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/obj/item/radio/intercom/directional/north, +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 5 + }, +/turf/open/floor/iron/white, +/area/station/science/lab) +"jZe" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"jZl" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/textured, +/area/station/engineering/gravity_generator) +"jZp" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"jZq" = ( +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/bot_white/left, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 8 + }, +/area/station/engineering/gravity_generator) +"jZt" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"jZI" = ( +/obj/item/radio/intercom/prison/directional/west, +/turf/open/floor/carpet/blue, +/area/station/medical/psychology) +"jZY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"kag" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/construction) +"kau" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"kaD" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "engineering"; + name = "Engineering Blast Door" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engi_lobby_shutters"; + name = "Engineering Lobby Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/break_room) +"kaL" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"kaP" = ( +/obj/machinery/door/window/brigdoor/right/directional/east{ + req_access = list("rd"); + name = "Research Director's Quarters" + }, +/turf/open/floor/iron/vaporwave, +/area/station/command/heads_quarters/rd) +"kbA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"kbB" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/vending/wardrobe/chef_wardrobe, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"kbD" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Port Bow Solar Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/landmark/navigate_destination/common/portbowsolar, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"kbE" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood, +/area/station/service/library) +"kbR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"kbT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side, +/area/station/commons/locker) +"kde" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"kdp" = ( +/obj/machinery/computer/holodeck{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) +"kdy" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/wood, +/area/station/service/library/private) +"kdH" = ( +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"kdQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"kdZ" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/sign/departments/maint/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"keg" = ( +/obj/structure/flora/grass/jungle/a/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"kel" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"ken" = ( +/obj/machinery/light_switch/directional/east, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"keo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/closet/l3closet/virology, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"ker" = ( +/obj/structure/lattice/catwalk, +/obj/item/stack/cable_coil, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/space, +/area/station/solars/starboard/fore) +"keu" = ( +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/hydroponics) +"kew" = ( +/turf/closed/wall/r_wall, +/area/station/command/meeting_room) +"keI" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"keT" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/suit_storage_unit/captain, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"kfa" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness) +"kfc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"kfe" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/structure/sign/departments/security/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"kfl" = ( +/turf/closed/wall, +/area/station/construction/mining/aux_base) +"kfB" = ( +/obj/structure/table, +/obj/item/book/manual/wiki/engineering_construction{ + pixel_x = 6 + }, +/obj/item/book/manual/wiki/engineering_guide{ + pixel_x = -6 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"kfC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/service/theater, +/turf/open/floor/plating, +/area/station/maintenance/port) +"kfI" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/north, +/obj/structure/statue/silver/sec{ + name = "Statue of Security Officer Calhoun"; + desc = "Now... about that beer I owed ya!" + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"kfN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "bar_sec_shutters"; + name = "Bar Shutters"; + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/bar) +"kfT" = ( +/turf/closed/wall/r_wall, +/area/station/security/evidence) +"kgn" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"kgv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/port) +"kgC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) +"kgH" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/computer/atmos_control/carbon_tank{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"kgO" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"kgS" = ( +/obj/machinery/light/small/built/directional/south, +/obj/effect/decal/cleanable/oil, +/obj/structure/frame/machine, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"kgZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/storage) +"kha" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"khd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"khr" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"khD" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/starboard/aft) +"khP" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"khZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/science/robotics, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"kie" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/table/wood, +/obj/item/book/granter/action/spell/smoke/lesser{ + name = "mysterious old book of cloud-chasing" + }, +/obj/item/reagent_containers/cup/glass/bottle/holywater{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/nullrod{ + pixel_x = 4 + }, +/obj/item/organ/internal/heart, +/obj/item/soulstone/anybody/chaplain, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"kiu" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"kiv" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/space/basic, +/area/space/nearstation) +"kiw" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/stasis{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/exam_room) +"kiC" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/closet/secure_closet/security/sec, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"kiI" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"kiM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"kiT" = ( +/obj/machinery/keycard_auth/directional/east, +/obj/machinery/light/directional/east, +/obj/machinery/modular_computer/preset/id{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) +"kjj" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/solars/starboard/fore) +"kjv" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"kjx" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"kjA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side, +/area/station/security/prison/workout) +"kjC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"kjD" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/wood/fancy, +/obj/effect/spawner/random/decoration/statue{ + spawn_loot_chance = 35 + }, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"kjH" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/computer/security, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"kjM" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"kjO" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"kjP" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) +"kkb" = ( +/obj/structure/table/wood, +/obj/item/storage/box/cups, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"kkg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/table/wood, +/obj/item/camera_film{ + pixel_x = -4; + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/office) +"kkp" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/chair, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"kkq" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/computer/security/mining{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"kkt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/grunge{ + name = "Stall 3" + }, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"kkz" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/computer/records/security{ + dir = 8 + }, +/obj/machinery/button/door/directional/north{ + id = "departures_security_post"; + name = "Security Post Shutters Control"; + req_access = list("security") + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"kkC" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/glass, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"kkH" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/table/wood, +/turf/open/floor/carpet/blue, +/area/station/commons/dorms) +"kkR" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"klm" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"klo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"klr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 8 + }, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"klx" = ( +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/commons/fitness) +"kly" = ( +/obj/docking_port/stationary/random{ + name = "lavaland"; + shuttle_id = "pod_3_lavaland" + }, +/turf/open/space/basic, +/area/space) +"klQ" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/storage/box/firingpins, +/obj/item/storage/box/firingpins{ + pixel_y = 3; + pixel_x = 3 + }, +/obj/item/gun/energy/temperature/security, +/obj/item/gun/energy/ionrifle, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"klX" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/five, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"kml" = ( +/turf/closed/wall, +/area/station/security/prison/visit) +"kmq" = ( +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"kmO" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/machinery/airalarm/directional/west, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/computer/records/security{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"kmX" = ( +/obj/machinery/newscaster/directional/north, +/obj/machinery/light/directional/north, +/obj/structure/table/reinforced, +/obj/item/storage/belt/utility, +/obj/item/clothing/glasses/welding, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"kne" = ( +/obj/structure/flora/bush/jungle/b/style_random, +/mob/living/basic/butterfly, +/turf/open/floor/grass, +/area/station/command/bridge) +"kni" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"knl" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/light/small/directional/west, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"kno" = ( +/obj/structure/table/wood, +/obj/item/storage/photo_album/captain, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"knr" = ( +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"knt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/gateway) +"knz" = ( +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/service/chapel) +"knA" = ( +/turf/open/floor/grass, +/area/station/service/hydroponics) +"knI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"knW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/xenobio, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"knX" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, +/turf/open/space/basic, +/area/space/nearstation) +"knY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"knZ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/break_room) +"kod" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"koo" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/wood, +/area/station/service/library) +"kos" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/locker) +"koC" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) +"koF" = ( +/obj/docking_port/stationary/random{ + name = "lavaland"; + shuttle_id = "pod_4_lavaland"; + dir = 2 + }, +/turf/open/space/basic, +/area/space) +"koO" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"koP" = ( +/obj/structure/chair/stool/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness) +"kpg" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/obj/machinery/vending/mechcomp, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"kpn" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"kpr" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/hallway/primary/port) +"kpt" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/line, +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/sign/departments/chemistry/pharmacy/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"kpu" = ( +/obj/machinery/computer/prisoner/management, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"kpB" = ( +/turf/closed/wall, +/area/station/medical/morgue) +"kpE" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"kpJ" = ( +/obj/item/tank/internals/oxygen, +/obj/item/clothing/mask/breath, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"kpP" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"kqh" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"kqn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/effect/landmark/event_spawn, +/obj/machinery/holopad, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/central) +"kqp" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"kqr" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/button/door/directional/south{ + id = "library_desk_shutters"; + name = "Library Desk Shutters Control"; + req_access = list("library") + }, +/obj/machinery/modular_computer/preset/curator{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/library/printer) +"kqu" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"kqw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/chapel{ + dir = 4 + }, +/area/station/service/chapel) +"kqQ" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/miningoffice) +"krD" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/atmospherics/components/unary/passive_vent{ + name = "freezer passive vent" + }, +/turf/open/floor/circuit/telecomms/server, +/area/station/science/server) +"krE" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/light/directional/east, +/obj/machinery/nanite_programmer, +/turf/open/floor/iron/white, +/area/station/science/research) +"krH" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/service/library/printer) +"krQ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/structure/closet/secure_closet/contraband/armory, +/obj/effect/spawner/random/contraband/armory, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"krU" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/structure/plaque/static_plaque/golden{ + pixel_y = 32 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"krY" = ( +/obj/machinery/light/small/built/directional/east, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"ksa" = ( +/turf/open/space/basic, +/area/space) +"ksb" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) +"ksl" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/sink/directional/east, +/obj/machinery/defibrillator_mount/directional/west, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"ksp" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"ksu" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"ksM" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"ksZ" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"ktt" = ( +/obj/machinery/light/directional/west, +/obj/structure/table, +/obj/item/storage/box/prisoner{ + pixel_y = 8 + }, +/obj/item/storage/box/prisoner, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"kua" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/item/radio/intercom/directional/east, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/holding_cell) +"kuk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/camera/motion/directional/south{ + c_tag = "AI Sat - AI Chamber South"; + network = list("aicore") + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"kuz" = ( +/obj/structure/sign/poster/random/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"kuC" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"kuJ" = ( +/obj/machinery/newscaster/directional/west, +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/assembly/prox_sensor, +/obj/item/assembly/prox_sensor, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"kvh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"kvi" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"kvw" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/button/door/directional/west{ + id = "armory_side_access"; + name = "Armory Side Access"; + pixel_y = 10; + req_access = list("armory") + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/vending/wardrobe/sec_wardrobe, +/obj/machinery/button/door/directional/west{ + id = "sec_lockers"; + name = "Locker Room Shutters Control"; + req_access = list("security") + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"kvC" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/bluespace_vendor/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"kvD" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"kvL" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/plating, +/area/station/engineering/atmos/storage) +"kvW" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"kvX" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/newscaster/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"kvY" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"kvZ" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/folder/red, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/station/security/office) +"kwk" = ( +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"kwB" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"kwG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "library_desk_shutters"; + name = "Library Desk Shutters"; + dir = 1 + }, +/obj/structure/table/wood, +/obj/structure/desk_bell{ + pixel_y = 7; + pixel_x = 7 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/library/printer) +"kwT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners, +/obj/structure/closet/secure_closet/chemical, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry) +"kwV" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"kxd" = ( +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"kxi" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"kxo" = ( +/turf/closed/wall, +/area/station/commons/dorms) +"kxp" = ( +/obj/structure/frame/machine, +/obj/item/circuitboard/machine/chem_master, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"kxq" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/holding_cell) +"kxu" = ( +/obj/machinery/light_switch/directional/south, +/obj/structure/table, +/obj/item/shovel/spade, +/obj/item/plant_analyzer, +/obj/item/cultivator, +/obj/item/reagent_containers/cup/watering_can, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"kxC" = ( +/obj/effect/turf_decal/tile/orange/fourcorners, +/obj/structure/window/reinforced/tinted, +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"kxH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"kxM" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/leafy, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"kxR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"kxU" = ( +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"kxV" = ( +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"kya" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"kyl" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"kyt" = ( +/obj/effect/turf_decal/box, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/bridge) +"kyu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/service{ + name = "Bar Backroom" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/service/bar/backroom) +"kyX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/structure/sign/departments/engineering/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"kyY" = ( +/obj/structure/cable, +/obj/item/radio/intercom/directional/south, +/obj/machinery/power/smes{ + charge = 5e+006; + name = "ai power storage unit" + }, +/turf/open/floor/plating, +/area/station/ai_monitored/command/storage/satellite) +"kza" = ( +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "QMLoad" + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"kzf" = ( +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/machinery/computer/rdconsole, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/carpet/purple, +/area/station/command/heads_quarters/rd) +"kzi" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"kzt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Medbay Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"kzv" = ( +/obj/machinery/atmospherics/components/trinary/mixer/flipped, +/turf/open/floor/iron, +/area/station/science/ordnance) +"kzJ" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/miningoffice) +"kzM" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine/air, +/area/station/engineering/atmos) +"kzW" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"kzX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness/recreation) +"kAo" = ( +/obj/effect/turf_decal/trimline/red/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"kAS" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/east, +/obj/structure/table, +/obj/item/storage/fancy/donut_box, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"kAV" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"kBh" = ( +/obj/structure/chair/stool/directional/south, +/obj/machinery/light/small/directional/north, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/commons/dorms) +"kBn" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"kBA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/security/glass{ + name = "Cell 5" + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/safe) +"kBL" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"kCA" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/kitchenspike, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"kCD" = ( +/obj/effect/turf_decal/trimline/red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"kCF" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"kCL" = ( +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"kCQ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/table, +/obj/item/analyzer, +/obj/item/healthanalyzer, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"kCR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"kCZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"kDb" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/south{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") + }, +/obj/machinery/door/window/left/directional/north{ + name = "Hydroponics Desk" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "hydroponics_shutters"; + name = "Hydroponics Shutters" + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/hydroponics) +"kDd" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "engi_lobby_shutters"; + name = "Engineering Lobby Shutters Control" + }, +/obj/machinery/camera/autoname/directional/north, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high/empty, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/break_room) +"kDe" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) +"kDm" = ( +/obj/effect/landmark/blobstart, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"kDx" = ( +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/hallway/secondary/service) +"kDG" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"kDS" = ( +/obj/machinery/photocopier, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"kEl" = ( +/obj/machinery/newscaster/directional/east, +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole/bookmanagement{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/library/printer) +"kEq" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/machinery/airalarm/directional/south, +/obj/structure/reagent_dispensers/wall/peppertank/directional/east, +/obj/machinery/camera/directional/south{ + c_tag = "Security - Medical Post"; + name = "medical camera"; + network = list("ss13","medbay") + }, +/obj/machinery/computer/records/security{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"kEt" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"kEL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/neutral/corner, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"kEN" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "5"; + dir = 2 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"kEX" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/plaque{ + icon_state = "L8" + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"kFc" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/atm, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"kFf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/machinery/atmospherics/components/tank/air{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"kFu" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"kFw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/cell_5k, +/obj/effect/mapping_helpers/apc/full_charge, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"kFE" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/atmospherics/components/binary/pump/on/supply/visible/layer4{ + dir = 8; + name = "Air to External Ports" + }, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/engineering/break_room) +"kFI" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"kFK" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/mob/living/basic/mouse/brown/tom, +/turf/open/floor/iron/dark, +/area/station/security/prison/work) +"kFM" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=Stbd"; + location = "HOP" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"kFQ" = ( +/obj/machinery/light/directional/east, +/obj/structure/sign/flag/nanotrasen/directional/east, +/obj/machinery/suit_storage_unit/hos, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"kFV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/item/kirbyplants/random, +/obj/structure/sign/poster/contraband/random/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"kGn" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"kGr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"kGs" = ( +/obj/structure/flora/grass/jungle/a/style_random, +/obj/structure/flora/bush/large/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"kGS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/layer_manifold/general/hidden, +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Mining Dock Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningoffice) +"kHg" = ( +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/wood, +/area/station/maintenance/starboard/aft) +"kHh" = ( +/obj/machinery/door/window/left/directional/south, +/obj/structure/table/wood/fancy, +/obj/structure/sign/painting/large/library{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"kHk" = ( +/obj/structure/sign/warning/secure_area/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"kHw" = ( +/obj/item/paper/crumpled, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"kHL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"kHP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"kIh" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/science/explab) +"kIl" = ( +/obj/machinery/light_switch/directional/south, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"kIn" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"kIt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"kIy" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"kIA" = ( +/obj/machinery/suit_storage_unit/security, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"kIQ" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/rack, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/item/clothing/suit/armor/vest/alt/sec{ + pixel_y = 3; + pixel_x = -3 + }, +/obj/item/clothing/suit/armor/vest/alt/sec, +/obj/item/clothing/suit/armor/vest/alt/sec{ + pixel_y = -3; + pixel_x = 3 + }, +/obj/item/clothing/head/helmet/sec{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/head/helmet/sec, +/obj/item/clothing/head/helmet/sec{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"kIR" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/closet/secure_closet/security/sec, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"kJa" = ( +/obj/effect/turf_decal/box, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/camera/directional/south{ + c_tag = "AI Chamber - Secondary Core"; + name = "core camera"; + network = list("aicore"); + dir = 5 + }, +/obj/machinery/flasher/directional/north{ + id = "AI"; + name = "Meatbag Pacifier" + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"kJo" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/wood, +/area/station/maintenance/starboard/aft) +"kJs" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness/recreation) +"kJu" = ( +/obj/structure/table, +/obj/item/toy/plush/lizard_plushie/green, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/secondary/service) +"kJy" = ( +/obj/effect/turf_decal/stripes/end, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/security/execution) +"kJA" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"kJI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"kKf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port) +"kKh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"kKi" = ( +/obj/machinery/airalarm/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/captain/private) +"kKm" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/light_switch/directional/south, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/office) +"kKw" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/left/directional/south{ + name = "Engineering Deliveries"; + req_access = list("engineering") + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"kKH" = ( +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"kKV" = ( +/obj/structure/bed/pod, +/obj/item/bedsheet/random, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/maintenance/port/fore) +"kLd" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/machinery/light/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/engineering/break_room) +"kLf" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"kLj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/carpet/neon/simple/green, +/area/station/science/xenobiology) +"kLr" = ( +/turf/closed/wall/r_wall, +/area/station/hallway/secondary/exit/departure_lounge) +"kLu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port) +"kLK" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/chair/comfy/shuttle{ + dir = 1; + name = "Command Seat"; + desc = "A comfortable, secure seat. It has a more sturdy looking buckling system for smoother captaining." + }, +/obj/effect/landmark/start/captain, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"kLO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Cargo Bay Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port) +"kMh" = ( +/obj/structure/chair/sofa/left/brown{ + dir = 8 + }, +/turf/open/floor/carpet/blue, +/area/station/medical/psychology) +"kMC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"kMD" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"kME" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/requests_console/directional/south{ + department = "Kitchen"; + name = "Kitchen Requests Console"; + supplies_requestable = 1 + }, +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"kMH" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"kMR" = ( +/obj/machinery/holopad, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"kMW" = ( +/obj/machinery/newscaster/directional/west, +/obj/machinery/vending/cart, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"kMY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/layer3, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"kNe" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/sign/warning/electric_shock/directional/west, +/turf/open/floor/plating, +/area/station/engineering/gravity_generator) +"kNg" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"kNk" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"kNn" = ( +/obj/structure/closet/wardrobe/grey, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/locker) +"kNv" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/machinery/newscaster/directional/south, +/obj/machinery/light/directional/south, +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/paramedic, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/medical/paramedic) +"kNw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Departures Medical Post" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"kNH" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door_buttons/access_button{ + idDoor = "xeno_airlock_exterior"; + idSelf = "xeno_airlock_control"; + name = "Access Button"; + req_access = list("xenobiology"); + pixel_x = 24 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + autoclose = 0; + frequency = 1449; + id_tag = "xeno_airlock_exterior"; + name = "Xenobiology Lab External Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/white/textured, +/area/station/science/xenobiology/hallway) +"kNJ" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) +"kNO" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/hydroponics/garden) +"kOa" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/morgue{ + name = "Curator's Study"; + req_access = list("library"); + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/library/printer) +"kOi" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"kOk" = ( +/obj/structure/cable, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"kOo" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"kOr" = ( +/turf/open/floor/engine{ + name = "Holodeck Projector Floor" + }, +/area/station/holodeck/rec_center) +"kOB" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/effect/landmark/start/captain, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain) +"kOK" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/rack, +/obj/item/flashlight, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"kOW" = ( +/obj/effect/spawner/random/structure/chair_maintenance, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"kPa" = ( +/obj/machinery/atmospherics/components/binary/valve/digital/on/layer2{ + name = "Scrubbers" + }, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"kPj" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Head of Security" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/hos, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/hos) +"kPm" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"kPo" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"kPv" = ( +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"kPJ" = ( +/obj/machinery/corral_corner{ + mapping_id = "1" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "1" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"kPL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"kQe" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"kQi" = ( +/obj/machinery/computer/message_monitor, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"kQj" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/mail_sorting/science/xenobiology, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"kQk" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/obj/effect/landmark/start/research_director, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"kQo" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness) +"kQq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/tank/air, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"kQx" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"kQz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table/reinforced, +/obj/item/computer_disk/atmos{ + pixel_y = 6; + pixel_x = 4 + }, +/obj/item/storage/fancy/cigarettes/cigars, +/obj/item/lighter{ + pixel_y = -6 + }, +/obj/item/toy/figure/ce{ + pixel_y = 12; + pixel_x = -8 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"kQK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"kQP" = ( +/obj/machinery/corral_corner{ + mapping_id = "3" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "3" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"kQR" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/obj/item/stack/ore/uranium, +/obj/item/stack/ore/uranium, +/obj/item/stack/ore/uranium, +/obj/item/stack/ore/uranium, +/obj/item/stack/ore/uranium, +/turf/open/floor/plating, +/area/station/maintenance/port) +"kQU" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/poddoor/preopen{ + id = "bridge_blast_doors"; + name = "Bridge Access Blast Door" + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"kQX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/supply/visible{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"kRc" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/artifact_spawner, +/turf/open/floor/engine, +/area/station/science/explab) +"kRe" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 1 + }, +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/office) +"kRo" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"kRu" = ( +/obj/structure/lattice/catwalk, +/obj/item/stack/cable_coil, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/space, +/area/station/solars/port/fore) +"kRw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"kRK" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"kRS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"kSi" = ( +/obj/machinery/holopad, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/box, +/turf/open/floor/iron, +/area/station/tcommsat/computer) +"kSL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) +"kSU" = ( +/obj/structure/bookcase/random/religion, +/turf/open/floor/wood, +/area/station/service/library) +"kSX" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"kTj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Garden" + }, +/obj/effect/landmark/navigate_destination{ + location = "Garden" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured, +/area/station/service/hydroponics/garden) +"kTq" = ( +/obj/machinery/light/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"kTy" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"kTz" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Escape Pod Four" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/landmark/navigate_destination/dockescpod4, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/storage) +"kTE" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/line, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"kUa" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"kUf" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"kUm" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark/smooth_large, +/area/station/engineering/storage) +"kUp" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/flasher/directional/east{ + id = "holding_flash" + }, +/turf/open/floor/iron/dark, +/area/station/security/holding_cell) +"kUA" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/line, +/obj/structure/sign/directions/cryo/directional/north{ + dir = 4; + pixel_y = 23 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"kUB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"kUI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"kUJ" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"kUL" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"kUP" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/light/directional/west, +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/command_all, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"kUV" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"kVb" = ( +/obj/structure/table, +/obj/item/hfr_box/corner, +/obj/item/hfr_box/corner, +/obj/item/hfr_box/corner, +/obj/item/hfr_box/corner, +/obj/item/hfr_box/core, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"kVi" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"kVk" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/vehicle/ridden/secway, +/obj/item/key/security, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"kVn" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"kVq" = ( +/obj/machinery/duct, +/obj/machinery/light/neon_lining{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) +"kVD" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/mineral/plasma/thirty, +/obj/item/stack/sheet/mineral/uranium/five, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/stock_parts/cell/high, +/turf/open/floor/plating, +/area/station/engineering/main) +"kVF" = ( +/obj/machinery/duct, +/turf/open/floor/carpet/orange, +/area/station/security/prison/safe) +"kVG" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/flasher/directional/west{ + id = "Cell 1" + }, +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"kVX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"kVZ" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/table/glass, +/obj/item/food/grown/wheat, +/obj/item/food/grown/watermelon, +/obj/item/food/grown/watermelon, +/obj/item/food/grown/watermelon, +/obj/item/food/grown/citrus/orange, +/obj/item/food/grown/grapes, +/obj/item/food/grown/cocoapod, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics/garden) +"kWi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"kWj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/grunge{ + id_tag = "dorm_2"; + name = "Dorm 2" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms) +"kWu" = ( +/obj/structure/nestbox, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"kWy" = ( +/obj/structure/table, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow{ + pixel_y = 3 + }, +/obj/item/clothing/gloves/color/yellow{ + pixel_y = 6 + }, +/obj/item/clothing/gloves/color/yellow{ + pixel_y = 9 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/engineering/main) +"kWI" = ( +/obj/structure/easel, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"kWN" = ( +/obj/machinery/computer/cryopod/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"kWT" = ( +/obj/effect/spawner/random/trash/moisture_trap, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"kWX" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/structure/closet/firecloset, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"kWZ" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/firealarm/directional/west, +/obj/item/pickaxe, +/obj/item/shovel, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"kXf" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/left/directional/north{ + name = "Atmospherics Deliveries"; + req_access = list("atmospherics") + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) +"kXq" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/machinery/shower/directional/north, +/turf/open/floor/iron/white/textured, +/area/station/medical/storage) +"kXx" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"kXH" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"kXL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Auxiliary Construction Storage" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"kXN" = ( +/obj/structure/dresser, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"kYa" = ( +/obj/machinery/light/directional/west, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/science/ordnance) +"kYw" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"kYx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Medical - Pathology Access"; + name = "medical camera"; + network = list("ss13","medbay") + }, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"kYB" = ( +/obj/structure/table, +/obj/item/storage/cans/sixbeer, +/turf/open/floor/iron/dark, +/area/station/security/office) +"kYJ" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"kYR" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "ce_privacy"; + name = "CE Office Shutters" + }, +/obj/machinery/door/poddoor/preopen{ + id = "engineering"; + name = "Engineering Blast Door" + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/ce) +"kYU" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/bureaucracy/briefcase{ + spawn_loot_count = 2; + spawn_random_offset = 1 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood, +/area/station/service/library/private) +"kYW" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"kZe" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/structure/table/wood, +/obj/item/camera_film, +/obj/item/camera, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"kZf" = ( +/obj/structure/table, +/obj/item/toy/crayon/spraycan{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/toy/crayon/spraycan{ + pixel_y = 6 + }, +/obj/item/paint_palette, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness/recreation) +"kZD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/storage) +"kZM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"kZN" = ( +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"kZS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/button/door/incinerator_vent_atmos_aux{ + pixel_x = -8; + pixel_y = -24 + }, +/obj/machinery/button/door/incinerator_vent_atmos_main{ + pixel_x = -8; + pixel_y = -36 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"lat" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/newscaster/directional/north, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"lay" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"laO" = ( +/obj/structure/closet/secure_closet/freezer/kitchen, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"lbf" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"lbp" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/break_room) +"lbC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness/recreation) +"lbJ" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"lbK" = ( +/obj/structure/noticeboard/directional/north, +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/effect/spawner/random/bureaucracy/folder{ + pixel_y = 6 + }, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"lbL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters{ + id = "tele_shutter"; + name = "Teleporter Access Shutter"; + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/command/teleporter) +"lca" = ( +/obj/structure/sign/warning/radiation/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"lcI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"lcL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"lcS" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"lcU" = ( +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"lcX" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"ldz" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"ldF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/central) +"ldV" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"ldX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness) +"lej" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Laundry Room" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms/laundry) +"leq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"ley" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"lez" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"leA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=CHW"; + location = "Lockers" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"leC" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/ai_monitored/security/armory) +"leD" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 1 + }, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 1 + }, +/area/station/engineering/gravity_generator) +"leI" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=AIW"; + location = "QM" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"leN" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/glass, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "High-Risk Modules"; + req_access = list("captain") + }, +/obj/item/ai_module/supplied/freeform{ + pixel_x = -1; + pixel_y = -1 + }, +/obj/item/ai_module/supplied/protect_station{ + pixel_y = 3; + pixel_x = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"lfd" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_y = 6 + }, +/obj/item/folder/red{ + pixel_x = 3 + }, +/obj/item/folder/white{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/pen, +/turf/open/floor/iron/white, +/area/station/security/medical) +"lfg" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"lfi" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"lfm" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/grunge{ + name = "Cleaning Closet" + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/security/prison) +"lfo" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/main) +"lfw" = ( +/obj/structure/sign/warning/secure_area/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"lfx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"lfD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"lfI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/item/grown/bananapeel, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/department/engine/atmos) +"lfT" = ( +/obj/machinery/airalarm/directional/south, +/obj/machinery/light/directional/south, +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/iron/dark/side, +/area/station/tcommsat/computer) +"lgs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"lgB" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"lhd" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"lhg" = ( +/obj/machinery/duct, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"lhk" = ( +/obj/structure/cable, +/obj/machinery/button/door/directional/north{ + id = "iso_cell_hall_vent"; + name = "Isolation Cell Hall Vent Control"; + req_access = list("brig"); + pixel_x = 6 + }, +/obj/machinery/button/door/directional/north{ + id = "iso_cell_hall_bolt"; + name = "Isolation Cell Hall Bolt Control"; + req_access = list("brig"); + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_x = -6 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"lho" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/external{ + name = "External Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"lhp" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/button/door/directional/south{ + id = "eva_shutters"; + name = "EVA Shutters"; + req_access = list("command"); + pixel_x = -7 + }, +/obj/structure/rack, +/obj/machinery/light_switch/directional/east, +/obj/item/storage/toolbox/electrical{ + pixel_y = 6 + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/emergency{ + pixel_y = -6 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"lhv" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"lhD" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"lhN" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"lig" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"liB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/firealarm/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/structure/closet/emcloset, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) +"liC" = ( +/obj/effect/turf_decal/delivery/red, +/obj/machinery/light/directional/east, +/obj/structure/sign/warning/electric_shock/directional/east, +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/iron/textured, +/area/station/ai_monitored/command/storage/eva) +"liE" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/effect/landmark/start/hangover, +/turf/open/floor/wood, +/area/station/commons/dorms) +"liM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"liN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"liQ" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"liV" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/closet/toolcloset, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"ljl" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"ljt" = ( +/obj/structure/cable, +/obj/machinery/computer/accounting{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"ljv" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/security) +"ljS" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Captain's Quarters" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/captain/private) +"ljY" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/secure_area/directional/east, +/turf/open/space/basic, +/area/space/nearstation) +"lke" = ( +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/camera/directional/east{ + c_tag = "Arrivals - Common Mining Dock" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"lkh" = ( +/obj/machinery/computer/pod/old/mass_driver_controller/ordnancedriver{ + pixel_x = 6; + pixel_y = 28 + }, +/obj/structure/table/reinforced, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"lkq" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/wood, +/area/station/service/bar) +"lkR" = ( +/obj/machinery/the_singularitygen, +/turf/open/floor/plating, +/area/station/engineering/main) +"lkV" = ( +/obj/structure/sign/warning/vacuum/external/directional/east, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"lld" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"lls" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"llG" = ( +/obj/machinery/door/airlock/grunge{ + id_tag = "toilet_3"; + name = "Stall 3" + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"llH" = ( +/turf/closed/wall, +/area/station/engineering/atmos/pumproom) +"llR" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/office) +"llW" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/sign/warning/doors/directional/west, +/obj/machinery/light/small/directional/west, +/obj/machinery/door/poddoor/preopen{ + id = "bridge_blast_doors"; + name = "Bridge Access Blast Door" + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"lme" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"lmm" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"lmw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"lmK" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "1"; + dir = 1 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"lmX" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "detective_office_shutters"; + name = "Detective Office Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/security/detectives_office) +"lnc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/mess) +"lng" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"lnm" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/sign/departments/xenobio/directional/north, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"lnp" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/cargo/office) +"lns" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"lnu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"lnw" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/machinery/vending/medical, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"lnE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"lnS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/tank_holder, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"loc" = ( +/obj/vehicle/sealed/mecha/working/ripley/cargo, +/turf/open/floor/iron/recharge_floor, +/area/station/cargo/warehouse) +"loe" = ( +/obj/structure/table/glass, +/obj/item/hemostat, +/obj/item/stock_parts/manipulator, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/iron/white, +/area/station/maintenance/port/fore) +"lor" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) +"lou" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"loy" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"loG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/cable, +/obj/item/radio/intercom/directional/north, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"loL" = ( +/obj/machinery/conveyor{ + id = "package_sort_2" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) +"loQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"loR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/hallway/secondary/exit/departure_lounge) +"lpc" = ( +/obj/structure/chair/office, +/turf/open/floor/wood, +/area/station/service/library/private) +"lpk" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/computer/operating{ + name = "Robotics Operating Computer"; + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) +"lpm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) +"lpn" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"lpR" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"lqb" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"lqh" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/turf/open/floor/iron/dark, +/area/station/security/office) +"lqU" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/broken/directional/west, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"lqY" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"lrc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"lrd" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"lrg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"lrm" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck{ + pixel_x = 2 + }, +/obj/effect/spawner/random/entertainment/money{ + pixel_y = 8 + }, +/turf/open/floor/carpet/green, +/area/station/maintenance/starboard/aft) +"lrp" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/engineering/main) +"lrv" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/execution) +"lrB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"lrF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"lsa" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/camera/motion/directional/north{ + c_tag = "Command - EVA Storage North"; + name = "motion-sensitive command camera" + }, +/obj/machinery/space_heater, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"lst" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat_interior) +"lsC" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"lsE" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"lsQ" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"lsR" = ( +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/light/directional/north, +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/obj/structure/chair, +/obj/effect/landmark/start/botanist, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/hydroponics) +"lsX" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "testlab"; + name = "Xenobiology Secure Chamber Blast Door" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/reinforced, +/area/station/science/xenobiology) +"ltg" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"ltj" = ( +/obj/structure/sink/kitchen/directional/east, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"ltB" = ( +/obj/structure/cable, +/obj/effect/turf_decal/delivery/red, +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/command/storage/eva) +"ltF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters{ + id = "custodial_shutters"; + name = "Custodial Closet Shutters"; + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/janitor) +"ltG" = ( +/turf/closed/wall/r_wall, +/area/station/security/checkpoint/medical) +"ltM" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/construction/mining/aux_base) +"lup" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"luq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port) +"lus" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"lut" = ( +/obj/effect/spawner/random/trash/box, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/spawner/random/food_or_drink/booze, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"luw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/port) +"luI" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"luJ" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/item/food/grown/banana, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"luP" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/light/directional/east, +/obj/machinery/modular_computer/preset/command{ + dir = 8; + name = "Captain's PC"; + desc = "The Captain's personal computer, the keys are sticky with spilled soda." + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"luX" = ( +/obj/machinery/airlock_controller/incinerator_ordmix{ + pixel_x = -32 + }, +/obj/machinery/button/ignition/incinerator/ordmix{ + pixel_x = 24; + pixel_y = -5 + }, +/obj/machinery/button/door/incinerator_vent_ordmix{ + pixel_x = 24; + pixel_y = 5 + }, +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior{ + name = "Burn Chamber Interior Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) +"lvd" = ( +/obj/structure/table/wood, +/obj/item/radio/radio_mic{ + pixel_y = 7; + pixel_x = -4 + }, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"lve" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/directional/east, +/obj/structure/closet/secure_closet/medical3, +/obj/item/wrench/medical, +/turf/open/floor/iron/white, +/area/station/medical/office) +"lvg" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"lvl" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/workout) +"lvp" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/folder/blue, +/obj/item/pen/fountain, +/obj/item/stamp/captain, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"lvI" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"lvP" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"lvR" = ( +/obj/machinery/door/window/right/directional/north, +/obj/structure/table/wood/fancy/blue, +/obj/structure/sign/painting/library{ + pixel_y = -32 + }, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"lvV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/iron/dark, +/area/station/security/office) +"lwa" = ( +/obj/effect/spawner/random/structure/tank_holder, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"lwj" = ( +/obj/structure/cable/layer1, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"lwm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"lws" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"lwx" = ( +/obj/structure/cable, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/hop) +"lwy" = ( +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"lwL" = ( +/obj/structure/sign/warning/vacuum/external/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"lxc" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"lxi" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/sign/warning/electric_shock/directional/east, +/turf/open/floor/plating, +/area/station/engineering/gravity_generator) +"lxA" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"lxK" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/break_room) +"lxS" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"lyp" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Command - Head of Personnel's Office"; + name = "command camera" + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"lyr" = ( +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"lyv" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"lyw" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas/sechailer, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/flashlight/seclite{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/flashlight/seclite, +/obj/item/flashlight/seclite{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/head/helmet/toggleable/justice, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"lyC" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Atmospherics External Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/atmos/storage) +"lyI" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/plaque{ + icon_state = "L4" + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"lyP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"lyR" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/west, +/obj/effect/landmark/start/hangover, +/turf/open/floor/wood, +/area/station/service/library/private) +"lyT" = ( +/obj/item/radio/intercom/directional/north, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"lyV" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat_interior) +"lyX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"lzu" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) +"lzw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"lzT" = ( +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"lAc" = ( +/turf/closed/wall, +/area/station/service/library/lounge) +"lAg" = ( +/obj/structure/table/wood, +/obj/machinery/newscaster/directional/south, +/obj/machinery/fax{ + fax_name = "Law Office"; + name = "Law Office Fax Machine" + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"lAP" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 1 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"lAT" = ( +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"lAU" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 5 + }, +/obj/item/stack/sheet/plasteel{ + amount = 10; + pixel_y = 5; + pixel_x = 4 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron, +/area/station/engineering/storage) +"lAZ" = ( +/turf/open/floor/wood, +/area/station/service/library/lounge) +"lBg" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/railing, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"lBq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"lBu" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"lBB" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/cell_5k, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/turf/open/floor/plating, +/area/station/security/prison) +"lBC" = ( +/obj/structure/weightmachine/stacklifter, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/commons/fitness/recreation) +"lBH" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/shower) +"lBN" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"lBO" = ( +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/station/solars/port/aft) +"lBS" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/closet/firecloset{ + anchored = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"lBZ" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"lCa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"lCf" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"lCg" = ( +/obj/structure/closet/secure_closet/detective, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"lCn" = ( +/obj/item/radio/intercom{ + dir = 8; + pixel_x = -28 + }, +/obj/structure/closet/secure_closet/hop, +/obj/item/storage/box/ids, +/obj/item/storage/box/silver_ids, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"lCs" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/obj/structure/bed/roller, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"lCw" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/service/chapel) +"lCI" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"lCP" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"lDy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"lDG" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"lDM" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/station/maintenance/department/eva) +"lDO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"lDX" = ( +/turf/closed/wall/r_wall, +/area/station/command/bridge) +"lDZ" = ( +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"lEf" = ( +/turf/open/floor/carpet/blue, +/area/station/commons/dorms) +"lEp" = ( +/obj/structure/table, +/obj/effect/turf_decal/bot, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/mod/module/thermal_regulator, +/obj/item/stock_parts/cell/emproof{ + pixel_x = -4; + pixel_y = -1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"lEv" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"lEI" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=CHE"; + location = "AIE" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"lER" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"lEU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"lEZ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/white, +/area/station/science/research) +"lFa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"lFc" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/hop) +"lFp" = ( +/turf/closed/wall/r_wall, +/area/station/security/brig/entrance) +"lFz" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Paramedic Entrance" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/open/floor/iron/dark/textured, +/area/station/medical/medbay/central) +"lFJ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters{ + id = "robotics_garage"; + name = "Garage Shutters" + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/mechbay) +"lFY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"lGd" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/structure/sign/departments/engineering/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Engineering - Atmospherics Incinerator Access"; + name = "engineering camera" + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"lGp" = ( +/obj/effect/spawner/random/structure/furniture_parts, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"lGt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "library_desk_shutters"; + name = "Library Desk Shutters"; + dir = 1 + }, +/obj/structure/table/wood, +/obj/item/camera_film, +/turf/open/floor/iron/dark/textured, +/area/station/service/library/printer) +"lGD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Cargo Office Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port) +"lGI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Laundry Room" + }, +/obj/effect/landmark/navigate_destination{ + location = "Laundry Room" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms/laundry) +"lGK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/on/layer4, +/turf/open/floor/engine, +/area/station/security/execution) +"lGU" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"lGW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"lHd" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) +"lHg" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"lHi" = ( +/turf/closed/wall/r_wall, +/area/station/security/holding_cell) +"lHm" = ( +/obj/machinery/holopad, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"lHt" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"lHF" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/auxlab) +"lHR" = ( +/turf/closed/wall, +/area/station/maintenance/department/eva) +"lHY" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "Freeze Chamber" + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"lIt" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/obj/machinery/duct, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/prison/shower) +"lIF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"lIG" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 9 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = 8 + }, +/obj/structure/table/glass, +/obj/item/roller{ + pixel_y = 6 + }, +/obj/item/roller{ + pixel_y = 12 + }, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"lIQ" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"lIY" = ( +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"lIZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"lJj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"lJr" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - Atmospherics Nitrogen Chamber"; + name = "engineering camera" + }, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos) +"lJA" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"lJC" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"lJD" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"lJH" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"lJK" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/table_frame, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"lJU" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"lKe" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"lKk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "External Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"lKr" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"lKt" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/structure/closet/secure_closet/chemical, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry) +"lKu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/prison/workout) +"lKO" = ( +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"lKY" = ( +/turf/closed/wall, +/area/station/hallway/secondary/exit/departure_lounge) +"lLb" = ( +/obj/structure/cable, +/obj/machinery/power/smes, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) +"lLd" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"lLg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"lLh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"lLi" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/mirror/directional/north, +/obj/structure/sink/directional/south, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) +"lLj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security{ + name = "Visitation Observation" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/visit) +"lLk" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Security Office"; + name = "Security Office Fax Machine" + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"lLm" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"lLp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/carpet/green, +/area/station/commons/locker) +"lLr" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"lLG" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"lLH" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/door/airlock/external{ + name = "Satellite External Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"lLJ" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"lLK" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/eva) +"lLP" = ( +/obj/machinery/air_sensor/mix_tank, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) +"lLW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"lLZ" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/table/wood, +/turf/open/floor/wood/large, +/area/station/commons/dorms) +"lMb" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"lMk" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"lMl" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/stripes/box, +/obj/machinery/destructive_scanner, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"lMG" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"lMK" = ( +/obj/structure/cable/layer1, +/obj/structure/cable, +/obj/machinery/power/energy_accumulator/grounding_rod/anchored, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"lMT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"lNp" = ( +/obj/structure/table, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"lNr" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/airalarm/directional/east, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 5 + }, +/obj/item/stack/sheet/plasteel{ + amount = 10; + pixel_y = 5; + pixel_x = 4 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 5 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 5; + pixel_x = 4 + }, +/obj/item/stack/rods/fifty, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/engineering/storage_shared) +"lNw" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/south, +/obj/structure/sign/departments/court/directional/south, +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"lNx" = ( +/obj/effect/turf_decal/trimline/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"lNF" = ( +/obj/effect/decal/cleanable/glass, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"lNG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"lNK" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/landmark/start/chemist, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"lNO" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/white, +/area/station/science/research) +"lNW" = ( +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) +"lOo" = ( +/obj/machinery/power/energy_accumulator/tesla_coil, +/turf/open/floor/plating, +/area/station/engineering/main) +"lOA" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=1"; + location = "Medbay" + }, +/obj/structure/plasticflaps/opaque, +/turf/open/floor/iron/white, +/area/station/maintenance/department/medical) +"lOJ" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"lOM" = ( +/obj/structure/chair/pew/left{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"lOP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/chem_heater/withbuffer, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"lPf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"lPr" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"lPu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"lPX" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"lQc" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/structure/cable, +/obj/structure/closet/secure_closet/security/sec, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"lQw" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"lQB" = ( +/obj/structure/table, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/nineteen_nineteen, +/obj/item/storage/crayons, +/obj/item/storage/crayons, +/obj/machinery/light/small/built/directional/north, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"lQK" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Plasma Outlet Pump" + }, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump/layer4{ + dir = 8; + name = "Plasma to Turbine" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"lQO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"lRi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"lRp" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/cargo/sorting) +"lRy" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain) +"lRD" = ( +/turf/closed/wall, +/area/station/cargo/miningoffice) +"lSy" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/obj/item/stack/ore/titanium, +/obj/item/stack/ore/titanium, +/obj/item/stack/ore/titanium, +/obj/item/stack/ore/titanium, +/obj/item/stack/ore/titanium, +/turf/open/floor/plating, +/area/station/maintenance/port) +"lSO" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/dark/side, +/area/station/engineering/storage_shared) +"lTk" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"lTv" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/engineering/break_room) +"lTB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"lTH" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"lTJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"lTP" = ( +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"lUr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Bar Lounge Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/port) +"lUM" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white/left, +/obj/machinery/light_switch/directional/east{ + pixel_y = 6 + }, +/obj/item/radio/intercom/directional/east{ + pixel_y = -8 + }, +/obj/structure/closet/crate/silvercrate, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"lUP" = ( +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"lUT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Holodeck Control" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/fitness) +"lVb" = ( +/obj/vehicle/ridden/janicart, +/obj/item/key/janitor, +/turf/open/floor/iron/dark/side, +/area/station/service/janitor) +"lVh" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/cmo) +"lVj" = ( +/obj/machinery/button/door/directional/north{ + id = "dorm_1"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/wood/large, +/area/station/commons/dorms) +"lVu" = ( +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"lVI" = ( +/obj/structure/cable, +/turf/closed/wall/r_wall, +/area/station/security/brig) +"lVZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"lWn" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/cmo) +"lWp" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 6 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"lWA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"lWH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/theater) +"lWJ" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"lWL" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/obj/effect/landmark/start/psychologist, +/turf/open/floor/carpet/blue, +/area/station/medical/psychology) +"lXl" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/closet/toolcloset, +/obj/item/crowbar/large, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/storage_shared) +"lXu" = ( +/turf/open/floor/iron/white, +/area/station/science/lab) +"lXy" = ( +/obj/structure/closet/emcloset, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"lXL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"lXN" = ( +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"lYa" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics/garden) +"lYe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"lYg" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"lYj" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/vending/wardrobe/bar_wardrobe, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"lYp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "aisat-pathatmos-maint-passthrough" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/starboard/aft) +"lYr" = ( +/obj/structure/sign/warning/no_smoking/directional/south, +/obj/machinery/light/directional/south, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"lYB" = ( +/obj/item/radio/intercom/directional/south, +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/office) +"lYL" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/engineering/main) +"lYM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/photocopier, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/office) +"lYQ" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/computer/crew{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/office) +"lZk" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"lZs" = ( +/turf/closed/wall, +/area/station/security/office) +"lZu" = ( +/obj/effect/turf_decal/bot, +/obj/structure/sign/poster/official/random/directional/south, +/obj/structure/table, +/obj/item/stack/rods/fifty, +/obj/effect/spawner/random/engineering/tool, +/obj/item/storage/box/lights/mixed, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"lZv" = ( +/obj/structure/table/reinforced, +/obj/item/stack/sheet/plasteel/twenty, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"lZx" = ( +/obj/docking_port/stationary{ + dir = 8; + dwidth = 11; + height = 24; + name = "SS13: Auxiliary Dock, Station-Port"; + shuttle_id = "whiteship_home"; + width = 35 + }, +/turf/open/space/basic, +/area/space) +"lZA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"lZD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/main) +"lZJ" = ( +/obj/structure/chair/comfy/beige{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"lZP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"lZR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/on, +/turf/open/floor/engine, +/area/station/security/execution) +"lZS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Courtroom" + }, +/obj/effect/landmark/navigate_destination/court, +/turf/open/floor/iron/dark/textured, +/area/station/security/courtroom) +"lZV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"mac" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/commons/locker) +"mai" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/research/abandoned) +"mak" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/sheet/mineral/plasma, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"mar" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/stripes, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/door/window/brigdoor/right/directional/south{ + name = "Command Chair"; + req_access = list("command") + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"maz" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 5 + }, +/turf/open/space/basic, +/area/space/nearstation) +"maC" = ( +/turf/open/floor/iron/dark, +/area/station/commons/fitness) +"maG" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/office) +"maJ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/table, +/obj/item/phone, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/break_room) +"maL" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating/reinforced, +/area/station/maintenance/department/science) +"maP" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"maX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"mbo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"mbp" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/engineering/storage_shared) +"mbx" = ( +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"mbE" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/machinery/camera/autoname/directional/south, +/obj/structure/table, +/obj/item/radio/off{ + pixel_x = -6 + }, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 6 + }, +/obj/item/screwdriver{ + pixel_y = 10 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"mbF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"mbK" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/head/beret, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"mbN" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 10 + }, +/obj/structure/sign/departments/cargo/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/cargo/lobby) +"mbP" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"mbU" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/chair/pew/right{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"mcd" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/right/directional/south{ + name = "Security Checkpoint Desk"; + req_access = list("security") + }, +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/north{ + name = "Security Checkpoint Desk" + }, +/obj/structure/desk_bell{ + pixel_x = 7; + pixel_y = 7 + }, +/obj/machinery/door/poddoor/shutters{ + id = "arrivals_security_post"; + name = "Security Post Shutters"; + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"mcn" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters{ + id = "cargo_security_post"; + name = "Security Post Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) +"mcz" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = 8 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"mcG" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/clothing/mask/gas, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"mcP" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/machinery/airalarm/all_access{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"mcY" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "sec_lockers"; + name = "Locker Room Shutters" + }, +/turf/open/floor/plating, +/area/station/security/lockers) +"mdk" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"mdp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/atmos/storage) +"mdw" = ( +/obj/machinery/shower/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"mdC" = ( +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/storage) +"mdZ" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Engineering - Secure Storage" + }, +/obj/machinery/field/generator, +/turf/open/floor/plating, +/area/station/engineering/main) +"meb" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/lockers) +"meh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"mei" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/shower) +"mej" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"meB" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/leafy, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/grass, +/area/station/command/bridge) +"meN" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/obj/effect/landmark/start/head_of_security, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"meR" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/machinery/atmospherics/miner/plasma, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"meT" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/mix_input{ + dir = 8 + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) +"mfd" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/structure/closet/crate/hydroponics, +/obj/item/shovel/spade, +/obj/item/seeds/tower, +/obj/item/seeds/tower, +/obj/item/seeds/tower, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"mfe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction{ + dir = 2 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"mft" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"mfu" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"mfv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"mgd" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage" + }, +/obj/machinery/recycler, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"mgG" = ( +/obj/machinery/camera/directional/east{ + c_tag = "AI Sat - External, Southwest"; + network = list("minisat"); + start_active = 1 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"mgQ" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/loading_area, +/turf/open/floor/iron/dark/side, +/area/station/commons/storage/primary) +"mgY" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"mhc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"mhf" = ( +/obj/structure/cable, +/obj/machinery/computer/security/hos, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"mht" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/radio, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"mhA" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"mhD" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"mhM" = ( +/obj/machinery/light/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/firecloset, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"mhS" = ( +/obj/machinery/corral_corner{ + mapping_id = "2" + }, +/obj/machinery/light/neon_lining{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"mih" = ( +/obj/machinery/light/directional/east, +/obj/machinery/power/energy_accumulator/tesla_coil, +/turf/open/floor/plating, +/area/station/engineering/main) +"mij" = ( +/obj/machinery/grill, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"min" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "rd_office"; + name = "RD Office Privacy Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/rd) +"miv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) +"miz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"miL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/roller, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"miM" = ( +/obj/machinery/button/door/directional/west{ + id = "external_engine_storage"; + name = "External Engine Storage Control"; + req_access = list("engineering") + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark/smooth_large, +/area/station/engineering/main) +"miX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"mjw" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/effect/spawner/random/bureaucracy/folder{ + pixel_y = 6 + }, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"mjz" = ( +/turf/open/space/basic, +/area/station/cargo/mining/asteroid_magnet) +"mjA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/obj/machinery/button/door/directional/north{ + pixel_x = 6; + id = "chem_factory_shutters"; + req_access = list("pharmacy") + }, +/obj/structure/cable, +/obj/machinery/camera/directional/north{ + c_tag = "Medical - Chemistry Factory"; + name = "medical camera"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"mjC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"mjR" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/button/door/directional/west{ + id = "robotics_sci_shutters"; + name = "Robotics Privacy Shutters Control"; + req_access = list("robotics") + }, +/obj/structure/table, +/obj/machinery/ecto_sniffer, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"mkl" = ( +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/machinery/computer/mecha, +/turf/open/floor/carpet/purple, +/area/station/command/heads_quarters/rd) +"mkt" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/machinery/status_display/ai/directional/west, +/obj/structure/table, +/obj/machinery/computer/security/telescreen/minisat{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"mkx" = ( +/obj/structure/table/wood, +/obj/item/phone{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/machinery/recharger{ + pixel_x = -4; + pixel_y = -1 + }, +/obj/item/paper_bin{ + pixel_y = 4; + pixel_x = 9 + }, +/obj/item/stamp/hos{ + pixel_x = 10; + pixel_y = 6 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"mky" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"mkE" = ( +/obj/structure/disposalpipe/sorting/mail, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/mail_sorting/engineering/general, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"mkG" = ( +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"mkI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Prison Garden" + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/garden) +"mkR" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"mkV" = ( +/obj/machinery/power/tracker, +/obj/structure/cable, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/port/fore) +"mkW" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/structure/closet/secure_closet/hydroponics, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics) +"mlb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/directional/east{ + c_tag = "AI Sat - Foyer"; + name = "satellite camera"; + network = list("minisat") + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"mld" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/item/extinguisher, +/obj/item/tank/internals/oxygen/red, +/obj/item/clothing/mask/gas, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"mle" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"mlj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"mlt" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = 10 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"mlJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"mlK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"mlN" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"mmf" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"mmp" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"mmv" = ( +/obj/item/radio/intercom/directional/east, +/obj/structure/chair/sofa/right/maroon{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/wood, +/area/station/commons/locker) +"mmy" = ( +/obj/machinery/camera/emp_proof/directional/west{ + c_tag = "Engineering - External Particle Accelerator, West"; + name = "engineering camera" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"mmV" = ( +/obj/machinery/light/directional/north, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_y = 5 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/secondary/service) +"mmX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{ + dir = 8 + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) +"mnl" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/machinery/light/directional/south, +/obj/structure/table/glass, +/obj/item/storage/fancy/cigarettes{ + pixel_x = 2 + }, +/obj/item/lighter{ + pixel_x = -7; + pixel_y = 6 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"mnx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"mnA" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"mnW" = ( +/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"mnY" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/gulag_item_reclaimer{ + pixel_y = 30 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"mog" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/curtain/cloth, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/science/robotics/lab) +"moo" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/window/brigdoor/security/holding{ + id = "Holding Cell"; + name = "Holding Cell" + }, +/turf/open/floor/iron/dark, +/area/station/security/holding_cell) +"mov" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/plumbed{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"moy" = ( +/obj/structure/table/wood, +/obj/item/toy/plush/lizard_plushie/green, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"moK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"moS" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/engineering/break_room) +"mpi" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/docking/directional/east, +/turf/open/space, +/area/space/nearstation) +"mpo" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"mpw" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/machinery/computer/scan_consolenew{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"mpz" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"mpP" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/virologist, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"mpQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/light/directional/south, +/obj/machinery/status_display/evac/directional/south, +/obj/machinery/medical_kiosk, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"mpW" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/warning, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"mpY" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron/dark/side, +/area/station/engineering/break_room) +"mqm" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"mqu" = ( +/obj/machinery/holopad, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/hop) +"mqG" = ( +/obj/structure/cable, +/obj/machinery/power/tracker, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/port/aft) +"mqN" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"mqW" = ( +/obj/structure/chair/comfy/black, +/obj/effect/landmark/start/head_of_security, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"mqX" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"mqZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/service/chapel/funeral) +"mra" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Security Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"mri" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 8; + piping_layer = 2 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"mrl" = ( +/obj/machinery/door/poddoor/incinerator_atmos_main, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"mrv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Departures Security Post" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron/dark/textured, +/area/station/security/checkpoint/escape) +"mrB" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/filingcabinet, +/turf/open/floor/iron/white, +/area/station/science/explab) +"mrF" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/service/hydroponics/garden) +"mrG" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"mrI" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) +"mrM" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/computer/atmos_control/air_tank{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"mrP" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/hos) +"mrT" = ( +/obj/structure/table, +/obj/item/hfr_box/body/waste_output, +/obj/item/hfr_box/body/moderator_input, +/obj/item/hfr_box/body/fuel_input, +/obj/item/hfr_box/body/interface, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"mrU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"mrW" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"mrX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/suit_storage_unit/cmo, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) +"mse" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/iron/dark/smooth_large, +/area/station/tcommsat/computer) +"msk" = ( +/obj/structure/cable, +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/iron, +/area/station/engineering/main) +"mst" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "External Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"msF" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/machinery/conveyor{ + dir = 9; + id = "QMLoad2" + }, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/cargo/storage) +"msH" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/engineering/break_room) +"msO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/port) +"msS" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/table/optable, +/turf/open/floor/iron/white, +/area/station/security/medical) +"mta" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/reagent_dispensers/wall/peppertank/directional/east, +/obj/structure/table/wood, +/obj/item/storage/box/seccarts{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/storage/box/deputy{ + pixel_x = 6 + }, +/obj/item/taperecorder{ + pixel_x = 4 + }, +/obj/item/toy/figure/hos{ + pixel_x = -9; + pixel_y = 7 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"mtc" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/engineering/transit_tube) +"mtH" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2{ + dir = 5 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"mtN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/library/private) +"mug" = ( +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"mup" = ( +/obj/machinery/chem_dispenser, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"muu" = ( +/obj/machinery/light/directional/east, +/obj/structure/sign/warning/pods/directional/east, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/maintenance/department/security) +"muy" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"muz" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/machinery/status_display/ai/directional/south, +/obj/machinery/conveyor{ + dir = 8; + id = "QMLoad2" + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/storage) +"muB" = ( +/obj/structure/cable, +/obj/machinery/power/tracker, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/starboard/aft) +"muG" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/machinery/status_display/ai/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"muI" = ( +/obj/machinery/power/turbine/turbine_outlet{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"muO" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/poster/random_official, +/obj/item/poster/random_official{ + pixel_y = 7 + }, +/obj/item/poster/random_official{ + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"mvb" = ( +/obj/machinery/button/door/directional/south{ + id = "dorm_2"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/carpet/blue, +/area/station/commons/dorms) +"mvc" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"mvh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"mvk" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/table, +/obj/item/paper_bin, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/break_room) +"mvr" = ( +/obj/structure/flora/rock/pile/jungle/large/style_random, +/obj/structure/flora/tree/jungle/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"mvA" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/computer/robotics, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"mvF" = ( +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/random/contraband/prison, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/security/prison) +"mvN" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/corner, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"mvS" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/storage/backpack/duffelbag/sec/surgery{ + pixel_y = 5 + }, +/obj/item/clothing/mask/balaclava, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 5 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"mwc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"mwn" = ( +/obj/machinery/power/energy_accumulator/grounding_rod, +/turf/open/floor/plating, +/area/station/engineering/main) +"mws" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/gateway) +"mwK" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"mwQ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/sign/poster/official/random/directional/west, +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"mxf" = ( +/obj/structure/table, +/obj/item/raw_anomaly_core/random{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/raw_anomaly_core/random{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/item/raw_anomaly_core/random, +/turf/open/floor/iron, +/area/station/science/ordnance) +"mxi" = ( +/obj/structure/foamedmetal, +/turf/open/floor/plating, +/area/station/maintenance/department/eva) +"mxn" = ( +/turf/closed/wall, +/area/station/medical/break_room) +"mxo" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/explab) +"mxr" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/computer/crew{ + dir = 8 + }, +/obj/machinery/button/door/directional/east{ + pixel_y = 6; + id = "cmo_shutters"; + name = "CMO Office Shutters Control"; + req_access = list("cmo") + }, +/obj/machinery/button/door/directional/east{ + pixel_y = -6; + id = "med_lockdown"; + name = "Medical Lockdown" + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) +"mxu" = ( +/obj/structure/closet/wardrobe/white, +/obj/item/clothing/shoes/jackboots, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/cup/glass/bottle/vodka/badminka, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"mxw" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/miningoffice) +"mxy" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/table/glass, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"mxN" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"mxZ" = ( +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"myj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"myr" = ( +/obj/machinery/light/directional/west, +/obj/structure/chair/stool/directional/north, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"myv" = ( +/obj/structure/cable, +/obj/machinery/power/solar{ + id = "portsolar"; + name = "Port Solar Array" + }, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/port/aft) +"myJ" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"myR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"mzn" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/cable, +/obj/structure/bed/pod{ + desc = "An old medical bed, just waiting for replacement with something up to date."; + name = "medical bed" + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"mzp" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/machinery/light_switch/directional/west, +/obj/structure/table/glass, +/obj/item/cultivator, +/obj/item/hatchet, +/obj/item/crowbar/red, +/obj/item/plant_analyzer, +/obj/item/reagent_containers/cup/watering_can, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics/garden) +"mzq" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"mzF" = ( +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"mzK" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) +"mzR" = ( +/obj/effect/turf_decal/siding/thinplating/corner, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"mzY" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"mAd" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/computer/operating{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"mAr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/office) +"mAB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"mAE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"mAO" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"mAR" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/status_display/evac/directional/west, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"mBa" = ( +/obj/structure/chair/stool/bar/directional/south, +/turf/open/floor/carpet/green, +/area/station/maintenance/starboard/aft) +"mBp" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/processor, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"mBL" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 9 + }, +/obj/machinery/light/directional/north, +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"mBX" = ( +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port) +"mCc" = ( +/obj/effect/turf_decal/trimline/green/filled/corner, +/obj/effect/turf_decal/trimline/green/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"mCg" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"mCr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"mCt" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/cable, +/obj/machinery/power/terminal, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"mCK" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) +"mDe" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/plaque{ + icon_state = "L12" + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"mDv" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine) +"mDR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"mEc" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"mEf" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"mEg" = ( +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"mEl" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"mEs" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"mEy" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"mEH" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/cable, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"mEQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/shower) +"mEZ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"mFi" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/station/security/medical) +"mFK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"mFR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/box/corners, +/obj/machinery/smartfridge/chemistry/preloaded, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry) +"mFS" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/commons/fitness) +"mFY" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark, +/area/station/medical/paramedic) +"mGb" = ( +/turf/open/floor/iron/white, +/area/station/medical/virology) +"mGg" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/structure/closet/crate/hydroponics, +/obj/machinery/light/small/directional/south, +/obj/item/paper/guides/jobs/hydroponics, +/obj/item/seeds/onion, +/obj/item/seeds/garlic, +/obj/item/seeds/potato, +/obj/item/seeds/tomato, +/obj/item/seeds/carrot, +/obj/item/seeds/grass, +/obj/item/seeds/ambrosia, +/obj/item/seeds/wheat, +/obj/item/seeds/pumpkin, +/obj/effect/spawner/random/contraband/prison, +/obj/item/seeds/tower, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"mGu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"mGB" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Security External Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/dark/textured_large, +/area/station/security/lockers) +"mGI" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"mHm" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/tcommsat/computer) +"mHp" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/table/glass, +/obj/item/clothing/glasses/hud/health, +/obj/item/toy/figure/cmo{ + pixel_y = 8; + pixel_x = -4 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) +"mHw" = ( +/obj/machinery/light/directional/north, +/obj/machinery/airalarm/directional/north, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/construction) +"mHA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Bitrunning Den" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/turf/open/floor/iron/dark/textured, +/area/station/bitrunning/den) +"mHO" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"mHQ" = ( +/turf/closed/wall, +/area/station/service/janitor) +"mIf" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/iron/dark/side, +/area/station/engineering/break_room) +"mIh" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"mIj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Arrivals" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/port) +"mIl" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/warning, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"mIF" = ( +/obj/effect/turf_decal/stripes/box, +/obj/machinery/telecomms/hub/preset, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"mIK" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/structure/sink/kitchen/directional/south, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"mIL" = ( +/obj/machinery/button/door/directional/east{ + id = "custodial_shutters"; + name = "Custodial Shutters Control"; + req_access = list("janitor") + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/janitor) +"mIP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"mIU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"mJa" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/wood, +/area/station/commons/locker) +"mJo" = ( +/obj/machinery/space_heater, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"mJw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"mJB" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/landmark/start/geneticist, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"mJS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/main) +"mKa" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"mKC" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/commons/storage/primary) +"mKE" = ( +/obj/machinery/shower/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/shower) +"mKW" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"mKZ" = ( +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/newscaster/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/service/hydroponics) +"mLe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table, +/obj/effect/decal/cleanable/blood/old, +/obj/item/radio{ + desc = "An old handheld radio. You could use it, if you really wanted to."; + icon_state = "radio"; + name = "old radio" + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"mLh" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/flasher/directional/west{ + id = "visitation_visitor_flash" + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"mLH" = ( +/turf/closed/wall/r_wall, +/area/station/security/checkpoint/engineering) +"mLN" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/reinforced, +/obj/item/pinpointer/nuke, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"mLW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"mMm" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/computer/communications{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"mMt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"mMv" = ( +/obj/machinery/button/flasher{ + id = "hopflash"; + pixel_x = 6; + pixel_y = 34 + }, +/obj/machinery/button/door/directional/north{ + pixel_x = 6; + id = "hop"; + name = "Privacy Shutters Control"; + req_access = list("hop") + }, +/obj/machinery/button/door/directional/north{ + pixel_x = -6; + id = "hop_queue"; + name = "Queue Shutters Control"; + req_access = list("hop") + }, +/obj/machinery/light_switch/directional/north{ + pixel_x = -4; + pixel_y = 34 + }, +/obj/machinery/pdapainter, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"mMQ" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/plaque{ + icon_state = "L10" + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"mMS" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 2 + }, +/obj/effect/mapping_helpers/mail_sorting/science/experimentor_lab, +/turf/open/floor/iron/white, +/area/station/science/explab) +"mMY" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"mNd" = ( +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/port) +"mNq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"mNt" = ( +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"mNy" = ( +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"mNF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/dark_red/arrow_ccw{ + dir = 1 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"mNW" = ( +/turf/open/floor/iron/freezer, +/area/station/science/xenobiology) +"mOc" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/hallway/secondary/service) +"mOg" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Server Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/rd, +/turf/open/floor/iron/dark/textured, +/area/station/science/server) +"mOs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table_frame, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"mOv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/machinery/door/poddoor/preopen{ + id = "xenobiomain"; + name = "Containment Blast Door" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"mOB" = ( +/obj/machinery/door/firedoor, +/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/commons/dorms/laundry) +"mOH" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/structure/sign/departments/maint/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"mOO" = ( +/obj/machinery/camera/emp_proof/directional/south{ + name = "engineering camera"; + c_tag = "Engineering - External Particle Accelerator, South" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"mOP" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/status_display/evac/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/structure/chair/pew/right{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"mOT" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/storage) +"mPa" = ( +/obj/machinery/light_switch/directional/north{ + pixel_x = -5 + }, +/obj/machinery/firealarm/directional/north{ + pixel_x = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"mPg" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"mPm" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"mPL" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/structure/chair/sofa/corp/left{ + color = "#7fb3d5"; + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"mQo" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"mQA" = ( +/obj/structure/chair/sofa/corp{ + color = "#7fb3d5"; + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/carpet/cyan, +/area/station/ai_monitored/turret_protected/ai_upload) +"mQF" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible/layer2, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) +"mQM" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/storage/tech) +"mQR" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning, +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"mQU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"mQZ" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/commons/dorms/laundry) +"mRi" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"mRp" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clipboard{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_y = 5; + pixel_x = -3 + }, +/obj/item/toy/figure/janitor{ + pixel_x = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/janitor) +"mRx" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"mRD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Gambling Den" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/maintenance/starboard/aft) +"mRG" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"mRL" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"mRM" = ( +/obj/machinery/status_display/ai/directional/west, +/turf/open/floor/iron/vaporwave, +/area/station/command/heads_quarters/rd) +"mRQ" = ( +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/item/food/grown/banana, +/obj/machinery/light/small/directional/west, +/turf/open/floor/grass, +/area/station/medical/virology) +"mSx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"mSO" = ( +/obj/machinery/skill_station, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"mSP" = ( +/obj/structure/lattice/catwalk, +/obj/structure/sign/departments/security/directional/south, +/obj/structure/marker_beacon/burgundy, +/turf/open/space/basic, +/area/space/nearstation) +"mTj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness) +"mTk" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/bucket{ + pixel_y = 6; + pixel_x = -4 + }, +/obj/item/reagent_containers/cup/bucket{ + pixel_y = 8; + pixel_x = 9 + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/service/janitor) +"mTp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/bathroom{ + name = "Bathroom" + }, +/obj/effect/landmark/navigate_destination{ + location = "Bathroom" + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/commons/toilet/restrooms) +"mTC" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/requests_console/auto_name/directional/north{ + department = "Virology"; + name = "Pathology Requests Console"; + receive_ore_updates = 1 + }, +/obj/machinery/computer/records/pathology, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"mTR" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"mTT" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research/glass{ + name = "RaD Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark/textured, +/area/station/science/lab) +"mTW" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 10 + }, +/obj/structure/table/wood, +/obj/item/gavelblock, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"mUa" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/obj/structure/table, +/obj/item/clothing/glasses/blindfold, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"mUw" = ( +/turf/open/floor/wood, +/area/station/service/lawoffice) +"mUA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/highsecurity{ + name = "Gravity Generator Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/turf/open/floor/iron/textured, +/area/station/engineering/gravity_generator) +"mUF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/mob/living/carbon/human/species/monkey, +/turf/open/floor/grass, +/area/station/medical/virology) +"mUJ" = ( +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Captain's Desk"; + req_access = list("captain") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law, +/obj/effect/spawner/random/entertainment/coin, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"mUM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"mUT" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"mUZ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) +"mVa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "The Tider Lounge"; + desc = "This former locker room has been taken over by a 'respectable' group of 'gentle''men' who identify themselves as the 'Tophat Clan''" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/locker) +"mVt" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/checkpoint/science) +"mVx" = ( +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"mVD" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"mVH" = ( +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"mVT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"mVX" = ( +/obj/effect/turf_decal/trimline/neutral/filled/end{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/machinery/computer/shuttle/mining/common{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"mWa" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"mWi" = ( +/turf/closed/wall, +/area/station/security/prison/workout) +"mWn" = ( +/turf/open/floor/iron/dark/corner, +/area/station/commons/fitness/recreation) +"mWp" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"mWC" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"mWH" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/biogenerator, +/obj/machinery/door/window/right/directional/south{ + name = "Public Biogenerator"; + req_access = list("hydroponics") + }, +/obj/machinery/door/window/right/directional/north{ + name = "Public Biogenerator" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "hydroponics_shutters"; + name = "Hydroponics Shutters" + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/hydroponics) +"mWJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/medical_kiosk, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"mXb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"mXe" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/taperecorder, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"mXg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Apothecary" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/pharmacy, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"mXr" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/closet/secure_closet/medical2, +/turf/open/floor/iron/white, +/area/station/maintenance/port/fore) +"mXA" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/item/radio/intercom/directional/south, +/obj/machinery/modular_computer/preset/civilian{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"mXB" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/structure/sign/departments/security/directional/east, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/fore) +"mXK" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"mXM" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"mXS" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/light/directional/south, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/engineering/storage_shared) +"mXX" = ( +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/captain/private) +"mXY" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"mYy" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"mYC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/moisture_trap, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"mYI" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"mYW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"mYY" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"mZc" = ( +/turf/closed/wall, +/area/station/maintenance/department/science) +"mZp" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/sign/warning/vacuum/external/directional/south, +/obj/machinery/computer/shuttle/mining{ + dir = 8 + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/miningoffice) +"mZv" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/mob/living/basic/butterfly, +/turf/open/floor/grass, +/area/station/command/bridge) +"mZG" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"mZM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/table, +/obj/effect/spawner/random/clothing/gloves, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/turf/open/floor/iron/white, +/area/station/maintenance/department/medical) +"mZO" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/modular_computer/preset/cargochat/science{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"mZT" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/dna_scannernew, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"nai" = ( +/obj/machinery/duct, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"nak" = ( +/obj/structure/disposalpipe/junction/flip, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"nax" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/carpet/neon/simple/green, +/area/station/science/xenobiology) +"naB" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/sign/poster/official/periodic_table/directional/west, +/obj/structure/chemical_manufacturer, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"naG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/photocopier, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"naK" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east{ + dir = 6 + }, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"naL" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"nbm" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"nbF" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) +"nbI" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high/empty, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/engineering/break_room) +"nbP" = ( +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"ncd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"nck" = ( +/obj/machinery/air_sensor/oxygen_tank, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos) +"ncq" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 5 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"nct" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Construction Zone" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/aux_base, +/turf/open/floor/iron/dark/textured, +/area/station/construction/mining/aux_base) +"ncA" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/table, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/miningoffice) +"ndh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"ndi" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/service/hydroponics/garden) +"ndl" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"ndm" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/tank_holder/oxygen/yellow, +/turf/open/floor/iron, +/area/station/engineering/main) +"ndr" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/chair/pew{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"ndy" = ( +/obj/structure/lattice, +/obj/effect/spawner/random/structure/grille, +/turf/open/space, +/area/space/nearstation) +"ndE" = ( +/obj/structure/flora/bush/jungle/c/style_random, +/mob/living/carbon/human/species/monkey, +/turf/open/floor/grass, +/area/station/medical/virology) +"ndK" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 9 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/table/glass, +/obj/item/storage/pill_bottle/mutadone{ + pixel_x = 8; + pixel_y = 12 + }, +/obj/item/storage/pill_bottle/mannitol{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/folder/white{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/pen{ + pixel_x = -4; + pixel_y = 7 + }, +/turf/open/floor/iron/white, +/area/station/science/genetics/cloning) +"ndM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"ndQ" = ( +/obj/structure/table, +/obj/item/folder/red, +/obj/item/taperecorder, +/turf/open/floor/iron/textured, +/area/station/security/interrogation) +"neo" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark/side, +/area/station/commons/storage/primary) +"nep" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"nev" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/virology/glass{ + name = "Pathology Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/medical/virology) +"neG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"neW" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"nfa" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/machinery/power/smes/engineering, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"nfc" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"nfj" = ( +/obj/effect/spawner/random_bar/box, +/turf/closed/wall, +/area/station/maintenance/port) +"nfm" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"nfq" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/machinery/chicken_grinder, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/service/hydroponics) +"nfr" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/requests_console/directional/north{ + department = "Mining"; + name = "Mining Requests Console"; + supplies_requestable = 1 + }, +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/miningoffice) +"nft" = ( +/obj/structure/table/wood, +/obj/item/toy/plush/nukeplushie, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"nfv" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "bitrunner_den"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/bitrunning/den) +"nfw" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"nfz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/banner/science/mundane, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"nfR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible/layer4, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"nga" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/ai_upload) +"ngb" = ( +/obj/structure/table, +/obj/item/stack/cable_coil{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"ngl" = ( +/obj/item/target/alien, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"ngu" = ( +/obj/machinery/airalarm/directional/west, +/turf/open/floor/wood, +/area/station/medical/psychology) +"ngz" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) +"ngA" = ( +/obj/item/radio/intercom/prison/directional/east, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"ngK" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/turf/closed/wall, +/area/station/maintenance/starboard/aft) +"ngM" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/requests_console/directional/north{ + anon_tips_receiver = 1; + assistance_requestable = 1; + department = "Security"; + name = "Security Requests Console" + }, +/obj/machinery/computer/records/security{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"ngX" = ( +/obj/structure/table/glass, +/obj/item/restraints/handcuffs/cable/zipties, +/obj/item/reagent_containers/blood/random, +/turf/open/floor/iron/white, +/area/station/maintenance/port/fore) +"nha" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"nhn" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ + name = "Burn Chamber Exterior Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"nhq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"nhr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/checker, +/area/station/science/lab) +"nhL" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/wood, +/area/station/service/library/private) +"nhS" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/firealarm/directional/north{ + pixel_x = -5 + }, +/obj/machinery/light_switch/directional/north{ + pixel_x = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"nhT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/item/radio/intercom/directional/south, +/obj/structure/table/glass, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = 6 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"nia" = ( +/turf/closed/wall, +/area/station/solars/starboard/aft) +"nil" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"nir" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"niu" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"niA" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/motion/directional/south{ + c_tag = "Vault"; + network = list("vault") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"niB" = ( +/obj/structure/girder/reinforced, +/obj/structure/grille, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"niD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/mapping_helpers/dead_body_placer, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"niF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Mining Office Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/turf/open/floor/plating, +/area/station/maintenance/port) +"niG" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"niO" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"niU" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"njj" = ( +/turf/closed/wall, +/area/station/science/explab) +"njn" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"njN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"njX" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/neutral/corner, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"nkb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/baseturf_helper/reinforced_plating, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"nke" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "prison_gate"; + name = "Prison Blast Door" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/security/brig) +"nkf" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"nki" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/storage) +"nku" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/soap/nanotrasen, +/obj/item/storage/box/hug{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/item/toy/plush/carpplushie{ + name = "Jeff"; + desc = "An adorable stuffed toy that resembles a space carp. The warden was given Jeff to soothe rampant anger issues" + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"nkv" = ( +/obj/effect/turf_decal/trimline/purple/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/structure/sign/poster/official/random/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"nkw" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/lab) +"nkU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"nld" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port) +"nle" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/modular_computer/preset/cargochat/medical{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/office) +"nlg" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"nlh" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "apothecary_shutters"; + name = "Apothecary Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/medical/pharmacy) +"nli" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"nlj" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"nlr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/brig/entrance) +"nlD" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/window/right/directional/east{ + name = "Courtroom"; + req_access = list("court") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"nlI" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"nlU" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"nmf" = ( +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"nmm" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"nmu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters{ + id = "tele_shutter"; + name = "Teleporter Access Shutter"; + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/command/teleporter) +"nmw" = ( +/obj/machinery/hydroponics/soil, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"nmY" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/destructible/cult/item_dispenser/archives/library, +/obj/item/book/codex_gigas, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"nns" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/checkpoint/supply) +"nnv" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"nnB" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Auxiliary Base Construction" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/aux_base, +/obj/effect/landmark/navigate_destination{ + location = "Auxiliary Base Construction" + }, +/turf/open/floor/iron/dark/textured, +/area/station/construction/mining/aux_base) +"nnE" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"nnG" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/prison/rec) +"nnR" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Security - Cell 4"; + name = "security camera" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"nnZ" = ( +/obj/item/radio/intercom/directional/north, +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/obj/item/crowbar/red, +/obj/item/storage/box/mousetraps, +/obj/item/storage/box/mousetraps, +/obj/item/restraints/legcuffs/beartrap, +/obj/item/restraints/legcuffs/beartrap, +/obj/item/restraints/legcuffs/beartrap, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/janitor) +"noh" = ( +/obj/effect/spawner/random/structure/grille, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) +"nom" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/machinery/light_switch/directional/south{ + pixel_x = -8 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"noJ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Break Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/medical/break_room) +"noM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"noN" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/button/door/directional/west{ + id = "toilet_2"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/structure/toilet{ + pixel_y = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"noO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"npa" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"npm" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 3; + pixel_x = -3 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 3; + pixel_x = 3 + }, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 3; + pixel_x = -2 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/sheet/plasteel/twenty, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"npo" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"npz" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"nqm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/security/prison/workout) +"nqD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"nqE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/graffiti, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"nqG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"nqN" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"nrd" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/directional/north, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"nrh" = ( +/obj/structure/chair/sofa/bench/right, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"nrk" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/storage_shared) +"nrl" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"nrr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/obj/item/clothing/mask/gas/clown_hat, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"nrz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"nrA" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/item/radio/intercom/directional/south, +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/obj/item/stack/sheet/mineral/plasma, +/obj/item/stack/sheet/mineral/plasma{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"nrJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"nrN" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/aft) +"nrX" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/atm, +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/locker) +"nsc" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/machinery/conveyor/inverted{ + dir = 6; + id = "QMLoad2" + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/storage) +"nsd" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"nse" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/primary/central) +"nsk" = ( +/obj/structure/bookcase{ + name = "Forbidden Knowledge" + }, +/obj/structure/sign/painting/library_private{ + pixel_y = -32 + }, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"nsn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) +"nst" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/main) +"nsA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"nsB" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"nta" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"ntc" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/freezerchamber) +"nte" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"ntz" = ( +/obj/structure/sign/warning/vacuum/external/directional/south, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"ntB" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/freezerchamber) +"ntE" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"ntG" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/leavy/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"ntI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/table/reinforced, +/obj/machinery/computer/security/telescreen{ + name = "Test Chamber Monitor"; + network = list("xeno"); + pixel_y = 2 + }, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"ntM" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"nub" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"nue" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"nul" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/lavendergrass/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"nus" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/hallway/secondary/service) +"nuv" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/eva) +"nuA" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"nuN" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/shower/directional/east, +/turf/open/floor/iron/white/textured, +/area/station/medical/medbay/central) +"nuS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"nuY" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"nvj" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/closet/firecloset/full, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"nvr" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/power/floodlight, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry) +"nvx" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/red/corner, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark, +/area/station/security/office) +"nvX" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"nwa" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"nwe" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/external{ + name = "Port Docking Bay 2" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/entry) +"nwj" = ( +/obj/machinery/light/directional/south, +/obj/structure/table/wood, +/obj/item/paper_bin/carbon{ + pixel_y = 4 + }, +/obj/effect/spawner/random/bureaucracy/folder{ + pixel_y = 6 + }, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_y = 6 + }, +/turf/open/floor/carpet/blue, +/area/station/medical/psychology) +"nwu" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"nwz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"nwB" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"nwM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"nxf" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/storage/tech) +"nxh" = ( +/turf/open/floor/iron, +/area/station/cargo/storage) +"nxm" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"nxn" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"nxr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"nxw" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/rnd_secure_all, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"nxB" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"nxD" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/carpet/blue, +/area/station/security/prison/safe) +"nxF" = ( +/turf/closed/wall, +/area/station/medical/patients_rooms/room_a) +"nxG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"nxH" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) +"nxU" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - Atmospherics Plasma Chamber"; + name = "engineering camera" + }, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"nxW" = ( +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"nyc" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"nyn" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/iron/dark, +/area/station/science/server) +"nyH" = ( +/turf/open/floor/wood, +/area/station/commons/dorms) +"nyI" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/holopad, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat_interior) +"nyL" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"nyT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer4{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"nyU" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/table/glass, +/obj/item/storage/box/beakers, +/obj/item/storage/box/syringes{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/machinery/door/window/right/directional/west{ + name = "Miscellaneous Medical Supplies"; + req_access = list("medical") + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"nyW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/aft) +"nzn" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"nzx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"nzC" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Security - Cell 1"; + name = "security camera" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"nzH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"nzR" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"nzT" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"nzW" = ( +/mob/living/carbon/human/species/monkey, +/turf/open/floor/grass, +/area/station/medical/virology) +"nzX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/security{ + name = "Private Interrogation" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/detective, +/turf/open/floor/iron/dark/textured, +/area/station/security/detectives_office) +"nAc" = ( +/obj/machinery/newscaster/directional/east, +/obj/structure/table/wood, +/obj/item/flashlight/lamp, +/turf/open/floor/wood, +/area/station/service/library/private) +"nAK" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"nAM" = ( +/obj/machinery/firealarm/directional/north, +/obj/structure/closet/radiation, +/turf/open/floor/iron/textured, +/area/station/engineering/gravity_generator) +"nAQ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/noticeboard/directional/north, +/turf/open/floor/iron/white, +/area/station/science/research) +"nAR" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) +"nAS" = ( +/obj/effect/landmark/carpspawn, +/turf/open/space, +/area/space) +"nAW" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"nBb" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/conveyor{ + id = "package_sort_2" + }, +/obj/machinery/camera/directional/west{ + c_tag = "Cargo - Delivery Office"; + name = "cargo camera" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) +"nBk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Control Room" + }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, +/turf/open/floor/iron/dark/textured, +/area/station/tcommsat/computer) +"nBn" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/department/eva) +"nBD" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/table/reinforced, +/obj/item/storage/box/prisoner{ + pixel_x = -6 + }, +/obj/item/storage/box/prisoner{ + pixel_x = 6; + pixel_y = 12 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"nBE" = ( +/turf/closed/wall, +/area/station/maintenance/starboard/aft) +"nBH" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/computer/apc_control, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"nBQ" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/structure/sign/directions/cryo/directional/south{ + dir = 4; + pixel_y = -23 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"nBS" = ( +/obj/item/radio/intercom/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/table/wood, +/obj/machinery/fax{ + fax_name = "Captain's Office"; + name = "Captain's Fax Machine" + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"nBV" = ( +/obj/structure/disposalpipe/junction{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"nBX" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"nCa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/iron, +/area/station/maintenance/department/engine/atmos) +"nCp" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/vaporwave, +/area/station/command/heads_quarters/rd) +"nCu" = ( +/obj/structure/mirror/directional/north, +/obj/structure/sink/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/shower) +"nCA" = ( +/obj/effect/landmark/blobstart, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/central) +"nCB" = ( +/obj/structure/chair/sofa/middle/maroon, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) +"nCY" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/airalarm/directional/south, +/obj/item/kirbyplants/random, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"nDn" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"nDq" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"nDu" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/closet/secure_closet{ + req_access = list("security"); + name = "Ammo Locker - Non-lethal" + }, +/obj/item/storage/box/rubbershot{ + pixel_y = -3; + pixel_x = -3 + }, +/obj/item/storage/box/rubbershot, +/obj/item/storage/box/rubbershot{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/ammo_box/magazine/m35/rubber{ + pixel_x = -6; + pixel_y = -6 + }, +/obj/item/ammo_box/magazine/m35/rubber{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/ammo_box/magazine/m35/rubber, +/obj/item/ammo_box/magazine/m35/rubber{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/ammo_box/magazine/m35/rubber{ + pixel_x = 6; + pixel_y = 6 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"nDw" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"nDy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"nDD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/camera/directional/west{ + c_tag = "Cargo - Bitrunner's Den"; + name = "cargo camera" + }, +/obj/machinery/button/door/directional/west{ + id = "bitrunner_den"; + name = "Bit Den Shutters Control"; + req_access = list("bit_den") + }, +/obj/machinery/computer/quantum_console{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/bitrunning/den) +"nDK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"nDV" = ( +/obj/machinery/oven/range, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"nEn" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/leafy, +/mob/living/basic/butterfly, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/grass, +/area/station/command/bridge) +"nEx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"nEI" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"nEU" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters{ + id = "arrivals_security_post"; + name = "Security Post Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/security/checkpoint/customs/auxiliary) +"nEW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/sign/warning/electric_shock/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"nFn" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/structure/chair/stool/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"nFw" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/modular_computer/preset/id{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"nFK" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"nFM" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/west{ + name = "Apothecary Desk"; + req_access = list("pharmacy") + }, +/obj/machinery/door/window/right/directional/east{ + name = "Apothecary Desk" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "apothecary_shutters"; + name = "Apothecary Shutters"; + dir = 4 + }, +/obj/structure/desk_bell{ + pixel_x = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"nFR" = ( +/obj/effect/turf_decal/tile/red/full, +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/checkpoint/escape) +"nGg" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"nGl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/wood, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"nGn" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"nGp" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/shower) +"nGs" = ( +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"nGw" = ( +/obj/structure/flora/grass/jungle/a/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/sunny/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"nGz" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, +/obj/machinery/button/door/directional/east{ + id = "rad_shutters"; + name = "RaD Desk Shutters Control"; + req_access = list("science") + }, +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron/checker, +/area/station/science/lab) +"nGG" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/carpet/red, +/area/station/commons/dorms) +"nGW" = ( +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/robot_debris/down, +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) +"nHi" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/item/roller{ + pixel_y = 6 + }, +/obj/item/roller{ + pixel_y = 11 + }, +/obj/item/roller{ + pixel_y = 13 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/medical/paramedic) +"nHp" = ( +/obj/structure/flora/grass/jungle/a/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"nHx" = ( +/obj/machinery/camera/autoname/directional/south{ + dir = 5 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"nHH" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness/recreation) +"nHY" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"nIa" = ( +/obj/machinery/light/directional/west, +/obj/structure/chair/stool/directional/south, +/turf/open/floor/carpet/red, +/area/station/commons/dorms) +"nIb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/directional/west{ + c_tag = "Engineering - Atmospherics Incinerator"; + name = "engineering camera" + }, +/obj/machinery/atmospherics/components/tank/plasma, +/obj/structure/sign/warning/no_smoking{ + pixel_x = -28 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"nIh" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/research/abandoned) +"nIs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"nIt" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/line, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"nIx" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"nIA" = ( +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/captain/private) +"nIC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"nIG" = ( +/obj/machinery/door/poddoor/preopen{ + id = "execution_fireblast" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/security/execution) +"nIN" = ( +/obj/effect/decal/cleanable/generic, +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"nIW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = -8 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"nJa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"nJb" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"nJc" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/cafeteria, +/area/station/maintenance/starboard/aft) +"nJi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/grunge{ + id_tag = "dorm_4"; + name = "Dorm 4" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms) +"nJk" = ( +/turf/open/floor/carpet/green, +/area/station/commons/locker) +"nJo" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"nJx" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/table/wood, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"nJy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "bar_sec_shutters"; + name = "Bar Shutters"; + dir = 8 + }, +/obj/structure/desk_bell{ + pixel_y = 2; + pixel_x = 6 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/bar) +"nJK" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"nJL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"nJN" = ( +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"nJS" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/processing) +"nKa" = ( +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"nKb" = ( +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/turf_decal/box/red, +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/turret_protected/ai) +"nKf" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"nKn" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"nKo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/prison/workout) +"nKr" = ( +/turf/closed/wall, +/area/station/solars/starboard/fore) +"nKt" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos) +"nKP" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/cryopod{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"nKU" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/highsecurity{ + name = "Gravity Generator Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/gravity_generator) +"nKV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 8 + }, +/obj/effect/mapping_helpers/mail_sorting/service/kitchen, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"nKW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/hallway/secondary/service) +"nLl" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"nLC" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = -5; + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/station/service/library) +"nLE" = ( +/turf/open/space, +/area/space) +"nLK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/particle_accelerator/particle_emitter/left, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"nLS" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/item/grown/bananapeel, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"nMm" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/line, +/obj/structure/sign/map/left{ + pixel_y = 32 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"nMn" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/station/service/library) +"nMq" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai) +"nMx" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"nMG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"nML" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/noticeboard/directional/east, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"nMW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"nNs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/vending/engivend, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/storage_shared) +"nNH" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/table, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"nNJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"nNK" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/small/directional/north, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/firealarm/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Medical - Exam Room"; + name = "medical camera"; + network = list("ss13","medbay") + }, +/obj/machinery/computer/operating{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/exam_room) +"nNM" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/storage) +"nNO" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/button/door/directional/west{ + id = "toilet_1"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/structure/toilet{ + pixel_y = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"nNQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"nNV" = ( +/obj/structure/sign/xenobio_guide/directional/north, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/glasses/science, +/obj/item/experi_scanner{ + pixel_x = 4 + }, +/obj/structure/table/reinforced/plasmarglass, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"nOj" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/table, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = 6 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/miningoffice) +"nOp" = ( +/obj/machinery/duct, +/turf/open/floor/wood/parquet, +/area/station/security/prison/safe) +"nOw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"nOF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"nOK" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/locker) +"nOM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"nOZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"nPf" = ( +/turf/closed/wall, +/area/station/command/heads_quarters/captain/private) +"nPl" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"nPp" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"nPq" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/sign/departments/maint/directional/south, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"nPs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/structure/table, +/obj/item/aicard, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"nPx" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/shower) +"nPz" = ( +/obj/structure/flora/bush/large/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"nPC" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/loading_area/white{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "hop_queue"; + name = "HoP Queue Shutters" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"nPI" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"nPL" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"nPR" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"nQm" = ( +/obj/effect/turf_decal/trimline/green/filled/warning, +/obj/effect/turf_decal/trimline/green/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"nQn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"nQD" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"nQM" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"nQN" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/maintenance/starboard/aft) +"nRj" = ( +/obj/effect/turf_decal/stripes/end, +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/machinery/status_display/ai/directional/south, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/item/multitool, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"nRm" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"nRE" = ( +/obj/machinery/door/airlock/external{ + name = "Exploration Shuttle Dock" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/research/abandoned) +"nRV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"nSh" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 9 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/white, +/area/station/science/explab) +"nSq" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) +"nSt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"nSy" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/light_switch/directional/east, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"nSF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/firealarm/directional/north, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat_interior) +"nTa" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/shower/directional/west, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"nTn" = ( +/obj/structure/lattice, +/obj/item/clothing/mask/animal/horsehead/cursed{ + desc = "Peter, the horse is here."; + name = "Accursed Horse Mask" + }, +/turf/open/space/basic, +/area/space/nearstation) +"nTp" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/brigdoor/right/directional/west{ + name = "Tertiary AI Core"; + req_access = list("ai_upload") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "secondary_ai_core_shutters"; + name = "Secondary AI Core Shutters" + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"nTB" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/bottle/wine, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = -8; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 8; + pixel_y = 8 + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain) +"nTS" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"nUi" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark/side, +/area/station/hallway/secondary/service) +"nUs" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"nUv" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/light/small/directional/west, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/folder/red, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"nUE" = ( +/obj/machinery/requests_console/directional/west{ + anon_tips_receiver = 1; + assistance_requestable = 1; + department = "Captain's Desk"; + name = "Captain's Requests Console"; + can_send_announcements = 1 + }, +/obj/structure/filingcabinet, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"nUK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/vending/wardrobe/chem_wardrobe, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"nUQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"nUZ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"nVa" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"nVk" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"nVs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/research) +"nVt" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/door/poddoor/preopen{ + id = "Biohazard"; + name = "Biohazard Containment Door" + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/white, +/area/station/science/research) +"nVy" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"nVz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/science/explab) +"nVA" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters{ + id = "robotics_garage"; + name = "Garage Shutters" + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/mechbay) +"nVC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"nVN" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"nWp" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/button/door/directional/south{ + id = "Biohazard"; + name = "Biohazard Control"; + req_access = list("research"); + pixel_x = -6 + }, +/obj/machinery/button/door/directional/south{ + id = "science_security_post"; + name = "Security Post Shutters Control"; + req_access = list("security"); + pixel_x = 6 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"nWt" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"nWB" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/miningoffice) +"nWH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor/massdriver_ordnance, +/turf/open/floor/plating, +/area/station/science/ordnance/testlab) +"nWT" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/obj/machinery/rnd/destructive_analyzer, +/turf/open/floor/iron/white, +/area/station/science/lab) +"nXt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Bridge" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/landmark/navigate_destination/bridge, +/turf/open/floor/iron/dark/textured, +/area/station/command/bridge) +"nXA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"nXP" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/machinery/computer/security{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"nXR" = ( +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/turf_decal/box/red, +/obj/structure/sign/warning/secure_area/directional/south, +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/turret_protected/ai) +"nXU" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"nYb" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"nYd" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/computer/order_console/mining, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/miningoffice) +"nYl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"nYx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/white, +/area/station/science/research) +"nYQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Mining Dock" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/miningoffice) +"nZa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/fore) +"nZd" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/glass/fifty, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"nZg" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/engineering/main) +"nZj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/landmark/navigate_destination/disposals, +/turf/open/floor/iron/textured, +/area/station/maintenance/disposal) +"nZk" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/science/explab) +"nZl" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"nZo" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"nZu" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"nZy" = ( +/obj/structure/lattice/catwalk, +/obj/item/stack/cable_coil, +/obj/structure/sign/warning/electric_shock/directional/south, +/turf/open/space/basic, +/area/station/solars/starboard/aft) +"nZD" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/chair/stool/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"nZL" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/port/fore) +"nZO" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"nZW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"nZX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"oak" = ( +/obj/machinery/corral_corner{ + mapping_id = "6" + }, +/obj/machinery/light/neon_lining{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"oal" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/turf_decal/box/red, +/obj/structure/sign/warning/secure_area/directional/south, +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/turret_protected/aisat_interior) +"oax" = ( +/obj/machinery/cassette/mailbox, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"oaC" = ( +/obj/effect/turf_decal/tile/orange/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"oaJ" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"oaK" = ( +/obj/machinery/light_switch/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"oaN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) +"oaQ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/machinery/light/directional/east, +/obj/item/wrench, +/obj/item/clothing/gloves/latex, +/obj/item/storage/box/masks{ + pixel_y = 8; + pixel_x = -5 + }, +/obj/item/storage/box/disks{ + pixel_y = 4; + pixel_x = -5 + }, +/obj/item/storage/box/beakers{ + pixel_x = -5 + }, +/obj/item/storage/box/gloves{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/storage/box/bodybags{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/storage/box/disks{ + pixel_x = 5 + }, +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"oaZ" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/newscaster/directional/north, +/obj/structure/table/wood, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"obc" = ( +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/mail_sorting/service/library, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"obt" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"obA" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"obC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"obV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"ocd" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/button/door/directional/west{ + id = "ce_privacy"; + name = "Privacy Shutters Control" + }, +/mob/living/basic/parrot/poly, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"ocg" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"och" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate/coffin, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"ocj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/medical/paramedic) +"ocy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/altar_of_gods, +/obj/item/storage/book/bible, +/turf/open/floor/carpet, +/area/station/service/chapel) +"ocD" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"oda" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/structure/table/glass, +/obj/item/experi_scanner, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"odm" = ( +/obj/structure/closet/wardrobe/black, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/commons/dorms) +"ody" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/firealarm/directional/west, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron, +/area/station/engineering/main) +"odC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) +"odN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"odR" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"oed" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"oeC" = ( +/obj/structure/table, +/obj/item/flashlight/lamp, +/turf/open/floor/iron/textured, +/area/station/security/interrogation) +"oeF" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"oeU" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 6 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"off" = ( +/obj/structure/mirror/directional/west, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"ofl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"ofs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/turf/open/floor/iron/dark/side, +/area/station/engineering/break_room) +"ofJ" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/flashlight/lamp/green{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_y = 6; + pixel_x = -6 + }, +/turf/open/floor/wood, +/area/station/service/library) +"oga" = ( +/obj/machinery/firealarm/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"ogd" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/blood/old, +/obj/item/gun/ballistic/rifle/boltaction/pipegun, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"ogg" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/sign/warning/vacuum/external/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"ogk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"ogl" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/janitor) +"ogH" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"ogK" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/item/radio/intercom/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"ogR" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/requests_console/directional/west{ + department = "Hydroponics"; + name = "Hydroponics Requests Console"; + supplies_requestable = 1 + }, +/obj/structure/closet/crate/hydroponics, +/obj/item/wirecutters, +/obj/item/wrench, +/obj/item/shovel/spade, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics) +"ogT" = ( +/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/leafy, +/turf/open/floor/grass, +/area/station/command/bridge) +"ogW" = ( +/obj/structure/sign/poster/official/moth_epi/directional/south, +/obj/structure/table/wood, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/carpet/cyan, +/area/station/medical/break_room) +"ogY" = ( +/turf/closed/wall, +/area/station/cargo/sorting) +"ogZ" = ( +/obj/structure/sign/warning/secure_area/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"oha" = ( +/obj/structure/table/glass, +/obj/item/crowbar/red, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = -8 + }, +/obj/item/clothing/mask/breath{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"ohf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port) +"ohg" = ( +/obj/effect/turf_decal/box, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/camera/directional/south{ + c_tag = "AI Chamber - Tertiary Core"; + name = "core camera"; + network = list("aicore") + }, +/obj/machinery/flasher/directional/north{ + id = "AI"; + name = "Meatbag Pacifier" + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"ohk" = ( +/obj/machinery/corral_corner{ + mapping_id = "1" + }, +/obj/machinery/light/neon_lining{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"ohm" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/main) +"ohw" = ( +/obj/effect/turf_decal/trimline/purple/warning, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"ohF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"ohG" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port) +"ohV" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/green/corner{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"oij" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"oil" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"oip" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/break_room) +"oiB" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/structure/sign/poster/random/directional/west, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/storage) +"oiN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) +"oiO" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/commons/locker) +"oiV" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/light/small/directional/south, +/obj/machinery/status_display/door_timer{ + id = "Cell 4"; + name = "Cell 4"; + pixel_y = -32 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"oju" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/camera/directional/east{ + c_tag = "AI Sat - Atmospherics"; + name = "satellite camera"; + network = list("minisat") + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"ojO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"ojQ" = ( +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/mail_sorting/science/experimentor_lab, +/obj/effect/mapping_helpers/mail_sorting/science/genetics, +/obj/effect/mapping_helpers/mail_sorting/science/rd_office, +/obj/effect/mapping_helpers/mail_sorting/science/research, +/obj/effect/mapping_helpers/mail_sorting/science/robotics, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"ojV" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"okg" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"okm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"okq" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"okt" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"okv" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"okW" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/machinery/chem_master, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry) +"olc" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"olp" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"olq" = ( +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"olH" = ( +/obj/machinery/computer/atmos_control/nocontrol/master{ + dir = 8 + }, +/obj/machinery/requests_console/directional/east{ + assistance_requestable = 1; + department = "Atmospherics"; + name = "Atmospherics Requests Console"; + supplies_requestable = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"olQ" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/item/radio/intercom/directional/north, +/obj/structure/chair, +/obj/effect/landmark/start/cook, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"olX" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/construction) +"oma" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"ome" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/mirror/directional/west, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"omw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"omI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/workout) +"omL" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/sign/warning/explosives/alt/directional/north, +/turf/open/floor/iron/white, +/area/station/science/research) +"omR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/computer/crew, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"omV" = ( +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"omZ" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/obj/machinery/photocopier, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"ond" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_y = 6 + }, +/obj/item/clipboard{ + pixel_y = 6 + }, +/obj/item/folder/yellow{ + pixel_y = 6 + }, +/obj/item/paper/monitorkey, +/obj/item/pen{ + pixel_y = 4 + }, +/obj/item/stamp/ce, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"onj" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/computer/records/pathology{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"onk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"onq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port) +"ony" = ( +/obj/docking_port/stationary{ + dir = 2; + dwidth = 5; + height = 7; + name = "Cargo Bay"; + shuttle_id = "cargo_home"; + width = 12 + }, +/turf/open/space/basic, +/area/space) +"onH" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/sign/warning/rad_shelter/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"onZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"oof" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"oox" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/port) +"ooJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/machinery/status_display/evac/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/obj/machinery/camera/directional/south{ + c_tag = "Central Hallway South"; + name = "hallway camera" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ooP" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/workout) +"ooS" = ( +/obj/structure/window/reinforced/tinted, +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/plastic, +/area/station/security/prison/safe) +"ooT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/booze{ + pixel_x = -8; + pixel_y = 9 + }, +/obj/item/reagent_containers/cup/rag{ + pixel_y = 7; + pixel_x = 9 + }, +/obj/item/toy/cattoy{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white, +/area/station/maintenance/department/medical) +"opa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"ope" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"opr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Recreation Area" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/fitness/recreation) +"opG" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/grass, +/area/station/command/bridge) +"opK" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/execution/transfer) +"opO" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"opP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"opU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/service{ + name = "Bar" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/effect/landmark/navigate_destination/bar, +/turf/open/floor/iron/dark/textured, +/area/station/service/bar) +"oqf" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 10 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"oqp" = ( +/obj/docking_port/stationary/escape_pod{ + dir = 8 + }, +/turf/open/space/basic, +/area/space) +"oqA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Foyer" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/engineering/break_room) +"oqC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/grunge{ + id_tag = "dorm_3"; + name = "Dorm 3" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms) +"oqK" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine/atmos) +"oqN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"oqP" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"orb" = ( +/turf/closed/wall, +/area/station/hallway/primary/fore) +"ort" = ( +/obj/effect/turf_decal/tile/neutral/half, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 1 + }, +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Gateway Chamber"; + req_one_access = list("gateway","mining","cargo","medical") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_half{ + dir = 4 + }, +/area/station/command/gateway) +"orz" = ( +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"orE" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"orM" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"orW" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/light/small/directional/west, +/obj/machinery/vending/wardrobe/medi_wardrobe, +/turf/open/floor/iron/white, +/area/station/medical/office) +"osp" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"osE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"osP" = ( +/obj/machinery/light/directional/north, +/obj/machinery/computer/cryopod/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"osY" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/table/wood, +/turf/open/floor/carpet/red, +/area/station/commons/dorms) +"otg" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"otx" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/glass, +/obj/item/book/manual/wiki/robotics_cyborgs, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"otB" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"otD" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 6 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/engineering/break_room) +"otH" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"otK" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"otO" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"otQ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"oue" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"ouj" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/central) +"ouk" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"our" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/docking/directional/south, +/turf/open/space/basic, +/area/space/nearstation) +"oux" = ( +/obj/structure/closet, +/obj/item/stock_parts/capacitor, +/obj/item/stock_parts/capacitor, +/obj/item/stock_parts/capacitor, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"ouI" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"ouL" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/obj/machinery/duct, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/brig) +"ouP" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"ouX" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "EVA Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/eva, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"ovc" = ( +/obj/structure/weightmachine/weightlifter, +/turf/open/floor/iron/dark, +/area/station/security/prison/workout) +"ovo" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/library/private) +"ovt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"ovA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/telecomms/server/presets/science, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"ovM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"ovO" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/reagent_containers/pill/maintenance, +/obj/item/reagent_containers/pill/maintenance{ + pixel_y = 8; + pixel_x = -7 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"ovS" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"ovU" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"ovY" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/station/command/gateway) +"owd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/crayons, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"ows" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/line, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"owt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"owu" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"owH" = ( +/obj/machinery/air_sensor/air_tank, +/turf/open/floor/engine/air, +/area/station/engineering/atmos) +"owN" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"owX" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"oxa" = ( +/turf/closed/wall/r_wall, +/area/station/security/prison/work) +"oxc" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/structure/table, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/wallframe/camera, +/obj/item/wallframe/camera, +/obj/item/wallframe/camera, +/obj/item/wallframe/camera, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/assault_pod/mining, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"oxn" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"oxt" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"oxz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"oxO" = ( +/obj/machinery/composters, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"oxS" = ( +/obj/machinery/light/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/structure/reagent_dispensers/watertank, +/obj/item/reagent_containers/cup/bucket, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"oxX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"oxY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"oyi" = ( +/turf/open/floor/engine, +/area/station/engineering/engine_smes) +"oyk" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/camera/directional/east{ + c_tag = "Command - Gateway"; + name = "command camera" + }, +/obj/structure/table/reinforced, +/turf/open/floor/iron, +/area/station/command/gateway) +"oym" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/research) +"oyo" = ( +/obj/machinery/newscaster/directional/south, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/table, +/obj/machinery/chem_dispenser/drinks{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/bar) +"oyp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch{ + name = "Satellite Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"oyG" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/stasis{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"oyN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table, +/obj/item/storage/box/lights/mixed{ + pixel_y = 6; + pixel_x = -6 + }, +/obj/item/storage/box/lights/mixed{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/lightreplacer{ + pixel_y = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) +"oyS" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/main) +"ozh" = ( +/obj/effect/turf_decal/trimline/green/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"ozj" = ( +/obj/structure/table/wood, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 5 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/stack/cable_coil, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"ozZ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/structure/closet/secure_closet/engineering_welding, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/engineering/storage_shared) +"oAa" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/atm, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"oAe" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"oAk" = ( +/obj/effect/turf_decal/box, +/obj/machinery/airalarm/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/portable_atmospherics/scrubber/huge, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"oAC" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) +"oAE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 8 + }, +/obj/effect/mapping_helpers/mail_sorting/medbay/cmo_office, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"oAG" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"oAK" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"oAN" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/station/solars/starboard/fore) +"oAT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"oAW" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"oAX" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"oBh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Mining Dock Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningoffice) +"oBo" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"oBr" = ( +/obj/machinery/button/door/directional/south{ + pixel_x = 6; + id = "robotics_garage"; + name = "Garage Shutters Control"; + req_access = list("robotics") + }, +/obj/machinery/light_switch/directional/south{ + pixel_x = -6 + }, +/obj/machinery/firealarm/directional/west{ + pixel_y = -6 + }, +/obj/machinery/button/door/directional/west{ + id = "robotics_garage_shutters"; + name = "Mechbay Privacy Shutters Control"; + req_access = list("robotics"); + pixel_y = 6 + }, +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 8 + }, +/obj/item/storage/toolbox/electrical, +/obj/item/clothing/head/utility/welding, +/obj/item/clothing/glasses/welding, +/obj/item/multitool, +/obj/item/dest_tagger, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"oBD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + sortType = 6 + }, +/obj/effect/mapping_helpers/mail_sorting/engineering/atmospherics, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"oBH" = ( +/turf/closed/wall, +/area/station/medical/pharmacy) +"oBQ" = ( +/obj/structure/sign/departments/engineering/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/starboard/aft) +"oCd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side, +/area/station/commons/dorms) +"oCn" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/closet/secure_closet/brig, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"oCq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"oCv" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_lockdown"; + name = "Medbay Emergency Lockdown Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/medical/cryo) +"oCA" = ( +/obj/effect/turf_decal/delivery/red, +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/iron/textured, +/area/station/ai_monitored/command/storage/eva) +"oCE" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/ai_monitored/security/armory) +"oCG" = ( +/turf/open/floor/carpet/red, +/area/station/security/courtroom) +"oCJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/obj/effect/mapping_helpers/airlock/welded, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"oDg" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"oDi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"oDl" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"oDn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/upgraded, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) +"oDQ" = ( +/obj/structure/chair, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"oDU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"oDW" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/table/reinforced, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas/sechailer, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"oEc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"oEK" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/field/generator/anchored, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"oEN" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/storage) +"oER" = ( +/turf/closed/wall, +/area/station/security/prison/garden) +"oET" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/service{ + name = "Bar Backroom" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/turf/open/floor/iron/dark/textured, +/area/station/service/bar/backroom) +"oFj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"oFm" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/structure/sign/directions/engineering/directional/south{ + pixel_y = -23 + }, +/obj/structure/sign/directions/evac/directional/south{ + dir = 4 + }, +/obj/structure/sign/directions/security/directional/south{ + pixel_y = -41; + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"oFq" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"oFy" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"oFP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"oGe" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/airlock/research{ + name = "Ordnance Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/textured, +/area/station/science/ordnance/office) +"oHb" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/cargo/lobby) +"oHe" = ( +/turf/open/floor/grass, +/area/station/service/chapel/funeral) +"oHl" = ( +/turf/closed/wall, +/area/station/commons/fitness/recreation) +"oHt" = ( +/obj/machinery/conveyor/inverted{ + dir = 6; + id = "garbage" + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"oHG" = ( +/obj/item/radio/intercom/directional/north, +/obj/structure/table, +/obj/effect/spawner/random/entertainment/lighter{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/effect/spawner/random/entertainment/cigarette_pack{ + pixel_y = 2 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"oHO" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/obj/machinery/autolathe, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/break_room) +"oIb" = ( +/turf/closed/wall, +/area/space/nearstation) +"oIc" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/light_switch/directional/south{ + pixel_x = -8 + }, +/obj/machinery/firealarm/directional/south, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"oIf" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/newscaster/directional/south, +/obj/machinery/component_printer, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"oIw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"oIE" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/vending/dinnerware, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"oIF" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/engineering/transit_tube) +"oIJ" = ( +/obj/machinery/status_display/ai/directional/east, +/obj/structure/table/reinforced, +/obj/item/analyzer, +/obj/item/holosign_creator/atmos{ + pixel_x = -5 + }, +/obj/item/holosign_creator/atmos{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/computer_disk{ + pixel_x = -8; + pixel_y = -3 + }, +/obj/item/computer_disk{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/item/computer_disk/ordnance{ + pixel_x = 1 + }, +/turf/open/floor/iron, +/area/station/science/ordnance/office) +"oIP" = ( +/turf/closed/wall/r_wall, +/area/station/science/research) +"oJd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table/reinforced, +/obj/item/rcl/pre_loaded, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"oJz" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"oJB" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/newscaster/directional/east, +/obj/structure/table, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"oJJ" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"oJR" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"oJX" = ( +/obj/structure/table, +/obj/item/folder/blue, +/obj/item/hand_labeler, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/hop) +"oKb" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"oKm" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/requests_console/directional/south{ + department = "Service Hall"; + name = "Service Hall Requests Console"; + supplies_requestable = 1 + }, +/obj/machinery/computer/department_orders/service{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/hallway/secondary/service) +"oKw" = ( +/obj/effect/turf_decal/arrows/white, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"oKy" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"oKA" = ( +/obj/machinery/light/small/directional/west, +/obj/item/radio/intercom/prison/directional/west, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison/shower) +"oKE" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"oKM" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/medical/paramedic) +"oKS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/closet, +/obj/item/airlock_painter, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"oKW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/table/glass, +/obj/item/storage/box/beakers, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/dropper, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"oKY" = ( +/obj/effect/turf_decal/stripes/end, +/obj/machinery/shower/directional/south, +/turf/open/floor/iron/white/textured, +/area/station/maintenance/department/medical) +"oLb" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"oLd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"oLg" = ( +/turf/closed/wall, +/area/station/service/bar/backroom) +"oLh" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage) +"oLq" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/reagent_containers/cup/watering_can, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics) +"oLy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"oLJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/computer/operating{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/security/medical) +"oLT" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"oLY" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/space/basic, +/area/space/nearstation) +"oMi" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"oMj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"oMq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"oMx" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"oMz" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"oMB" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"oMD" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/structure/table, +/obj/item/chicken_feed{ + pixel_y = 10; + pixel_x = -5 + }, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics) +"oMG" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/structure/sink/directional/south, +/obj/machinery/light/small/directional/east, +/obj/machinery/button/door/directional/east{ + id = "hydro_kitchen_shutters"; + name = "Hydro-Kitchen Shutters Control"; + req_access = list("hydroponics") + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/service/hydroponics) +"oMK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/iron/freezer, +/area/station/science/xenobiology) +"oNc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/telecomms/server/presets/medical, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"oNi" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/starboard/aft) +"oNk" = ( +/turf/closed/wall/r_wall, +/area/station/command/teleporter) +"oNs" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/security{ + name = "Detective's Bedroom" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/detective, +/turf/open/floor/iron/dark/textured, +/area/station/security/detectives_office) +"oNx" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"oND" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/piratepad/civilian, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/lobby) +"oNF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/tool{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/reagent_containers/syringe, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"oNH" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"oNL" = ( +/turf/closed/wall, +/area/station/commons/toilet/restrooms) +"oOl" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"oOy" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"oOB" = ( +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"oOS" = ( +/obj/structure/sign/warning/electric_shock/directional/south, +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"oOX" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"oPd" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/bot, +/obj/machinery/door/poddoor/preopen{ + id = "Biohazard"; + name = "Biohazard Containment Door" + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"oPl" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"oPm" = ( +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"oPp" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness/recreation) +"oPA" = ( +/turf/open/floor/iron, +/area/station/engineering/storage) +"oPE" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"oPJ" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"oPX" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/computer/aifixer, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"oQl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"oQn" = ( +/obj/structure/chair/sofa/right/maroon, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) +"oQr" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/large, +/area/station/cargo/warehouse) +"oQv" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"oQE" = ( +/obj/structure/chair/pew/right{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/chapel, +/area/station/service/chapel) +"oQW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/light/directional/north, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/cable/layer3, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"oRa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"oRb" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"oRc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip{ + dir = 2 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"oRg" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron/white, +/area/station/science/research) +"oRj" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"oRs" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/rack, +/obj/item/gun/ballistic/automatic/pistol/paco{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/gun/ballistic/automatic/pistol/paco, +/obj/item/gun/ballistic/automatic/pistol/paco{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"oRx" = ( +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"oRC" = ( +/obj/effect/turf_decal/trimline/dark_red/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"oRG" = ( +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/structure/sign/warning/fire/directional/west, +/obj/structure/table, +/obj/item/crowbar/red, +/obj/item/radio{ + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"oSg" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/warning, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"oSm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness) +"oSo" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"oSp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/xmastree, +/turf/open/floor/carpet, +/area/station/service/library) +"oSr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"oSM" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/chair, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/sorting) +"oTd" = ( +/obj/structure/table/wood/fancy/black, +/turf/open/floor/carpet, +/area/station/service/chapel) +"oTy" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"oTD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/machinery/light/small/directional/west, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"oTE" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/arrow_ccw{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"oTL" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/door/window/left/directional/south{ + name = "Magboot Storage"; + req_access = list("eva") + }, +/obj/structure/rack, +/obj/item/clothing/shoes/magboots{ + pixel_y = -2 + }, +/obj/item/clothing/shoes/magboots{ + pixel_y = 2 + }, +/obj/item/clothing/shoes/magboots{ + pixel_y = 6 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"oTN" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/requests_console/directional/north{ + department = "Pharmacy"; + name = "Pharmacy Requests Console"; + supplies_requestable = 1; + receive_ore_updates = 1; + assistance_requestable = 1 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/bottle/epinephrine, +/obj/item/reagent_containers/dropper, +/obj/item/stack/sheet/mineral/plasma, +/obj/item/stack/sheet/mineral/plasma{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/toy/figure/chemist, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"oTX" = ( +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/smartfridge, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/service/hydroponics) +"oTZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"oUr" = ( +/obj/structure/sign/warning/vacuum/external/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"oUG" = ( +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"oUY" = ( +/obj/machinery/newscaster/directional/west, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"oVm" = ( +/obj/structure/transit_tube, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"oVo" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/science/lab) +"oVp" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/closet/secure_closet/injection{ + name = "justice injections locker" + }, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"oVv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"oVA" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/radio/intercom/directional/south, +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"oVC" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/prison/visit) +"oVH" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/light_switch/directional/north, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/miningoffice) +"oVL" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"oWd" = ( +/obj/structure/sign/warning/electric_shock/directional/west, +/obj/machinery/light/small/directional/west, +/obj/machinery/airalarm/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"oWe" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/docking/directional/north, +/turf/open/space/basic, +/area/space/nearstation) +"oWj" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/rnd/production/techfab/department/service, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/secondary/service) +"oWq" = ( +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"oWu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/morgue{ + name = "Private Study"; + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/library/private) +"oWC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"oWE" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/light/small/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"oWG" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"oWT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/carpet/blue, +/area/station/commons/dorms) +"oWV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/textured, +/area/station/engineering/gravity_generator) +"oXb" = ( +/obj/structure/cable, +/obj/machinery/light/directional/east, +/obj/machinery/power/terminal{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"oXi" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/glass, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/item/ai_module/zeroth/onehuman{ + pixel_y = -3; + pixel_x = 4 + }, +/obj/item/ai_module/supplied/oxygen, +/obj/effect/spawner/random/aimodule/harmful{ + pixel_x = 3; + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"oXO" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/landmark/start/chemist, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"oXS" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"oYi" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/structure/table/reinforced, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"oYl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/security/detectives_office, +/obj/structure/sign/warning/secure_area/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"oYp" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"oYs" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/requests_console/directional/south{ + department = "Cargo Bay"; + name = "Cargo Bay Requests Console"; + supplies_requestable = 1 + }, +/obj/machinery/autolathe, +/turf/open/floor/iron/dark/side, +/area/station/cargo/office) +"oYv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/south{ + name = "RaD Desk" + }, +/obj/machinery/door/window/right/directional/north{ + name = "RaD Desk"; + req_access = list("science") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "rad_shutters"; + name = "RaD Shutters"; + dir = 1 + }, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/lab) +"oYD" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/rnd/production/circuit_imprinter/department/science, +/turf/open/floor/iron/white, +/area/station/science/lab) +"oZb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"oZf" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"oZg" = ( +/obj/machinery/light/no_nightlight/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"oZh" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen_sec_shutters"; + name = "Kitchen Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/service/kitchen) +"oZv" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"oZP" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/table/glass, +/obj/machinery/computer/records/medical/laptop, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"oZQ" = ( +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 10 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"oZV" = ( +/obj/structure/chair/sofa/corp/left{ + color = "#7fb3d5"; + dir = 4 + }, +/turf/open/floor/carpet/cyan, +/area/station/ai_monitored/turret_protected/ai_upload) +"oZX" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/computer/records/security, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"pam" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"pan" = ( +/obj/machinery/power/port_gen/pacman/super, +/turf/open/floor/plating, +/area/station/engineering/main) +"pap" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"pas" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"pau" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/mop_bucket, +/obj/item/mop, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"paw" = ( +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole/bookmanagement{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"paH" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/clothing/gloves, +/obj/effect/spawner/random/clothing/gloves, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"paI" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"paK" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/west, +/obj/structure/sign/warning/no_smoking/directional/west, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"paO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"pbc" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"pbf" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/entertainment/drugs, +/obj/item/poster/random_contraband, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"pbg" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"pbv" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron, +/area/station/commons/dorms) +"pbE" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/command/storage/satellite) +"pbF" = ( +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/security/medical) +"pbG" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"pch" = ( +/obj/machinery/washing_machine, +/obj/item/clothing/head/costume/santa, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"pcp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/public/glass{ + name = "Coffin Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, +/turf/open/floor/iron/dark/textured, +/area/station/service/chapel/funeral) +"pcC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"pcF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/item/flashlight/flare, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"pcU" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"pdc" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/lab) +"pdr" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"pdz" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"pdB" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"pdN" = ( +/turf/open/floor/iron, +/area/station/command/gateway) +"peg" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/leafy, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/grass, +/area/station/ai_monitored/security/armory) +"pem" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"peN" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "xenobiomain"; + name = "Containment Blast Door" + }, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/science/xenobiology) +"peO" = ( +/obj/machinery/firealarm/directional/south, +/turf/open/floor/wood, +/area/station/service/bar) +"peS" = ( +/obj/structure/weightmachine/stacklifter, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/commons/fitness/recreation) +"pff" = ( +/obj/machinery/seed_extractor, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"pfo" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"pfy" = ( +/obj/structure/table, +/obj/item/toy/ammo/gun, +/obj/item/toy/gun, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness/recreation) +"pfJ" = ( +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/light/small/directional/west, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"pgh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"pgj" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/table/glass, +/obj/item/storage/box/monkeycubes, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"pgm" = ( +/obj/machinery/air_sensor/nitrous_tank, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"pgs" = ( +/obj/docking_port/stationary/mining_home/kilo{ + dir = 2 + }, +/turf/open/space/basic, +/area/space) +"pgu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"pgv" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/vending/wardrobe/atmos_wardrobe, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"pgB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/security/glass{ + name = "Cell 3" + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/safe) +"pgT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"phb" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"phj" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"pho" = ( +/turf/open/floor/carpet/black, +/area/station/service/theater) +"phr" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"pht" = ( +/turf/open/floor/iron/dark/smooth_large, +/area/station/engineering/storage) +"phW" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/requests_console/directional/east{ + department = "Chief Medical Officer's Desk"; + name = "Chief Medical Officer's Requests Console"; + anon_tips_receiver = 1; + assistance_requestable = 1; + can_send_announcements = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) +"pia" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/spawner/directional/north, +/obj/structure/table/glass, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"pig" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics) +"pik" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/firealarm/directional/east, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"pin" = ( +/obj/structure/table, +/obj/item/folder/yellow, +/obj/item/hand_labeler, +/turf/open/floor/iron, +/area/station/cargo/storage) +"piu" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/bed/roller, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"piD" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_priv_2"; + name = "Privacy Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/medical/patients_rooms/room_b) +"pji" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"pjq" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "N2 Outlet Pump" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"pjs" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"pjx" = ( +/obj/effect/spawner/random/structure/chair_flipped, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"pjD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"pjT" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/spawner/directional/north, +/obj/machinery/vending/coffee, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"pkf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/turf/open/floor/engine, +/area/station/medical/cryo) +"pkn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port) +"pkv" = ( +/obj/machinery/status_display/evac/directional/west, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"plg" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"plr" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/chair/sofa/corp/right{ + color = "#7fb3d5"; + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"plt" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/port) +"plz" = ( +/obj/structure/bookcase/random, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"plG" = ( +/obj/effect/spawner/random/engineering/vending_restock, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"plH" = ( +/obj/machinery/light/small/built/directional/south, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/carpet/green, +/area/station/maintenance/starboard/aft) +"plK" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"plV" = ( +/obj/machinery/status_display/ai{ + pixel_x = -32 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/yellow/corner, +/obj/structure/table, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/assembly/flash/handheld, +/obj/item/assembly/flash/handheld, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"pme" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/telecomms/bus/preset_two, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"pml" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/structure/table, +/obj/item/chicken_book, +/obj/item/chicken_book, +/obj/item/chicken_book, +/obj/item/chicken_book, +/obj/item/chicken_book, +/obj/item/chicken_scanner, +/obj/item/chicken_scanner, +/obj/item/chicken_scanner, +/obj/item/chicken_scanner, +/obj/item/chicken_scanner, +/obj/item/storage/bag/egg, +/obj/item/storage/bag/egg, +/obj/item/storage/bag/egg, +/obj/item/storage/bag/egg, +/obj/item/storage/bag/egg, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics) +"pmr" = ( +/obj/effect/turf_decal/trimline/purple/line, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/sign/departments/science/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"pmt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"pmv" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"pmQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Construction Storage" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/iron/textured, +/area/station/maintenance/starboard/aft) +"pmV" = ( +/turf/closed/wall, +/area/station/service/chapel) +"pna" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = 8 + }, +/obj/structure/filingcabinet, +/turf/open/floor/iron, +/area/station/science/ordnance/office) +"png" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "cargo_desk"; + name = "Cargo Desk Shutters" + }, +/turf/open/floor/plating, +/area/station/cargo/office) +"pny" = ( +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/status_display/ai/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"pnC" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + location = "Kitchen" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/service) +"pnG" = ( +/obj/structure/table/wood, +/obj/machinery/computer/security/wooden_tv, +/turf/open/floor/carpet/red, +/area/station/security/detectives_office) +"pnU" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/office) +"poj" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "brig_post"; + name = "Security Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/security/brig/entrance) +"poB" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/explab) +"poD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/structure/cable, +/obj/machinery/door/airlock/hatch{ + name = "Cytology Pen" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"poG" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/command/nuke_storage) +"poQ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 9 + }, +/obj/machinery/requests_console/directional/west{ + department = "Science"; + name = "Science Requests Console"; + receive_ore_updates = 1; + supplies_requestable = 1 + }, +/obj/machinery/vending/coffee, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"poU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"ppj" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"ppm" = ( +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"ppx" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron/dark/side, +/area/station/command/heads_quarters/cmo) +"ppL" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/shovel{ + pixel_x = -5 + }, +/obj/item/pickaxe{ + pixel_x = 5 + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/cargo/miningoffice) +"ppN" = ( +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/station/maintenance/starboard/aft) +"ppP" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/storage_shared) +"ppS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/arrow_ccw{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"ppU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/tcommsat/computer) +"pql" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) +"pqo" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/suit_storage_unit/engine, +/turf/open/floor/iron, +/area/station/engineering/main) +"pqw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/yjunction, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"pqQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"prb" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/structure/table, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"prc" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"prd" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"prf" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/light/small/directional/east, +/obj/structure/cable, +/obj/structure/closet/secure_closet/security/sec, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"prj" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/office) +"prl" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/structure/cable, +/obj/machinery/computer/records/security{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"prn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/grunge{ + name = "Morgue" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"prs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/telecomms/bus/preset_one, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"prw" = ( +/obj/structure/cable, +/obj/machinery/light/directional/north, +/obj/machinery/airalarm/directional/north, +/obj/structure/filingcabinet, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"prA" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/purple/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"prE" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 5 + }, +/obj/item/folder{ + pixel_y = 7 + }, +/obj/item/pen{ + pixel_y = 8 + }, +/turf/open/floor/iron, +/area/station/science/ordnance/office) +"prU" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/cargo/office) +"prY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"psg" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 5; + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/station/service/library) +"psz" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/wallframe/apc, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/break_room) +"psE" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/transit_tube/station/dispenser/reverse/flipped{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/engineering/transit_tube) +"psF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"psI" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/computer/atmos_control/plasma_tank{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"psO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"ptd" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/light/directional/south, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/iron/white, +/area/station/science/research) +"pte" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ptg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"ptq" = ( +/obj/machinery/light/directional/east, +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/dorms) +"ptt" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/office) +"pty" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/computer/department_orders/engineering{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) +"ptH" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) +"ptM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"ptX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/cryo_cell{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/medical/cryo) +"ptZ" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/general/hidden, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"puc" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"pun" = ( +/turf/closed/wall, +/area/station/commons/vacant_room/office) +"puy" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"puK" = ( +/obj/machinery/button/door/directional/north{ + id = "perma_lockdown"; + name = "Panic Button"; + req_access = list("brig"); + pixel_x = 6 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/button/flasher{ + id = "transfer_flash"; + name = "Transfer Flash"; + pixel_x = -6; + pixel_y = 24 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"puN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet/purple, +/area/station/commons/dorms) +"puO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/holopad, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/exit/departure_lounge) +"puT" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/icecream_vat, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"puX" = ( +/obj/structure/sign/warning/secure_area/directional/south, +/obj/machinery/space_heater, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"puZ" = ( +/obj/machinery/status_display/ai/directional/east, +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/turf_decal/box/red, +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/turret_protected/ai) +"pvb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"pvh" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/iron/dark, +/area/station/security/office) +"pvu" = ( +/obj/structure/punching_bag, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"pvy" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"pvF" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light/small/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = 8 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"pvL" = ( +/turf/closed/wall, +/area/station/medical/psychology) +"pvN" = ( +/obj/item/storage/secure/safe/directional/south, +/obj/machinery/status_display/evac/directional/east, +/obj/machinery/light_switch/directional/south, +/obj/structure/bed, +/obj/item/bedsheet/cmo, +/obj/effect/landmark/start/chief_medical_officer, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/cmo) +"pwm" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Departure Lounge" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"pwn" = ( +/obj/machinery/corral_corner{ + mapping_id = "5" + }, +/obj/machinery/light/neon_lining{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"pwp" = ( +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"pwT" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"pxg" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/machinery/duct, +/obj/structure/table/glass, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/book/manual/wiki/medicine, +/obj/item/crowbar/red, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/iron/dark, +/area/station/medical/exam_room) +"pxl" = ( +/obj/structure/dresser, +/turf/open/floor/carpet/red, +/area/station/commons/dorms) +"pxp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"pxw" = ( +/turf/open/floor/iron, +/area/station/engineering/main) +"pxx" = ( +/obj/structure/rack, +/obj/item/book/manual/wiki/engineering_hacking{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/book/manual/wiki/engineering_guide, +/obj/item/book/manual/wiki/engineering_construction{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"pxB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side, +/area/station/security/prison/workout) +"pxG" = ( +/obj/structure/table, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/gloves/latex, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"pxU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"pxY" = ( +/obj/effect/turf_decal/tile/neutral/anticorner, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/bot_white/right, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 1 + }, +/area/station/command/gateway) +"pyc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"pye" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"pyq" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/button/door/directional/north{ + id = "eva_shutters"; + name = "EVA Shutters"; + req_access = list("command"); + pixel_x = -7 + }, +/obj/structure/extinguisher_cabinet/directional/north{ + pixel_x = 5 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"pyA" = ( +/obj/effect/turf_decal/box, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"pyE" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"pyH" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"pyW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"pyZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"pzc" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 5 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"pzi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"pzt" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"pzI" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/theater) +"pzL" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"pzP" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/tcommsat/computer) +"pzW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"pzX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/on{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/security/execution) +"pAd" = ( +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"pAk" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/structure/sign/departments/maint/directional/west, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"pAW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"pAY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"pBc" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/storage/box/donkpockets/donkpocketpizza, +/obj/item/knife/kitchen, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"pBp" = ( +/obj/structure/cable, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/engineering/atmos/office) +"pBu" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/port/fore) +"pBz" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/commons/dorms) +"pBK" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname/directional/south{ + dir = 5 + }, +/obj/machinery/duct, +/turf/open/floor/carpet/purple, +/area/station/security/prison/safe) +"pBX" = ( +/obj/machinery/corral_corner{ + mapping_id = "3" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"pCb" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron/cafeteria, +/area/station/maintenance/starboard/aft) +"pCf" = ( +/obj/structure/chair/stool/bamboo, +/mob/living/carbon/human/species/monkey, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"pCm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/explab) +"pCo" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"pCs" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"pCA" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"pCI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/dorms) +"pCM" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/machinery/newscaster/directional/east, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/cargo/lobby) +"pDl" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"pDn" = ( +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"pDB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/main) +"pDC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"pDD" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"pDJ" = ( +/obj/machinery/light/small/directional/east, +/obj/item/radio/intercom/chapel/directional/east, +/obj/structure/chair, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"pDN" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/sign/warning/radiation/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"pDR" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"pDZ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"pEr" = ( +/turf/closed/wall/r_wall, +/area/station/security/office) +"pEy" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Engineering - SMES, Main"; + name = "engineering camera" + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"pEA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/purple/filled/warning, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/science/research) +"pEG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/dorms) +"pEL" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"pEY" = ( +/turf/closed/wall, +/area/station/service/hydroponics) +"pFc" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"pFJ" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"pFU" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Medical - Pathology Pen"; + name = "medical camera"; + network = list("ss13","medbay") + }, +/obj/effect/landmark/blobstart, +/turf/open/floor/grass, +/area/station/medical/virology) +"pGu" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/office) +"pGz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/cryo_cell{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/medical/cryo) +"pGM" = ( +/turf/open/floor/wood, +/area/station/maintenance/port/fore) +"pGN" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"pGP" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"pGS" = ( +/turf/open/floor/iron/dark/side, +/area/station/hallway/secondary/service) +"pGV" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/closet/secure_closet/evidence, +/turf/open/floor/iron/dark, +/area/station/security/evidence) +"pHd" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"pHj" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/structure/sign/departments/botany/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"pHn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/structure/cable, +/obj/machinery/door/airlock/research/glass{ + name = "Kill Chamber"; + normalspeed = 0 + }, +/turf/open/floor/iron/freezer, +/area/station/science/xenobiology) +"pHr" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/large, +/area/station/cargo/storage) +"pHw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"pHx" = ( +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"pHy" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 5 + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/engineering/break_room) +"pHz" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"pHA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"pHI" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"pHK" = ( +/obj/structure/sign/warning/electric_shock/directional/east, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"pHL" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atm, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"pHW" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"pHX" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/candle_box{ + pixel_y = 5 + }, +/obj/item/storage/crayons, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"pIs" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"pIw" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"pIA" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 10 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"pIF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"pIH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/north, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"pIJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/bodycontainer/morgue{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"pIS" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "garbage" + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"pIY" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/structure/sign/directions/security/directional/north{ + pixel_y = 41 + }, +/obj/structure/sign/directions/medical/directional/north{ + dir = 4 + }, +/obj/structure/sign/directions/evac/directional/north{ + dir = 4; + pixel_y = 23 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"pJz" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Security Office Maintenance" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"pJV" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"pKc" = ( +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"pKj" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/reinforced, +/obj/item/taperecorder, +/obj/item/tape/random, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"pKq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/chair/office, +/obj/effect/landmark/start/depsec/medical, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"pKw" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/glass, +/obj/item/ai_module/toy_ai, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"pKx" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"pKO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/chapel{ + dir = 4 + }, +/area/station/service/chapel) +"pKQ" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"pKS" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/structure/cable, +/obj/structure/closet/secure_closet/atmospherics, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal/incinerator) +"pKY" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"pLb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/fore) +"pLl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"pLn" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"pLu" = ( +/obj/machinery/atmospherics/components/binary/valve{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"pLK" = ( +/obj/structure/flora/bush/jungle/b/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"pLS" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/obj/machinery/status_display/evac/directional/east, +/obj/machinery/teleport/station, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"pLU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/poddoor{ + id = "secure_storage"; + name = "Secure Storage" + }, +/turf/open/floor/plating, +/area/station/engineering/main) +"pLV" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/window/right/directional/east{ + name = "Brig Infirmary"; + req_access = list("security") + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/medical) +"pMc" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/structure/table, +/obj/item/stack/sheet/plasteel{ + amount = 10 + }, +/obj/item/stack/rods/fifty, +/obj/effect/spawner/random/trash/janitor_supplies, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"pMB" = ( +/obj/structure/table, +/obj/item/storage/medkit/regular, +/turf/open/floor/iron, +/area/station/commons/dorms) +"pME" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"pMU" = ( +/obj/machinery/light/small/built/directional/south, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"pNi" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"pND" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"pNK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Brig Entrance Desk" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured, +/area/station/security/brig/entrance) +"pNS" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"pNZ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/office) +"pOe" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/machinery/airalarm/all_access{ + dir = 1; + pixel_y = 24 + }, +/obj/machinery/space_heater, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"pOj" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/tcomms_all, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"pOp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/structure/table/glass, +/obj/item/roller{ + pixel_y = 6 + }, +/obj/item/roller{ + pixel_y = 12 + }, +/turf/open/floor/iron/dark, +/area/station/medical/exam_room) +"pOt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Courtroom Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/court, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"pOx" = ( +/obj/machinery/conveyor{ + id = "QMLoad" + }, +/obj/machinery/door/poddoor{ + id = "qm_load_door"; + name = "Supply Dock Loading Door" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) +"pOz" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/four, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"pOB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/cargo/storage) +"pOC" = ( +/obj/item/radio/intercom/directional/west, +/obj/machinery/button/door/directional/north{ + id = "hos_privacy"; + name = "Privacy Shutters Control"; + pixel_x = -24 + }, +/obj/machinery/requests_console/directional/north{ + anon_tips_receiver = 1; + assistance_requestable = 1; + department = "Head of Security's Desk"; + name = "Head of Security Requests Console"; + can_send_announcements = 1 + }, +/obj/structure/table/wood, +/obj/machinery/fax{ + fax_name = "Head of Security's Office"; + name = "Head of Security's Fax Machine" + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"pOF" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"pOH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light_switch/directional/north, +/obj/item/radio/intercom/prison/directional/east, +/obj/structure/closet/crate, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/turf/open/floor/iron/dark, +/area/station/security/prison/work) +"pPq" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/status_display/ai/directional/north, +/obj/machinery/computer/atmos_control/nocontrol/master, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/break_room) +"pPz" = ( +/turf/closed/wall, +/area/station/science/circuits) +"pPM" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"pQc" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron/dark/side, +/area/station/engineering/storage_shared) +"pQi" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/coin, +/turf/open/floor/carpet/cyan, +/area/station/medical/break_room) +"pQl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/light/small/directional/east, +/obj/item/stack/ore/silver, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/miningoffice) +"pQm" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/frame/computer{ + anchored = 1; + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"pQy" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 10 + }, +/obj/structure/sign/poster/official/random/directional/west, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"pRb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/status_display/ai/directional/east, +/obj/machinery/light/directional/east, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"pRd" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"pRe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"pRn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"pRz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/fore) +"pRD" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"pRL" = ( +/obj/machinery/status_display/evac/directional/west, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"pSn" = ( +/obj/machinery/status_display/evac/directional/south, +/obj/structure/table, +/obj/item/clothing/gloves/color/orange, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/turf/open/floor/iron/dark/side, +/area/station/service/janitor) +"pSt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/item/radio/intercom/directional/north{ + freerange = 1; + frequency = 1447; + listening = 0; + name = "Private Channel" + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"pSA" = ( +/turf/closed/wall/r_wall, +/area/station/security/execution) +"pSN" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/corner, +/obj/machinery/iv_drip, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"pSW" = ( +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"pSY" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/modular_computer/preset/research{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"pTa" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) +"pTC" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"pTE" = ( +/obj/effect/turf_decal/stripes/red/line, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"pTF" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Conference Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/hop, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/hop) +"pTI" = ( +/obj/machinery/light_switch/directional/west, +/obj/machinery/recharge_station, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) +"pTK" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"pTV" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"pUp" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"pUu" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"pUw" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/button/door/directional/north{ + id = "engi_lobby_shutters"; + name = "Engineering Lobby Shutters Control" + }, +/obj/machinery/modular_computer/preset/civilian, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/engineering/break_room) +"pUP" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/light_switch/directional/north, +/obj/machinery/light/small/directional/north, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"pUT" = ( +/obj/machinery/light/directional/west, +/obj/structure/chair/stool/directional/south, +/turf/open/floor/carpet/purple, +/area/station/commons/dorms) +"pVi" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) +"pVB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"pVI" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"pVJ" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/decoration/flower, +/obj/effect/spawner/random/decoration/flower, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"pVZ" = ( +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"pWi" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"pWl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/sign/warning/no_smoking/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) +"pWC" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Arrivals - Lounge, South"; + name = "arrivals camera" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"pWE" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"pWG" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"pWO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/security/execution) +"pWX" = ( +/turf/closed/wall/r_wall, +/area/station/science/breakroom) +"pXb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/bar) +"pXd" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/structure/weightmachine/weightlifter, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness/recreation) +"pXp" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"pXG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/south{ + name = "Cargo Desk"; + req_access = list("cargo") + }, +/obj/machinery/door/window/left/directional/north{ + name = "Cargo Desk" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "cargo_desk"; + name = "Cargo Desk Shutters" + }, +/obj/structure/desk_bell{ + pixel_x = 7; + pixel_y = 7 + }, +/obj/item/papercutter, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/office) +"pXY" = ( +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/shower) +"pYv" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/station/science/research) +"pYF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "External Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"pYI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/dorms) +"pYX" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"pZa" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/table, +/obj/item/camera_film, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"pZc" = ( +/obj/structure/cargo_shelf, +/turf/open/floor/iron, +/area/station/cargo/storage) +"pZg" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"pZs" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/machinery/autolathe, +/turf/open/floor/iron/white, +/area/station/science/lab) +"pZC" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Electrical Maintenance" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"pZR" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) +"pZU" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "CO2 Outlet Pump" + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"pZV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"pZX" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/wood, +/area/station/security/prison/safe) +"qap" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/carpet/purple, +/area/station/security/prison/safe) +"qax" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"qaG" = ( +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"qbc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/office) +"qbg" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"qbh" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"qbk" = ( +/obj/effect/turf_decal/trimline/green/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/green/warning{ + dir = 1 + }, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8 + }, +/obj/effect/mapping_helpers/mail_sorting/medbay/virology, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"qbz" = ( +/obj/structure/cable, +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"qcu" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/poddoor{ + id = "justice_blast"; + name = "Emergency Justice Vent" + }, +/turf/open/floor/plating/airless, +/area/station/security/execution) +"qcA" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/line, +/obj/machinery/light/directional/north, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"qcP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/engine_smes) +"qcS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/commons/locker) +"qcT" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"qcU" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/white, +/area/station/science/research) +"qdj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"qdk" = ( +/obj/structure/cable, +/obj/structure/bed/dogbed/ian, +/mob/living/basic/pet/dog/corgi/ian{ + dir = 8 + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/hop) +"qdl" = ( +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark, +/area/station/tcommsat/computer) +"qds" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"qdw" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/structure/sign/directions/supply/directional/south{ + pixel_y = -41 + }, +/obj/structure/sign/directions/cryo/directional/south{ + dir = 4 + }, +/obj/structure/sign/directions/evac/directional/south{ + dir = 4; + pixel_y = -23 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"qdz" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/security/office) +"qdE" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"qdL" = ( +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"qdV" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/seeds/banana, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"qdZ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/light/small/directional/north, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"qeb" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/sign/poster/official/space_cops/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"qed" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) +"qej" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/aft) +"qem" = ( +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"qep" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + name = "Waste In" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"qet" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=EVA2"; + location = "Dorm" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"qeZ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "rad_shutters"; + name = "RaD Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/science/lab) +"qfa" = ( +/obj/machinery/smartfridge/organ, +/turf/closed/wall, +/area/station/medical/surgery) +"qfo" = ( +/obj/structure/cable, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain) +"qfv" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/sign/poster/official/random/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"qgd" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/chair/stool/directional/south, +/obj/machinery/camera/directional/west{ + c_tag = "Engineering - Solar Control, Starboard Quarter"; + name = "engineering camera" + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) +"qgn" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"qgq" = ( +/turf/open/floor/iron/dark, +/area/station/security/prison) +"qgu" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"qgx" = ( +/obj/machinery/light/directional/south, +/obj/item/radio/intercom/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"qgz" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/genetics/cloning) +"qgA" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"qgD" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/textured, +/area/station/engineering/gravity_generator) +"qgL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"qgO" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"qgR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/particle_accelerator/end_cap, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"qgX" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/structure/bodycontainer/morgue{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"qgZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"qha" = ( +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/carpet, +/area/station/service/library) +"qhp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"qhr" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/structure/sign/departments/cargo/directional/south, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"qhu" = ( +/turf/closed/wall, +/area/station/command/heads_quarters/qm) +"qhD" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 9 + }, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"qhZ" = ( +/obj/structure/table, +/obj/item/hand_tele, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"qid" = ( +/obj/structure/chair/wood, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"qik" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/effect/landmark/start/hangover, +/turf/open/floor/wood/large, +/area/station/commons/dorms) +"qiw" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/commons/fitness) +"qiC" = ( +/obj/structure/table/wood, +/obj/item/camera_film, +/obj/item/camera/detective, +/turf/open/floor/carpet/red, +/area/station/security/detectives_office) +"qiM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"qiT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/hallway/secondary/service) +"qjq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"qjP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/janitor) +"qkk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"qkl" = ( +/obj/item/seeds/banana, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"qkv" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/hidden, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"qkw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"qkx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"qkB" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"qkC" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"qlb" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"qlp" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/item/beacon, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"qlI" = ( +/obj/machinery/status_display/evac/directional/east, +/obj/structure/table/wood, +/obj/item/storage/fancy/candle_box/vanilla, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"qlQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"qmb" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"qmd" = ( +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"qmg" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"qmm" = ( +/obj/structure/table/wood, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"qmw" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/break_room) +"qmB" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/chair/stool/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"qmK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) +"qmT" = ( +/obj/effect/spawner/random/trash/graffiti, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"qmY" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"qnm" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/chair/comfy/black, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/engineering/break_room) +"qnx" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/requests_console/directional/north{ + department = "Chief Engineer's Desk"; + name = "Chief Engineer's Requests Console"; + assistance_requestable = 1; + supplies_requestable = 1; + can_send_announcements = 1 + }, +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high, +/obj/item/clothing/glasses/meson/engine, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"qnE" = ( +/turf/closed/wall, +/area/station/service/library) +"qnN" = ( +/obj/structure/cable, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"qnR" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"qnZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance{ + name = "Medbay Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/open/floor/iron/white/textured, +/area/station/maintenance/starboard/aft) +"qos" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"qou" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"qow" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"qoB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/free_drone/directional/south, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"qoF" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/breakroom) +"qpd" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"qpg" = ( +/obj/machinery/camera/emp_proof/directional/east{ + c_tag = "Engineering - External Particle Accelerator, East"; + name = "engineering camera" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"qph" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/structure/table/glass, +/obj/item/storage/box/bodybags, +/obj/item/reagent_containers/syringe{ + name = "steel point" + }, +/obj/item/reagent_containers/cup/bottle/epinephrine, +/obj/item/reagent_containers/cup/bottle/multiver, +/obj/item/storage/backpack/duffelbag/sec/surgery, +/obj/item/clothing/neck/stethoscope, +/obj/machinery/defibrillator_mount/directional/west, +/turf/open/floor/iron/white, +/area/station/security/medical) +"qpi" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "ce_privacy"; + name = "CE Office Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/ce) +"qps" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) +"qpw" = ( +/obj/structure/cable, +/obj/machinery/power/solar{ + id = "forestarboard"; + name = "Fore-Starboard Solar Array" + }, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/starboard/fore) +"qpx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"qpB" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/small/directional/west, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/white, +/area/station/science/auxlab) +"qpF" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/burgundy, +/turf/open/space, +/area/space/nearstation) +"qpO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "testlab"; + name = "Xenobiology Secure Chamber Blast Doors"; + pixel_y = -2; + req_access = list("xenobiology") + }, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"qpY" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/west, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"qqi" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/item/clothing/suit/apron/chef, +/obj/item/clothing/head/soft/mime, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"qqu" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port) +"qqy" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"qqz" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"qqC" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/wood, +/area/station/maintenance/starboard/aft) +"qqD" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/station/command/bridge) +"qqJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/warning/secure_area/directional/south, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"qqU" = ( +/obj/machinery/computer/cargo{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"qra" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/carpet, +/area/station/service/chapel) +"qrh" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/rnd_all, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"qrn" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"qrs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research/glass{ + name = "Break Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/science/breakroom) +"qru" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"qrv" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"qrD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/security/prison/workout) +"qrH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"qrN" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners, +/obj/machinery/chem_heater, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry) +"qsk" = ( +/turf/closed/indestructible{ + desc = "A wall impregnated with Fixium, able to withstand massive explosions with ease"; + icon_state = "riveted"; + name = "hyper-reinforced wall" + }, +/area/station/science/ordnance/bomb) +"qsm" = ( +/turf/open/floor/iron/dark, +/area/station/security/processing) +"qss" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"qsF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable/multilayer/connected, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"qsG" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/newscaster/directional/south, +/obj/machinery/modular_computer/preset/cargochat/security{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"qth" = ( +/obj/item/storage/secure/safe/directional/west, +/obj/structure/table/wood, +/obj/item/taperecorder, +/obj/item/tape/random, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"qtL" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"qtQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/sink/kitchen/directional/south, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"qtW" = ( +/obj/structure/table/wood, +/obj/item/folder/blue, +/obj/item/folder/blue{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/item/folder/blue{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/folder/blue{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/stamp/law{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/clothing/glasses/sunglasses/big, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"qud" = ( +/obj/structure/chair/pew/right{ + dir = 1 + }, +/turf/open/floor/iron/chapel, +/area/station/service/chapel) +"que" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/structure/table, +/obj/item/restraints/handcuffs, +/obj/item/restraints/handcuffs{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/restraints/handcuffs{ + pixel_y = 3 + }, +/obj/item/assembly/timer, +/turf/open/floor/iron/dark, +/area/station/security/office) +"qui" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"quP" = ( +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"quQ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/particle_accelerator/particle_emitter/center, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"quR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"quV" = ( +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"quZ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Primary Tool Storage" + }, +/obj/effect/landmark/navigate_destination/tools, +/turf/open/floor/iron/dark/textured, +/area/station/commons/storage/primary) +"qva" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/easel, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"qvp" = ( +/obj/structure/transit_tube, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/engineering/transit_tube) +"qvz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/external{ + name = "Port Docking Bay 2" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/entry) +"qvA" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/closet/firecloset, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"qvB" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"qvC" = ( +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/structure/table, +/obj/item/taperecorder{ + pixel_x = -3 + }, +/obj/item/pai_card{ + pixel_x = 4 + }, +/turf/open/floor/iron/vaporwave, +/area/station/command/heads_quarters/rd) +"qvM" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"qvX" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"qwd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"qwx" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space, +/area/station/solars/starboard/aft) +"qxd" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/random/contraband/prison, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/bowl, +/obj/item/kitchen/fork/plastic, +/obj/item/kitchen/fork/plastic, +/obj/item/kitchen/fork/plastic, +/obj/item/kitchen/spoon/plastic, +/obj/item/kitchen/spoon/plastic, +/obj/item/kitchen/spoon/plastic, +/obj/item/knife/plastic, +/obj/item/knife/plastic, +/obj/item/knife/plastic, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/box/drinkingglasses, +/obj/item/storage/box/drinkingglasses, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"qxl" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/mapping_helpers/dead_body_placer, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"qxm" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/door/window/left/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"qxu" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + location = "QM #1" + }, +/mob/living/simple_animal/bot/mulebot{ + home_destination = "QM #1"; + suffix = "#1" + }, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/cargo/storage) +"qxD" = ( +/obj/effect/turf_decal/delivery/red, +/obj/machinery/suit_storage_unit/void_old, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"qxJ" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"qxK" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 2 + }, +/obj/effect/mapping_helpers/mail_sorting/supply/cargo_bay, +/turf/open/floor/iron/dark/side, +/area/station/cargo/office) +"qxQ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"qyd" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/entry) +"qyk" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil{ + pixel_y = 7; + pixel_x = 3 + }, +/obj/item/assembly/timer, +/obj/item/assembly/timer, +/obj/item/assembly/timer, +/obj/item/assembly/igniter, +/obj/item/assembly/igniter, +/obj/item/assembly/igniter, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/screwdriver{ + pixel_x = 2; + pixel_y = 11 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"qyx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/maintenance/department/security) +"qyB" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"qyD" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/medical/paramedic) +"qzh" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/white/smooth_large, +/area/station/maintenance/department/science) +"qzk" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/effect/spawner/random/bureaucracy/folder{ + pixel_y = 6 + }, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_y = 6 + }, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"qzl" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/shower/directional/west, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron/textured, +/area/station/engineering/main) +"qzw" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/flasher/portable, +/obj/machinery/door/window/left/directional/east{ + name = "Portable Flasher Storage"; + req_access = list("security") + }, +/obj/structure/sign/poster/official/work_for_a_future/directional/west, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/security/armory) +"qzx" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"qzL" = ( +/obj/structure/mirror/directional/east, +/obj/structure/sink/directional/west, +/turf/open/floor/iron/white, +/area/station/maintenance/port/fore) +"qzQ" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/large, +/area/station/commons/fitness) +"qzR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"qzZ" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"qAa" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/obj/machinery/newscaster/directional/west, +/obj/structure/table, +/turf/open/floor/iron/white, +/area/station/science/explab) +"qAf" = ( +/obj/machinery/status_display/evac/directional/west, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"qAj" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"qAk" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"qAo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side, +/area/station/security/prison/workout) +"qAy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"qAz" = ( +/obj/machinery/firealarm/directional/north, +/obj/item/kirbyplants/random, +/turf/open/floor/carpet, +/area/station/service/chapel) +"qAN" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/central) +"qAZ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/status_display/evac/directional/west, +/obj/structure/filingcabinet, +/turf/open/floor/iron/white, +/area/station/science/lab) +"qBi" = ( +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"qBy" = ( +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port) +"qBz" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/toilet{ + dir = 4 + }, +/obj/effect/landmark/blobstart, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"qBR" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/science/lab) +"qBU" = ( +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/hallway/secondary/service) +"qBV" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/meter{ + name = "Mixed Air Tank In" + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"qCg" = ( +/turf/closed/wall, +/area/station/commons/vacant_room/commissary) +"qCh" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/requests_console/directional/north{ + anon_tips_receiver = 1; + department = "Engineering"; + name = "Engineering Requests Console" + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) +"qCD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/chair, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"qCL" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen_sec_shutters"; + name = "Kitchen Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/service/kitchen) +"qCQ" = ( +/turf/open/floor/iron, +/area/station/science/ordnance) +"qDj" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"qDp" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"qDz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/sign/warning/radiation/directional/west, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"qDK" = ( +/obj/machinery/light/directional/west, +/obj/machinery/vending/cigarette, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"qDZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/service/chapel) +"qEk" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"qEv" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/arrow_ccw{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"qEw" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"qEB" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/holopad, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"qEC" = ( +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/prison/workout) +"qEI" = ( +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"qET" = ( +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/theater) +"qFc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Paramedic Office Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"qFe" = ( +/obj/structure/table/reinforced, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"qFf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Chapel Lobby" + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/chapel) +"qFt" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/aft) +"qFu" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"qFF" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/structure/closet/secure_closet/brig{ + id = "Cell 1"; + name = "Cell 1 locker" + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"qFP" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"qFT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"qGq" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"qGs" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"qGt" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"qGx" = ( +/obj/machinery/light/directional/east, +/obj/structure/table/wood, +/obj/item/storage/fancy/candle_box, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"qGy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"qGP" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"qHa" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/structure/sign/warning/vacuum/external/directional/south, +/obj/structure/tank_holder/oxygen/yellow, +/turf/open/floor/iron, +/area/station/engineering/main) +"qHo" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics/garden) +"qHp" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"qHq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"qHu" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) +"qHC" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"qIg" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron, +/area/station/engineering/main) +"qIB" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/closet/crate/secure/gear{ + req_access = list("brig"); + name = "Formal Uniform Crate" + }, +/obj/effect/turf_decal/bot, +/obj/item/clothing/under/rank/security/officer/formal, +/obj/item/clothing/under/rank/security/officer/formal, +/obj/item/clothing/under/rank/security/officer/formal, +/obj/item/clothing/under/rank/security/officer/formal, +/obj/item/clothing/under/rank/security/officer/formal, +/obj/item/clothing/suit/jacket/officer/blue, +/obj/item/clothing/suit/jacket/officer/blue, +/obj/item/clothing/suit/jacket/officer/blue, +/obj/item/clothing/suit/jacket/officer/blue, +/obj/item/clothing/suit/jacket/officer/blue, +/obj/item/clothing/under/rank/security/warden/formal, +/obj/item/clothing/suit/jacket/warden/blue, +/obj/item/clothing/under/rank/security/head_of_security/formal, +/obj/item/clothing/suit/jacket/hos/blue, +/obj/item/clothing/head/beret/sec/navyofficer, +/obj/item/clothing/head/beret/sec/navyofficer, +/obj/item/clothing/head/beret/sec/navyofficer, +/obj/item/clothing/head/beret/sec/navyofficer, +/obj/item/clothing/head/beret/sec/navyofficer, +/obj/item/clothing/head/beret/sec/navywarden, +/obj/item/clothing/head/hats/hos/beret/navyhos, +/obj/item/bedsheet/hos, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"qIC" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/structure/closet/secure_closet/hydroponics, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics) +"qIN" = ( +/obj/effect/decal/cleanable/blood/gibs/up, +/obj/machinery/light/small/built/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"qJc" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"qJt" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 9 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"qJu" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "RaD"; + name = "RaD Fax Machine"; + pixel_x = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/lab) +"qJv" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"qJA" = ( +/turf/open/floor/engine/n2, +/area/station/engineering/atmos) +"qJD" = ( +/obj/item/storage/secure/safe/directional/east, +/obj/structure/bed, +/obj/item/bedsheet/qm, +/obj/effect/landmark/start/quartermaster, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"qKk" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"qKy" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"qKG" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"qKU" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/machinery/meter, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"qLd" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"qLk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/frame/machine, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"qLz" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"qLB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Morgue Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"qLG" = ( +/obj/machinery/flasher/directional/south{ + id = "AI"; + name = "Meatbag Pacifier" + }, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai) +"qLH" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"qLR" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/burnt_floor, +/obj/item/grown/bananapeel, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"qMh" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"qMF" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"qMO" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/table, +/obj/machinery/camera/directional/east{ + c_tag = "Engineering - Shared Storage"; + name = "engineering camera" + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 5 + }, +/obj/item/stack/rods/fifty, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"qMU" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/line, +/obj/machinery/light/directional/north, +/obj/structure/sign/poster/official/random/directional/north, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"qMY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"qNz" = ( +/obj/machinery/biogenerator, +/obj/item/radio/intercom/prison/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"qNB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/commons/dorms) +"qNL" = ( +/obj/machinery/corral_corner{ + mapping_id = "6" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"qNM" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/turf/open/floor/engine, +/area/station/medical/cryo) +"qNN" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"qNW" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/structure/sink/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/storage) +"qOc" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"qOh" = ( +/obj/structure/table, +/obj/item/stock_parts/subspace/analyzer, +/obj/item/stock_parts/subspace/analyzer, +/obj/item/stock_parts/subspace/analyzer, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"qOl" = ( +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"qOu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet, +/area/station/service/chapel) +"qOB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness) +"qOG" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"qOH" = ( +/turf/closed/wall, +/area/station/medical/office) +"qOQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"qOR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + name = "Science Maintenance Passthrough" + }, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"qOX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/external{ + name = "Common Mining Dock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/landmark/navigate_destination, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/entry) +"qPk" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"qPn" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/mob/living/basic/chicken, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"qPo" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_red, +/obj/machinery/newscaster/directional/east, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"qPx" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/north{ + name = "Apothecary Desk"; + req_access = list("pharmacy") + }, +/obj/machinery/door/window/left/directional/south{ + name = "Apothecary Desk" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "apothecary_shutters"; + name = "Apothecary Shutters" + }, +/obj/structure/desk_bell{ + pixel_x = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"qPJ" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/brigdoor/security/cell{ + id = "Cell 3"; + name = "Cell 3" + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"qPL" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/east, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"qPN" = ( +/obj/machinery/smartfridge, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"qPP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) +"qPR" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"qPS" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness/recreation) +"qQa" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/obj/machinery/light/directional/west, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 7 + }, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/iron/white, +/area/station/science/lab) +"qQe" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/small/directional/south, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"qQf" = ( +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/commons/fitness/recreation) +"qQg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"qQp" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/light/small/directional/east, +/obj/machinery/meter, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"qQq" = ( +/obj/structure/chair/stool/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"qQz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/science/genetics, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"qQH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"qQT" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/chair, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/lobby) +"qQV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"qRc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) +"qRn" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/white/smooth_large, +/area/station/hallway/secondary/exit/departure_lounge) +"qRD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"qRH" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"qRR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Chief Engineer's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/ce, +/turf/open/floor/iron/textured, +/area/station/command/heads_quarters/ce) +"qSw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"qSH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research/glass{ + name = "Circuit Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/turf/open/floor/iron/white/textured, +/area/station/science/circuits) +"qTi" = ( +/obj/structure/sign/poster/official/random/directional/north, +/obj/structure/closet/toolcloset, +/turf/open/floor/iron, +/area/station/construction) +"qTs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"qTv" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"qTz" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/obj/structure/sign/directions/dorms/directional/west{ + pixel_y = -9 + }, +/obj/structure/sign/directions/arrival/directional/west{ + pixel_y = 9 + }, +/obj/structure/sign/directions/upload/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"qTG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"qTI" = ( +/turf/open/floor/iron, +/area/station/commons/dorms) +"qUd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"qUf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"qUo" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/radiation/directional/north, +/turf/open/space/basic, +/area/space/nearstation) +"qUp" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"qUB" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/sorting) +"qUC" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/science/explab) +"qUM" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/science/robotics/lab) +"qUQ" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) +"qUS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Paramedic Entrance" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/medical/medbay/central) +"qVb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"qVf" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"qVi" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"qVH" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/command/heads_quarters/ce) +"qVR" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"qVX" = ( +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"qWb" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"qWf" = ( +/obj/structure/transit_tube/station/dispenser/reverse{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"qWj" = ( +/obj/machinery/light/directional/east, +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/carpet, +/area/station/service/chapel) +"qWn" = ( +/obj/structure/bonfire, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"qWZ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/sign/departments/telecomms/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"qXb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/hallway/secondary/service) +"qXl" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"qXm" = ( +/obj/machinery/power/solar_control{ + id = "foreport"; + name = "Port Bow Solar Control" + }, +/obj/structure/cable, +/obj/structure/sign/warning/vacuum/external/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"qXp" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"qXs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"qXG" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/light/small/directional/west, +/obj/structure/table/glass, +/obj/item/storage/backpack/duffelbag/med/surgery, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"qXN" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"qXR" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = 8 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"qXW" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"qYf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"qYz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"qYN" = ( +/obj/machinery/vending/games, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"qYS" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) +"qYY" = ( +/obj/structure/sink/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/port/fore) +"qZj" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = -8 + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/lobby) +"qZk" = ( +/turf/closed/wall/r_wall, +/area/station/science/auxlab) +"qZn" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/office) +"qZo" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"qZu" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/sign/warning/no_smoking/directional/north, +/turf/open/floor/iron/white, +/area/station/science/research) +"qZw" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4; + name = "freezer passive vent" + }, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"qZC" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"qZF" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"rab" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/machinery/atmospherics/components/trinary/filter/atmos/co2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"ran" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"raq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"rau" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/machinery/camera/directional/north{ + c_tag = "Arrivals - Lounge, North"; + name = "arrivals camera" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"raC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"raN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Library" + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/library) +"raO" = ( +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/wood, +/area/station/service/library) +"raY" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/machinery/conveyor{ + id = "QMLoad"; + dir = 8 + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/storage) +"rbo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"rbv" = ( +/obj/structure/table/wood, +/obj/item/radio/intercom, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"rbH" = ( +/obj/structure/sign/warning/vacuum/external/directional/east, +/obj/structure/closet/emcloset/anchored, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"rbW" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/item/radio/intercom/directional/west, +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/obj/item/stack/sheet/mineral/plasma, +/obj/item/stack/sheet/mineral/plasma{ + pixel_x = -6; + pixel_y = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"rbY" = ( +/turf/open/floor/plastic, +/area/station/security/prison/safe) +"rcc" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"rcf" = ( +/obj/machinery/atmospherics/components/binary/valve/digital/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"rcp" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"rcu" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/machinery/stasis, +/turf/open/floor/iron/dark, +/area/station/medical/exam_room) +"rcy" = ( +/obj/structure/foamedmetal, +/turf/open/floor/plating, +/area/station/engineering/storage) +"rcz" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white/textured, +/area/station/medical/medbay/aft) +"rcC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8 + }, +/obj/effect/mapping_helpers/mail_sorting/supply/disposals, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"rcG" = ( +/obj/structure/table/wood, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"rcJ" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"rcS" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 4 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"rdb" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "detective_office_shutters"; + name = "Detective Office Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/security/detectives_office) +"rdk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"rdn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"rdt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"rdG" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/white, +/area/station/science/research) +"rdI" = ( +/obj/structure/table, +/obj/item/storage/crayons, +/turf/open/floor/iron, +/area/station/commons/dorms) +"rdQ" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"rdT" = ( +/obj/machinery/griddle, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"ref" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"rer" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/service{ + name = "Printer Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/library, +/turf/open/floor/iron/dark/textured, +/area/station/service/library/printer) +"reB" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/optable, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"reH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + name = "Exploration Dock" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/research/abandoned) +"reT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/carpet/green, +/area/station/commons/locker) +"rfl" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"rfz" = ( +/turf/closed/wall, +/area/station/medical/virology) +"rfB" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"rfS" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance/storage) +"rfT" = ( +/obj/machinery/duct, +/turf/open/floor/carpet/purple, +/area/station/security/prison/safe) +"rfU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) +"rfW" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"rfY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance{ + name = "CMO Office Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/cmo, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"rgf" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/mob_spawn/corpse/human/charredskeleton, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"rgi" = ( +/obj/structure/sign/warning/vacuum/external/directional/north, +/obj/structure/cable, +/obj/structure/rack, +/obj/item/clothing/mask/gas, +/obj/item/multitool, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"rgn" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/rack, +/obj/item/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/multitool, +/obj/item/clothing/glasses/meson, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"rgv" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/camera/directional/west{ + c_tag = "Medical - Pharmacy"; + name = "medical camera"; + network = list("ss13","medbay") + }, +/obj/machinery/status_display/evac/directional/west, +/obj/machinery/component_printer, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"rgy" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/table/wood, +/obj/item/newspaper{ + pixel_x = -5 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/clothing/head/soft/grey{ + pixel_x = 6; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/station/commons/locker) +"rgN" = ( +/obj/structure/table/reinforced, +/obj/item/pipe_dispenser, +/obj/item/pipe_dispenser{ + pixel_x = 3; + pixel_y = 7 + }, +/turf/open/floor/iron, +/area/station/science/ordnance/office) +"rgV" = ( +/obj/structure/cable, +/obj/machinery/power/shieldwallgen/xenobiologyaccess, +/turf/open/floor/plating/reinforced, +/area/station/science/xenobiology) +"rgY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"rhs" = ( +/obj/machinery/light/directional/east, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"rhv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Security External Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/security/lockers) +"rhy" = ( +/obj/machinery/light/directional/east, +/obj/machinery/artifact_zapper{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/explab) +"rhB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/stock_parts/subspace/ansible, +/obj/item/stock_parts/subspace/ansible, +/obj/item/stock_parts/subspace/ansible, +/obj/item/stock_parts/subspace/crystal, +/obj/item/stock_parts/subspace/crystal, +/obj/item/stock_parts/subspace/crystal, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"rhD" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"rhE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"rhW" = ( +/turf/closed/wall/r_wall, +/area/station/security/prison/mess) +"rhY" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/obj/structure/table, +/obj/item/radio/off{ + pixel_y = 6 + }, +/obj/item/radio/off{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/radio/off{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/radio/off, +/turf/open/floor/iron/dark, +/area/station/security/office) +"ril" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/atmospherics/miner/carbon_dioxide, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) +"rim" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"rin" = ( +/obj/structure/table/wood, +/obj/item/food/grown/banana{ + pixel_y = 6; + pixel_x = -6 + }, +/obj/item/food/baguette{ + name = "stale baguette"; + desc = "Bon appetit! This one is hard as a rock" + }, +/obj/item/toy/dummy, +/obj/item/lipstick/random{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/lipstick/random{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/structure/mirror/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/service/theater) +"riF" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/station/security/prison) +"rjd" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"rjf" = ( +/obj/machinery/light/small/directional/west, +/obj/item/radio/intercom/chapel/directional/east, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"rjj" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/engineering/break_room) +"rjn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/full, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/heads_quarters/cmo) +"rjK" = ( +/obj/effect/turf_decal/arrows/red{ + dir = 4; + pixel_x = -15 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"rjQ" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/medbay/central) +"rjW" = ( +/turf/open/floor/iron/dark/smooth_large, +/area/station/engineering/main) +"rkf" = ( +/obj/effect/spawner/random/engineering/material_cheap, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"rky" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/light/small/directional/west, +/obj/machinery/duct, +/obj/machinery/door/window/right/directional/north{ + name = "Bridge Delivery"; + req_access = list("command") + }, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"rkB" = ( +/turf/closed/wall, +/area/station/science/genetics/cloning) +"rkE" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/light/small/directional/east, +/obj/machinery/vending/wardrobe/medi_wardrobe, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"rkF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/external{ + name = "External Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/auxlab) +"rkK" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/structure/table, +/obj/item/lightreplacer, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"rkX" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"rlk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"rlz" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"rlB" = ( +/obj/structure/table, +/obj/item/book/manual/wiki/security_space_law, +/obj/item/assembly/flash/handheld, +/turf/open/floor/iron/dark, +/area/station/security/office) +"rlE" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/science/ordnance) +"rlF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/science/ordnance/office) +"rlK" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/storage) +"rlP" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/floor/grass, +/area/station/command/bridge) +"rlQ" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/ai_upload"; + name = "AI Upload Turret Control"; + pixel_y = 25 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"rmn" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port) +"rms" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"rmx" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"rmB" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "bridge_blast_doors"; + name = "Bridge Access Blast Door" + }, +/turf/open/floor/iron/dark/textured, +/area/station/command/bridge) +"rmM" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"rmU" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"rng" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/public/glass{ + name = "Cafeteria" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/iron/textured, +/area/station/maintenance/starboard/aft) +"rnm" = ( +/obj/machinery/light/directional/north, +/obj/machinery/button/door/directional/north{ + id = "xenobiomain"; + name = "Containment Blast Doors"; + req_access = list("xenobiology") + }, +/obj/machinery/computer/slime_market, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"rnp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"rnx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/violet/visible/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"rnN" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/obj/machinery/duct, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/execution) +"rnO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"rnV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/warning, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/office) +"roc" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"roe" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"roo" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/flora/bush/flowers_yw/style_random, +/mob/living/basic/butterfly, +/turf/open/floor/grass, +/area/station/command/bridge) +"rot" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"rov" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/service/chapel/office) +"roF" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"roO" = ( +/obj/machinery/power/transmission_laser{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/engine_smes) +"roS" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/vending/cigarette, +/turf/open/floor/wood, +/area/station/commons/locker) +"rpa" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/machinery/disease2/incubator, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"rpd" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/obj/effect/turf_decal/tile/orange/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"rpe" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"rph" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"rpt" = ( +/obj/machinery/corral_corner{ + mapping_id = "5" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "5" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"rpu" = ( +/obj/item/radio/intercom/directional/south, +/obj/structure/bed, +/obj/item/bedsheet/red, +/obj/effect/landmark/start/detective, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"rpz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"rpA" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/sign/poster/random/directional/north, +/obj/structure/cargo_shelf, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"rpB" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/obj/structure/sign/directions/cryo/directional/west{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"rpI" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/closet/emcloset/anchored, +/obj/machinery/camera/directional/east{ + c_tag = "AI Sat - Access Airlock"; + name = "satellite camera"; + network = list("minisat") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"rpP" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/structure/sign/warning/biohazard/directional/north, +/obj/machinery/slime_market_pad, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"rpT" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/item/radio/intercom/directional/west, +/obj/structure/cable, +/obj/machinery/suit_storage_unit/ce, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"rqa" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/washing_machine, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) +"rqm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/camera/preset/ordnance{ + dir = 1 + }, +/obj/item/target/alien/anchored, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"rrg" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/sign/warning/secure_area/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/tcommsat/computer) +"rrq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"rrv" = ( +/mob/living/carbon/human/species/monkey, +/turf/open/floor/grass, +/area/station/science/genetics) +"rrD" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"rrG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/welded, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"rsn" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/computer/piratepad_control/civilian{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/lobby) +"rst" = ( +/obj/effect/turf_decal/box, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/virology) +"rsx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"rsR" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"rtd" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Medical - Departures Post"; + name = "medical camera"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"rtq" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Port Hallway East" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"rtz" = ( +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"rtE" = ( +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"rtJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"rtP" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"rtY" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/directional/east{ + c_tag = "Medical - CMO Office"; + network = list("ss13","medbay"); + name = "medical camera" + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"rud" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/machinery/composters, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics/garden) +"rug" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port) +"ruh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"run" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"ruu" = ( +/obj/structure/cable, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/mob/living/simple_animal/bot/secbot/pingsky, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat_interior) +"ruC" = ( +/obj/machinery/door/airlock/engineering{ + name = "Tech Storage" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, +/obj/effect/landmark/navigate_destination/techstorage, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"ruH" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"ruJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"ruN" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics/garden) +"ruW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"rvf" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/status_display/ai/directional/west, +/turf/open/floor/iron/white, +/area/station/science/research) +"rvv" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/airalarm/directional/north, +/obj/structure/closet/secure_closet/medical1, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"rvC" = ( +/obj/structure/closet/l3closet/janitor, +/obj/item/clothing/under/costume/maid, +/obj/item/clothing/gloves/maid, +/obj/item/clothing/head/costume/maidheadband, +/obj/item/grenade/clusterbuster/cleaner, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/janitor) +"rvW" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/machinery/airalarm/directional/west, +/obj/structure/table, +/obj/item/storage/belt/utility, +/obj/item/borg/upgrade/rename, +/obj/item/reagent_containers/cup/beaker/large, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"rwa" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"rwq" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"rws" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/sparker/directional/south{ + id = "execution_burn" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/on{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/security/execution) +"rwA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Dormitory" + }, +/obj/effect/landmark/navigate_destination/common/dorms, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms) +"rwH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/tank_dispenser, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"rwN" = ( +/obj/machinery/space_heater, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"rwR" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/firealarm/directional/west{ + pixel_y = -6 + }, +/obj/machinery/light_switch/directional/west{ + pixel_y = 3 + }, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"rwW" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Hydroponics" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/effect/landmark/navigate_destination/hydro, +/turf/open/floor/iron/dark/textured, +/area/station/service/hydroponics) +"rxa" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"rxc" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/burgundy, +/turf/open/space/basic, +/area/space/nearstation) +"rxk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/iron/cafeteria, +/area/station/maintenance/starboard/aft) +"rxl" = ( +/obj/effect/turf_decal/bot/left, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"rxo" = ( +/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"rxs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"rxt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/port) +"rxF" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"rxH" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"rxR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/newscaster/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"rxT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/command/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/central) +"ryc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/tcommsat/computer) +"ryl" = ( +/obj/structure/bookcase/random/adult, +/turf/open/floor/wood, +/area/station/service/library) +"ryp" = ( +/obj/machinery/mass_driver/trash{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"ryw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"ryN" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=Dorm"; + location = "HOP2" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ryX" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) +"rzi" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/camera/motion/directional/west{ + c_tag = "AI - Upload West"; + network = list("aiupload") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"rzG" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"rzM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron/dark/textured, +/area/station/security/office) +"rzV" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/computer/department_orders/medical{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/office) +"rAk" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"rAl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Garden" + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/hydroponics/garden) +"rAq" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"rAA" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 5 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Security - Courtroom Northeast"; + name = "security camera" + }, +/obj/machinery/light_switch/directional/north, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"rAB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"rAO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"rAT" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"rAY" = ( +/obj/machinery/light/directional/north, +/obj/structure/sign/poster/official/anniversary_vintage_reprint/directional/north, +/obj/machinery/modular_computer/preset/research, +/turf/open/floor/iron/vaporwave, +/area/station/command/heads_quarters/rd) +"rBa" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/machinery/smartfridge/chemistry/preloaded, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry) +"rBb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Equipment" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, +/turf/open/floor/iron/textured, +/area/station/engineering/main) +"rBi" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/processing) +"rBj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"rBF" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/requests_console/directional/north{ + anon_tips_receiver = 1; + assistance_requestable = 1; + department = "Security"; + name = "Security Requests Console" + }, +/obj/machinery/computer/records/security, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"rBM" = ( +/obj/machinery/door/airlock/external{ + name = "Labor Camp Shuttle Airlock"; + shuttledocked = 1 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/security/processing) +"rCa" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "hydro_back_shutters"; + name = "Hydroponics Backroom Shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) +"rCh" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/requests_console/directional/north{ + anon_tips_receiver = 1; + assistance_requestable = 1; + department = "Security"; + name = "Security Requests Console" + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"rCj" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"rCx" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 10 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/cell_5k, +/obj/structure/table, +/obj/item/folder/white, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/station/science/server) +"rCE" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/plate_press, +/turf/open/floor/iron/dark, +/area/station/security/prison/work) +"rCH" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/firealarm/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/item/kirbyplants/photosynthetic, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"rCS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"rCT" = ( +/turf/closed/wall, +/area/station/hallway/primary/starboard) +"rCW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"rCZ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white/right, +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"rDd" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"rDe" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"rDg" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/rnd/production/circuit_imprinter/department/science, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"rDj" = ( +/obj/effect/turf_decal/siding/thinplating, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"rDA" = ( +/obj/machinery/computer/mech_bay_power_console, +/turf/open/floor/circuit, +/area/station/maintenance/department/electrical) +"rDD" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/structure/closet/radiation, +/obj/item/crowbar/large, +/turf/open/floor/iron, +/area/station/engineering/storage) +"rDG" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"rDO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"rDR" = ( +/turf/closed/wall, +/area/station/cargo/warehouse) +"rDW" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"rDX" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/canister/bz, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"rEd" = ( +/obj/effect/spawner/random/structure/chair_flipped, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/plaques/kiddie/perfect_drone{ + pixel_x = 32 + }, +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) +"rEe" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/light_switch/directional/south{ + pixel_x = -6 + }, +/obj/machinery/button/door/directional/south{ + id = "station_away_gate"; + name = "Gateway Access Shutter Control"; + pixel_x = 6; + req_access = list("gateway") + }, +/obj/effect/turf_decal/bot_white, +/obj/machinery/newscaster/directional/west, +/obj/machinery/modular_computer/preset/civilian{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"rEf" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/structure/table, +/obj/item/radio/intercom/directional/west, +/obj/item/folder/yellow, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -2; + pixel_y = -3 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"rEo" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"rEv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"rEE" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"rEI" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"rEJ" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/item/food/grown/banana, +/obj/machinery/light/small/directional/east, +/turf/open/floor/grass, +/area/station/medical/virology) +"rEK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"rEL" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/machinery/door/window/left/directional/south{ + name = "Test Chamber"; + req_access = list("xenobiology") + }, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"rEO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/engineering/atmos) +"rEP" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/locker) +"rFd" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/obj/machinery/light/directional/north, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain) +"rFk" = ( +/turf/closed/wall, +/area/station/medical/medbay/central) +"rFn" = ( +/turf/open/floor/plating, +/area/station/engineering/main) +"rFC" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/port) +"rFO" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/light/directional/west, +/obj/machinery/keycard_auth{ + pixel_x = -24 + }, +/obj/structure/table/reinforced, +/obj/item/folder/blue{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/flashlight/lamp{ + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"rFP" = ( +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"rFQ" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"rGu" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"rGz" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/mob/living/carbon/human/species/monkey/dukeman, +/turf/open/floor/plastic, +/area/station/security/prison/safe) +"rGH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"rGL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/commons/fitness/recreation) +"rGN" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"rGT" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) +"rHa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/command/storage/satellite) +"rHd" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/computer/atmos_control/mix_tank{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"rHn" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + name = "Surgery" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/medical/surgery) +"rHp" = ( +/obj/machinery/power/smes{ + capacity = 9e+006; + charge = 10000 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/iron/dark/textured_large, +/area/station/maintenance/disposal/incinerator) +"rHt" = ( +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"rHA" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/prison/garden) +"rHD" = ( +/obj/machinery/light/neon_lining{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"rHG" = ( +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"rHN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/wood, +/area/station/service/bar) +"rHQ" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"rHR" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"rHT" = ( +/obj/structure/cable, +/obj/machinery/power/smes/engineering, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"rIe" = ( +/obj/machinery/mass_driver/ordnance{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/science/ordnance/testlab) +"rIv" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/corner, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/item/kirbyplants/random, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/camera/directional/west{ + c_tag = "Medical - Central, West"; + name = "medical camera"; + network = list("ss13","medbay"); + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"rIC" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"rID" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/closet/secure_closet/evidence, +/turf/open/floor/iron/dark, +/area/station/security/evidence) +"rIN" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Science - Xenobiology, Pen 5"; + network = list("ss13","rd","xeno"); + name = "science camera" + }, +/obj/machinery/light/neon_lining{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"rIR" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness) +"rIX" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"rJk" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/mob/living/basic/chicken, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"rJu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/camera/directional/west{ + c_tag = "Telecomms Server Room"; + network = list("tcomms") + }, +/obj/machinery/ntnet_relay, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"rJz" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/station/maintenance/starboard/aft) +"rJM" = ( +/obj/machinery/firealarm/directional/north, +/obj/item/stack/sheet/mineral/plasma{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/stack/sheet/mineral/plasma, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = 4 + }, +/obj/item/stack/sheet/mineral/plasma{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/dropper{ + pixel_y = -4 + }, +/obj/structure/table/reinforced/plasmarglass, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"rKd" = ( +/obj/item/cigbutt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"rKU" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"rKX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Dorm 1" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/maintenance/starboard/aft) +"rLe" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"rLs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/storage) +"rLH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/layer_manifold/brown/visible, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"rLK" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"rLP" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/landmark/start/head_of_personnel, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"rLX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"rMc" = ( +/obj/effect/turf_decal/box/white, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/command/storage/eva) +"rMm" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"rMn" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"rMt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/engineering/main) +"rMK" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"rMN" = ( +/obj/machinery/light_switch/directional/west, +/obj/structure/table, +/obj/item/storage/belt/utility, +/obj/item/t_scanner{ + pixel_x = -6 + }, +/obj/item/multitool{ + pixel_x = 6 + }, +/obj/item/clothing/mask/breath, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"rMS" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/west, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/iron, +/area/station/engineering/main) +"rMV" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/item/clothing/mask/gas, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"rNd" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrogen_input{ + dir = 8 + }, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos) +"rNx" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics_garage_shutters"; + name = "Robotics Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/science/robotics/mechbay) +"rNA" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/wood, +/area/station/commons/locker) +"rOg" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/office) +"rOt" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/sign/poster/random/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"rOu" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/structure/sign/poster/official/help_others/directional/west, +/obj/machinery/cryopod{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"rOv" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/turf/open/floor/iron, +/area/station/engineering/main) +"rOy" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/plastic, +/area/station/security/prison/safe) +"rOF" = ( +/obj/machinery/button/door/directional/west{ + id = "visitation"; + name = "Visitation Shutters"; + req_access = list("brig") + }, +/obj/machinery/button/door/directional/west{ + id = "visitation"; + name = "Visitation Shutters"; + req_access = list("brig") + }, +/obj/machinery/button/door/directional/west{ + id = "visitation"; + name = "Visitation Shutters"; + req_access = list("brig") + }, +/obj/machinery/button/flasher{ + id = "visitation_prisoner_flash"; + name = "Visitation Prisoner Flash"; + pixel_x = -24; + pixel_y = 9 + }, +/obj/machinery/button/flasher{ + id = "visitation_visitor_flash"; + name = "Visitation Visitor Flash"; + pixel_x = -24; + pixel_y = -9 + }, +/obj/structure/cable, +/obj/structure/table, +/obj/item/restraints/handcuffs{ + pixel_y = 3 + }, +/obj/item/assembly/flash/handheld, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"rOQ" = ( +/obj/machinery/duct, +/obj/structure/table/reinforced, +/obj/structure/reagent_dispensers/servingdish, +/obj/structure/reagent_dispensers/servingdish, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"rOR" = ( +/obj/structure/sign/painting/library{ + pixel_y = -32 + }, +/obj/structure/easel, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/nineteen_nineteen, +/obj/item/canvas/twentythree_nineteen, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"rOV" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 5 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/engineering/main) +"rOW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/engineering/main) +"rPn" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/freezer, +/area/station/science/xenobiology) +"rPJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"rPK" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"rPQ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"rPV" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"rPX" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/machinery/status_display/ai/directional/west, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"rQn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/construction) +"rQs" = ( +/obj/machinery/newscaster/directional/west, +/obj/machinery/light/small/directional/west, +/obj/machinery/camera/directional/west{ + c_tag = "Security - Head of Security Room"; + name = "security camera" + }, +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/glass/bottle/navy_rum{ + pixel_x = 7; + pixel_y = 13 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 6 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"rQv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/plumbed{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"rQz" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"rQO" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/status_display/door_timer{ + id = "Cell 1"; + name = "Cell 1"; + pixel_y = -32 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"rRb" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 9 + }, +/obj/machinery/button/door/directional/west{ + id = "cargo_desk"; + name = "Cargo Desk Shutters"; + req_access = list("cargo") + }, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/cargo/office) +"rRd" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/structure/sign/departments/cargo/directional/east, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/cargo/lobby) +"rRl" = ( +/obj/structure/table, +/obj/item/clothing/gloves/color/fyellow, +/obj/item/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/multitool, +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) +"rRm" = ( +/turf/closed/wall, +/area/station/service/kitchen) +"rRt" = ( +/obj/machinery/mech_bay_recharge_port, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"rRZ" = ( +/turf/closed/wall, +/area/station/maintenance/department/medical) +"rSc" = ( +/obj/structure/cable, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"rSo" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"rSs" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"rSx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/window/left/directional/south{ + name = "SMES Chamber"; + req_access = list("engineering") + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"rSy" = ( +/obj/structure/foamedmetal, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"rSO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"rSP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/furniture_parts, +/turf/open/floor/plating, +/area/station/maintenance/port) +"rSY" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/modular_computer/preset/id{ + dir = 4 + }, +/obj/machinery/camera/directional/west{ + c_tag = "Security - Arrivals Checkpoint"; + name = "security camera" + }, +/obj/machinery/button/door/directional/west{ + id = "arrivals_security_post"; + name = "Security Post Shutters Control"; + req_access = list("security") + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"rTf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"rTm" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/structure/cable, +/obj/machinery/power/smes, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"rTn" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"rTu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) +"rTx" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"rTA" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"rTF" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/engineering/break_room) +"rTK" = ( +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/cmo) +"rTM" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) +"rTP" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 1 + }, +/obj/structure/sign/poster/official/safety_internals{ + pixel_x = 32 + }, +/obj/structure/table, +/obj/item/storage/box/smart_metal_foam{ + pixel_x = 4; + pixel_y = 7 + }, +/obj/item/clothing/head/utility/welding, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"rTS" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/captain) +"rTV" = ( +/obj/machinery/requests_console/directional/south{ + anon_tips_receiver = 1; + assistance_requestable = 1; + department = "Head of Personnel's Desk"; + name = "Head of Personnel's Requests Console"; + can_send_announcements = 1 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"rUf" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/door/window/left/directional/south{ + name = "Jetpack Storage"; + req_access = list("eva") + }, +/obj/structure/rack, +/obj/item/tank/jetpack/carbondioxide{ + pixel_y = 8 + }, +/obj/item/tank/jetpack/carbondioxide{ + pixel_y = 4 + }, +/obj/item/tank/jetpack/carbondioxide, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"rUm" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/airalarm/directional/south, +/obj/machinery/light_switch/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"rUL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"rUQ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"rUY" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"rUZ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/machinery/camera/directional/west{ + c_tag = "Aft Primary Hallway North" + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"rVw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"rVz" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"rVT" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Escape Pod Three" + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/maintenance/department/security) +"rWe" = ( +/obj/effect/spawner/random/structure/chair_maintenance, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"rWp" = ( +/obj/structure/chair, +/obj/effect/landmark/start/shaft_miner, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"rWt" = ( +/obj/structure/sign/warning/electric_shock/directional/east, +/obj/effect/spawner/random/structure/table, +/obj/item/clothing/head/beret, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"rWE" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/warning, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"rWH" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"rWZ" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"rXH" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Head of Personnel" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/hop, +/obj/effect/landmark/navigate_destination, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/hop) +"rXM" = ( +/obj/structure/bed/pod, +/obj/item/bedsheet/random, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"rXQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"rYe" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"rYk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Chapel" + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/chapel) +"rYz" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/green/corner{ + dir = 8 + }, +/obj/structure/sign/map/right{ + pixel_y = 32 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"rYA" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/engine_smes) +"rYM" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/office) +"rYV" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/xenobiology) +"rZq" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"rZs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"rZy" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"rZB" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"rZH" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/structure/sign/poster/official/walk/directional/south, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"rZN" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) +"rZO" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/computer/atmos_control/nitrous_tank{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"rZY" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"saa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"san" = ( +/obj/machinery/door/airlock/public/glass/incinerator/atmos_exterior, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"saq" = ( +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/smooth_half{ + dir = 8 + }, +/area/station/command/gateway) +"say" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/shower/directional/east, +/obj/effect/landmark/start/chemist, +/turf/open/floor/noslip{ + icon_state = "textured_dark" + }, +/area/station/medical/chemistry) +"saI" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"saV" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"saY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/tcommsat/computer) +"sbg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"sbz" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"sbB" = ( +/obj/item/radio/intercom/directional/south, +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/iron/white/textured, +/area/station/science/auxlab) +"sbI" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"sbL" = ( +/obj/machinery/light/directional/east, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"sbN" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/south, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"sce" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/iron/white, +/area/station/medical/office) +"scf" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot, +/obj/machinery/vending/assist, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"scp" = ( +/obj/structure/table/wood, +/obj/machinery/computer/records/medical/laptop{ + dir = 8 + }, +/turf/open/floor/carpet/blue, +/area/station/medical/psychology) +"scD" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"scF" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/table, +/obj/item/analyzer, +/obj/item/t_scanner, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/commons/storage/primary) +"scL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/security/interrogation) +"scR" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"sdf" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/cargo/storage) +"sdE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"sdL" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"sdP" = ( +/turf/open/floor/wood, +/area/station/security/prison/rec) +"sea" = ( +/obj/machinery/light/small/built/directional/north, +/obj/structure/sign/warning/no_smoking/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = -8 + }, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/clothing/mask/breath, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"sec" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"sed" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white/right, +/obj/machinery/ore_silo, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"sep" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/grassy/style_random, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_lockdown"; + name = "Medbay Emergency Lockdown Shutters"; + dir = 8 + }, +/turf/open/floor/grass, +/area/station/medical/medbay/central) +"set" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/research{ + name = "Artifact Research" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/iron/white/textured, +/area/station/science/explab) +"seu" = ( +/obj/machinery/computer/station_alert, +/obj/machinery/newscaster/directional/north, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) +"sey" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"seJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"seN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"seP" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/solars/starboard/aft) +"seS" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"sfh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"sfj" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"sfm" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"sfu" = ( +/obj/machinery/button/ignition/incinerator/atmos, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) +"sfz" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/delivery_chute{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) +"sfC" = ( +/turf/closed/wall, +/area/station/service/chapel/office) +"sfI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Starboard Quarter Solar Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/landmark/navigate_destination/common/starboardquartersolar, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) +"sgh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/status_display/ai/directional/west, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"sgJ" = ( +/obj/item/tank/internals/oxygen, +/obj/item/clothing/mask/breath, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"sgM" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"sgT" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"sgY" = ( +/obj/effect/decal/cleanable/vomit/old, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"shc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"shm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/work) +"shu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"shv" = ( +/obj/item/radio/intercom/directional/south, +/obj/structure/table_frame/wood, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"shx" = ( +/obj/structure/sign/plaques/kiddie/library, +/turf/closed/wall, +/area/station/service/library/artgallery) +"shC" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/leavy/style_random, +/turf/open/floor/grass, +/area/station/command/bridge) +"shF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/entry) +"shL" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/obj/item/book/manual/wiki/tcomms{ + pixel_x = 4 + }, +/obj/item/radio/off, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/tcommsat/computer) +"shX" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"sit" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"six" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/gateway) +"siE" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/central) +"siM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"siR" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/evidence) +"sjk" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"sjm" = ( +/obj/effect/turf_decal/box/red, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/iron, +/area/station/science/ordnance) +"sjp" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/line, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"sjs" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"sjw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/secondary/service) +"sjy" = ( +/obj/structure/bookcase/random/fiction, +/turf/open/floor/wood, +/area/station/service/library) +"sjF" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/port/fore) +"sjV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"skd" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"ske" = ( +/turf/open/floor/iron, +/area/station/cargo/office) +"skl" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/commons/storage/primary) +"skA" = ( +/obj/structure/rack, +/obj/item/storage/bag/ore, +/obj/item/storage/bag/ore, +/obj/item/storage/bag/ore, +/obj/item/storage/bag/ore, +/obj/item/pickaxe, +/obj/item/pickaxe, +/obj/item/pickaxe, +/obj/item/pickaxe, +/turf/open/floor/iron/white, +/area/station/science/auxlab) +"skB" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"skE" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/trimline/dark_blue/line, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"skJ" = ( +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"skR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/newscaster/directional/east, +/obj/structure/chair/sofa/corp{ + color = "#7fb3d5"; + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"slc" = ( +/obj/structure/chair/stool/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/commons/fitness) +"slh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible/layer4, +/obj/machinery/meter/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"slq" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"slt" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 4 + }, +/obj/item/multitool{ + pixel_x = -6 + }, +/obj/item/assembly/signaler{ + pixel_x = 6; + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"slu" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) +"slx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/port) +"slS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/button/door/directional/south{ + id = "prison_release"; + name = "Labor Camp Shuttle Lockdown"; + req_access = list("brig") + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "prison_release"; + name = "Prisoner Processing Blast Door" + }, +/obj/machinery/door/airlock/security/glass{ + name = "Labor Shuttle Dock" + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/processing) +"smr" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/gibs/core, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"sms" = ( +/turf/closed/wall, +/area/station/service/chapel/funeral) +"smB" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"smC" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"smN" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + location = "QM #3" + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/storage) +"smQ" = ( +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/locker) +"snd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"snh" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - Atmospherics Nitrous Oxide Chamber"; + name = "engineering camera" + }, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"snk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/public/glass{ + name = "Funeral Parlor" + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/chapel/funeral) +"snl" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/station/solars/port/fore) +"snm" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"snq" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "bridge_windows"; + name = "Bridge View Blast Door" + }, +/turf/open/floor/plating, +/area/station/command/bridge) +"snz" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"snL" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/item/stack/sheet/iron/ten, +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"snQ" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/structure/sign/directions/cryo/directional/north{ + dir = 4; + pixel_y = 23 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"soc" = ( +/obj/effect/spawner/random/structure/chair_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"soj" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"sos" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) +"soB" = ( +/obj/effect/turf_decal/stripes/box, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/target, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"soW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"spb" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"spo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/evidence) +"spr" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"spv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"spG" = ( +/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"spJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/button/door/directional/north{ + id = "cap_privacy"; + name = "Privacy Shutters Control"; + pixel_x = 6 + }, +/obj/machinery/light_switch/directional/north{ + pixel_x = -6 + }, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"sqj" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"sqV" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/reinforced, +/obj/item/skub, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"sqZ" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/effect/spawner/random/bureaucracy/folder{ + pixel_y = 2 + }, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_y = 2 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"sre" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"sry" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/white/textured, +/area/station/medical/virology) +"srQ" = ( +/obj/effect/turf_decal/delivery/red, +/obj/machinery/light/directional/west, +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/iron/textured, +/area/station/ai_monitored/command/storage/eva) +"ssd" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/button/door/directional/south{ + id = "med_priv_1"; + name = "Privacy Shutters" + }, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_a) +"ssi" = ( +/obj/effect/turf_decal/bot, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron, +/area/station/engineering/main) +"ssz" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible/layer2, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_atmos{ + dir = 8 + }, +/obj/machinery/airlock_sensor/incinerator_atmos{ + pixel_y = 24 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"ssD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"ssL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"ssT" = ( +/obj/structure/flora/rock/pile/jungle/large/style_random, +/obj/structure/flora/tree/jungle/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"stx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"stB" = ( +/obj/machinery/firealarm/directional/south, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"stD" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"stI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/components/trinary/mixer/layer4{ + dir = 1; + name = "turbine mixer" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"stP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"stR" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, +/obj/machinery/requests_console/directional/east{ + anon_tips_receiver = 1; + assistance_requestable = 1; + department = "Research Lab"; + name = "Research Requests Console"; + receive_ore_updates = 1; + can_send_announcements = 1 + }, +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/upgraded, +/turf/open/floor/iron/checker, +/area/station/science/lab) +"stU" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/light/directional/west, +/obj/structure/sign/poster/official/random/directional/west, +/obj/structure/chair, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"sue" = ( +/obj/machinery/cryopod{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"sui" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"sut" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/closet/secure_closet/hydroponics, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics) +"sux" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron/dark/side, +/area/station/service/janitor) +"suC" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"suE" = ( +/obj/machinery/newscaster/directional/south, +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"suH" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat_interior) +"suM" = ( +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness/recreation) +"suU" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Bridge" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/dark/textured, +/area/station/command/bridge) +"suW" = ( +/obj/machinery/requests_console/directional/west{ + assistance_requestable = 1; + department = "Quartermaster's Desk"; + name = "Quartermaster's Desk Requests Console"; + supplies_requestable = 1; + can_send_announcements = 1 + }, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Quartermaster's Office"; + name = "Quartermaster's Fax Machine" + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"suX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance{ + name = "Law Office Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/lawyer, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"svg" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/chair, +/obj/effect/landmark/start/roboticist, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) +"svo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "Departure Lounge Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/exit/departure_lounge) +"svK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/carpet, +/area/station/service/library) +"svN" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/structure/chair, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"svQ" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) +"svV" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"svX" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, +/turf/closed/wall/r_wall, +/area/station/maintenance/starboard/aft) +"swd" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"swp" = ( +/obj/structure/rack, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"swJ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/space_heater, +/turf/open/floor/iron, +/area/station/engineering/storage) +"swR" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/holding_cell) +"swY" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = -5; + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"sxi" = ( +/obj/machinery/light/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"sxo" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/station/command/gateway) +"sxx" = ( +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"sxJ" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/structure/reagent_dispensers/wall/virusfood/directional/west, +/obj/machinery/computer/diseasesplicer, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"sxS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/public/glass{ + name = "Dorms Cross-through" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/iron/dark/textured, +/area/station/maintenance/starboard/aft) +"sxX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/vending/wardrobe/engi_wardrobe, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/engineering/storage_shared) +"syI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"syP" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/table/wood, +/obj/machinery/recharger, +/obj/item/melee/chainofcommand, +/obj/item/hand_tele, +/obj/item/toy/figure/captain{ + pixel_x = -12 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"syW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"szb" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/commons/dorms) +"szd" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/computer/order_console/cook{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/hallway/secondary/service) +"szQ" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"szU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Gateway Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/gateway, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/landmark/navigate_destination/gateway, +/turf/open/floor/iron/textured, +/area/station/command/gateway) +"szW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"szY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"sAh" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/flasher/directional/west{ + id = "Cell 2" + }, +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"sAq" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/storage) +"sAH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/sepia, +/area/station/service/library/artgallery) +"sAJ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "genetics_shutters"; + name = "Genetics Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/science/genetics) +"sAM" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"sAN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"sAQ" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_x = 10; + pixel_y = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"sAY" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"sBq" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/disease2/incubator, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"sBs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"sBx" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/service/hydroponics) +"sBM" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"sBO" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Detective Office Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/detective, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"sBS" = ( +/turf/closed/wall, +/area/station/tcommsat/computer) +"sBT" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/sign/warning/doors/directional/east, +/obj/machinery/light/small/directional/east, +/obj/machinery/door/poddoor/preopen{ + id = "bridge_blast_doors"; + name = "Bridge Access Blast Door" + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"sCj" = ( +/obj/machinery/status_display/evac/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"sDi" = ( +/obj/item/radio/intercom/directional/east{ + freerange = 1; + listening = 0; + name = "Common Channel" + }, +/obj/item/radio/intercom/directional/north{ + freerange = 1; + listening = 0; + name = "Custom Channel" + }, +/obj/item/radio/intercom/directional/south{ + freerange = 1; + frequency = 1447; + listening = 0; + name = "Private Channel" + }, +/obj/effect/landmark/start/ai/secondary, +/obj/machinery/button/door/directional/north{ + id = "secondary_ai_core_shutters"; + name = "Secondary AI Core Shutters Control"; + pixel_x = 24; + req_access = list("ai_upload") + }, +/obj/machinery/button/door/directional/south{ + pixel_x = 24; + req_access = list("ai_upload"); + name = "AI Chamber Lockdown"; + id = "AI Chamber entrance shutters" + }, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai) +"sDk" = ( +/obj/machinery/shower/directional/north, +/obj/item/soap/deluxe, +/obj/item/bikehorn/rubberducky, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/captain/private) +"sDl" = ( +/obj/structure/filingcabinet, +/turf/open/floor/carpet/red, +/area/station/security/detectives_office) +"sDq" = ( +/obj/structure/reagent_dispensers/wall/peppertank/directional/east, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/camera/directional/east, +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"sDr" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics) +"sDz" = ( +/turf/closed/wall, +/area/station/commons/locker) +"sEf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/janitor) +"sEm" = ( +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"sEr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"sEB" = ( +/obj/structure/closet/crate, +/obj/item/clothing/head/utility/hardhat/red, +/obj/item/clothing/head/utility/hardhat/red, +/obj/item/clothing/head/utility/hardhat/red, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/assembly/prox_sensor, +/obj/item/assembly/prox_sensor, +/obj/item/assembly/prox_sensor, +/obj/item/bodypart/arm/right/robot, +/obj/item/bodypart/arm/right/robot, +/obj/item/bodypart/arm/right/robot, +/obj/item/extinguisher, +/obj/item/extinguisher, +/obj/item/extinguisher, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"sEO" = ( +/turf/closed/wall/r_wall, +/area/station/science/xenobiology/hallway) +"sFb" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/book/manual/wiki/security_space_law, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"sFf" = ( +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"sFl" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"sFp" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"sFv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Post - Arrivals" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron/dark/textured, +/area/station/security/checkpoint/customs/auxiliary) +"sFH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"sFS" = ( +/obj/machinery/light/directional/south, +/obj/structure/dresser, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/service/theater) +"sGk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"sGm" = ( +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"sHk" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"sHl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/science/ordnance/office) +"sHr" = ( +/turf/open/floor/iron/dark, +/area/station/security/office) +"sHs" = ( +/turf/closed/wall, +/area/station/service/bar) +"sHw" = ( +/obj/effect/turf_decal/bot_white/left, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"sHG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"sHP" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/library/private) +"sHR" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"sIr" = ( +/obj/structure/cable, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/textured, +/area/station/security/interrogation) +"sIG" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Security - Prison Access"; + name = "security camera" + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"sIJ" = ( +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron, +/area/station/science/ordnance) +"sIK" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"sJi" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/shower/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"sJl" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/small/directional/south, +/obj/structure/closet/crate, +/obj/item/stack/ore/glass/basalt, +/obj/item/stack/ore/glass/basalt, +/obj/item/stack/ore/glass/basalt, +/obj/item/stack/ore/glass/basalt, +/obj/item/stack/ore/glass/basalt, +/turf/open/floor/plating, +/area/station/maintenance/port) +"sJm" = ( +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"sJH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/floor/has_bulb, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"sJJ" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"sJM" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/item/flashlight/lantern, +/obj/item/pickaxe, +/turf/open/floor/plating, +/area/station/maintenance/port) +"sJW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white/textured, +/area/station/medical/medbay/aft) +"sKd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/electrolyzer, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"sKg" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/storage/box/trackimp{ + pixel_x = -3 + }, +/obj/item/storage/box/chemimp{ + pixel_x = 6 + }, +/obj/item/storage/lockbox/loyalty, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"sKj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) +"sKo" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/eight, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"sKq" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2{ + dir = 9 + }, +/turf/open/space/basic, +/area/space/nearstation) +"sKr" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/mirror/directional/west, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"sKs" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"sKy" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/vending/wallmed/directional/west, +/obj/structure/closet/crate/freezer/blood, +/obj/machinery/light/small/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"sKX" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 5 + }, +/turf/open/space/basic, +/area/space/nearstation) +"sKY" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"sLa" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/light/directional/south, +/obj/structure/cable, +/obj/item/stack/sheet/cardboard{ + amount = 14 + }, +/obj/item/stack/package_wrap, +/turf/open/floor/iron/dark, +/area/station/security/prison/work) +"sLg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat_interior) +"sLh" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Security - Justice Chamber Airlock"; + name = "security camera" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/engine, +/area/station/security/execution) +"sLl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"sLn" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/effect/landmark/start/hangover, +/turf/open/floor/carpet/purple, +/area/station/commons/dorms) +"sLo" = ( +/obj/structure/table, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/dorms) +"sLz" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"sLG" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/white, +/area/station/science/research) +"sLK" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/firealarm/directional/south, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"sLP" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"sMe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/radio/intercom/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"sMk" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"sMr" = ( +/obj/structure/lattice, +/obj/structure/sign/nanotrasen{ + pixel_y = -32 + }, +/turf/open/space, +/area/space/nearstation) +"sMy" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning, +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"sMN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain) +"sMO" = ( +/obj/machinery/computer/message_monitor{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/tcommsat/computer) +"sMS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/backpack/duffelbag, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"sMY" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/closet/emcloset, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"sNb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"sNf" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"sNl" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/conveyor{ + id = "package_sort_2" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) +"sNm" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/newscaster/directional/south, +/obj/structure/table, +/obj/item/multitool, +/turf/open/floor/iron/dark/side, +/area/station/cargo/office) +"sNp" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"sNK" = ( +/obj/structure/table/wood, +/obj/structure/cassette_rack{ + pixel_y = 10 + }, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"sNP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/central) +"sNZ" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"sOa" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"sOh" = ( +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"sOm" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Secure Tech Storage" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"sOo" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"sOp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/medical/cryo) +"sOV" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/vending/coffee, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"sPy" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light/directional/north, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"sPC" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"sPJ" = ( +/obj/structure/closet/radiation, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"sPN" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"sPR" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"sPX" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/sign/warning/cold_temp/directional/west, +/turf/open/floor/plating/reinforced, +/area/station/science/research) +"sQf" = ( +/obj/structure/table/wood, +/obj/item/taperecorder{ + pixel_x = 9; + pixel_y = 9 + }, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/office) +"sQo" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"sQv" = ( +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"sQz" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + location = "QM #2" + }, +/mob/living/simple_animal/bot/mulebot{ + home_destination = "QM #2"; + suffix = "#2" + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/storage) +"sQF" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"sQH" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/storage/primary) +"sQL" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/table, +/obj/item/storage/backpack/duffelbag/med/surgery, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) +"sQN" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/airalarm/directional/south, +/obj/machinery/vending/autodrobe, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/service/theater) +"sQS" = ( +/obj/effect/landmark/carpspawn, +/turf/open/space/basic, +/area/space) +"sRp" = ( +/obj/structure/flora/rock/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"sRs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=QM"; + location = "CHW" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"sRt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"sRA" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"sRJ" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"sRU" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad2" + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/station/cargo/storage) +"sRZ" = ( +/turf/closed/wall, +/area/station/engineering/storage/tech) +"sSc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"sSf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/science/explab) +"sSA" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness) +"sSM" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/telecomms/message_server/preset, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"sSP" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"sTi" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/small/directional/west, +/obj/machinery/camera/autoname/directional/west{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"sTD" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/disposal/bin, +/obj/structure/cable, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/sign/warning/deathsposal/directional/north, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal/incinerator) +"sTE" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/chair, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/storage) +"sTW" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/glass, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/spawner/random/aimodule/harmless, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"sUf" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"sUl" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"sUv" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/miningoffice) +"sUx" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/turf/open/floor/wood, +/area/station/maintenance/starboard/aft) +"sUW" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/chair/sofa/corp/left{ + color = "#7fb3d5"; + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"sVg" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white, +/area/station/science/research) +"sVp" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"sVt" = ( +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"sVE" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/defibrillator_mount/directional/west, +/obj/machinery/computer/operating{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"sVK" = ( +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/effect/spawner/random/engineering/material_cheap, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"sVO" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/table/reinforced, +/obj/item/stock_parts/cell/high{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/stock_parts/cell/high{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stock_parts/cell/high, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"sVP" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/station/engineering/gravity_generator) +"sWa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"sWc" = ( +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/station/solars/starboard/fore) +"sWg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"sWl" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/entertainment/toy_figure, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"sWm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"sWn" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/line, +/obj/machinery/atm, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"sWq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/telecomms/processor/preset_one, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"sWt" = ( +/obj/structure/table/reinforced, +/obj/item/assembly/timer, +/obj/item/assembly/prox_sensor{ + pixel_x = -4 + }, +/obj/item/assembly/signaler{ + pixel_x = 6; + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"sWx" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/janitor) +"sWy" = ( +/turf/open/floor/iron, +/area/station/engineering/storage_shared) +"sWE" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"sWF" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/easel, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"sWO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/structure/furniture_parts, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"sWP" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/machinery/photocopier, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/cargo/office) +"sWU" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"sWX" = ( +/obj/machinery/holopad, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"sXd" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/computer/cloning{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/genetics/cloning) +"sXe" = ( +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"sXl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"sXx" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_x = -1; + pixel_y = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics) +"sXy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output{ + dir = 8 + }, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos) +"sXC" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/chair/comfy/beige{ + dir = 1 + }, +/obj/effect/landmark/start/chief_engineer, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"sXL" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"sXO" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" + }, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "atmos_rad_shutters"; + name = "Radiation Shutters" + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"sYb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"sYe" = ( +/obj/effect/turf_decal/trimline/dark_red/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"sYi" = ( +/obj/machinery/door/airlock/external{ + name = "Exploration Shuttle Dock" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/research/abandoned) +"sYk" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating/reinforced, +/area/station/science/research) +"sYs" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - Atmospherics Mix Chamber"; + name = "engineering camera" + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) +"sYt" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold{ + dir = 4 + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"sYv" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"sYw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/window/right/directional/north{ + name = "Ordnance Launcher"; + req_access = list("ordnance") + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"sYH" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/rnd/production/protolathe/department/science, +/turf/open/floor/iron/white, +/area/station/science/lab) +"sYI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/curtain/cloth, +/turf/open/floor/iron/white/textured, +/area/station/science/robotics/lab) +"sYV" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/sorting) +"sZe" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light_switch/directional/north{ + pixel_x = -4 + }, +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "pathology_airlock_exterior"; + idInterior = "pathology_airlock_interior"; + idSelf = "pathology_airlock_control"; + name = "Pathology Access Console"; + pixel_y = 24; + req_access = list("pathology"); + pixel_x = 6 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Medical - Pathology, Primary Lab"; + name = "medical camera"; + network = list("ss13","medbay") + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"sZi" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"sZj" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"sZo" = ( +/obj/effect/spawner/random/structure/girder, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"sZt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/science/explab) +"sZC" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"sZG" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/pharmacy) +"sZI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"sZN" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"sZR" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"sZV" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4; + name = "freezer passive vent" + }, +/turf/open/floor/iron/freezer, +/area/station/science/xenobiology) +"sZY" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "engineering"; + name = "Engineering Blast Door" + }, +/turf/open/floor/plating, +/area/station/engineering/storage) +"tal" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/machinery/button/door/directional/east{ + id = "tele_shutter"; + name = "Teleporter Shutter Control"; + req_access = list("teleporter") + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"tar" = ( +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"tas" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/carbon_output{ + dir = 8 + }, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) +"taA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"taN" = ( +/obj/structure/table, +/obj/item/radio/off, +/obj/item/screwdriver, +/turf/open/floor/iron/dark, +/area/station/security/office) +"tbc" = ( +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/smooth_half{ + dir = 8 + }, +/area/station/command/gateway) +"tbg" = ( +/turf/open/floor/wood, +/area/station/security/detectives_office) +"tbn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"tbo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"tbp" = ( +/turf/closed/wall, +/area/station/hallway/primary/aft) +"tbt" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/small/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/glass, +/obj/item/storage/medkit/regular{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/storage/medkit/toxin{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/toxin, +/obj/item/storage/medkit/toxin{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/machinery/door/window/right/directional/west{ + name = "First-Aid Supplies"; + req_access = list("medical") + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"tbw" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/neutral/corner, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/sign/warning/vacuum/external/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"tbG" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/table, +/obj/item/radio/off, +/obj/item/screwdriver{ + pixel_y = 10 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"tbI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/cable_coil/cut, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"tbO" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"tbY" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/five, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"tcg" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/carpet/orange, +/area/station/security/prison/safe) +"tco" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/vending/wallmed/directional/north, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_b) +"tcw" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"tcF" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"tcH" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"tcJ" = ( +/obj/machinery/keycard_auth{ + pixel_x = -24 + }, +/obj/machinery/computer/cargo{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"tcM" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "hos_privacy"; + name = "HoS Office Privacy Shutters" + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/hos) +"tcO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) +"tcP" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance) +"tcR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"tcY" = ( +/turf/closed/wall, +/area/station/security/interrogation) +"tcZ" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"tdv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"tdz" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "cap_privacy" + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/captain) +"tdG" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/structure/closet/secure_closet/engineering_personal, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/engineering/storage_shared) +"tdR" = ( +/obj/structure/cable, +/obj/machinery/power/energy_accumulator/tesla_coil/anchored, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"tdV" = ( +/obj/machinery/conveyor{ + dir = 10; + id = "garbage" + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"tef" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"tei" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port) +"teq" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/warning, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"tet" = ( +/obj/machinery/door/airlock/external{ + name = "Hypertorus Fusion Reactor" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "external-hfr" + }, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/atmos/hfr_room) +"teE" = ( +/obj/structure/cable, +/obj/machinery/power/smes{ + charge = 5e+006; + name = "ai power storage unit" + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/turret_protected/ai) +"teM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/closet/secure_closet/atmospherics, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"teQ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/newscaster/directional/east, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"teS" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/announcement_system, +/turf/open/floor/iron/dark, +/area/station/tcommsat/computer) +"tfb" = ( +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness/recreation) +"tfF" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"tfG" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 1 + }, +/obj/machinery/vending/medical, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"tfN" = ( +/obj/machinery/light/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door/directional/south{ + id = "chem_factory_shutters"; + req_access = list("pharmacy") + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"tfS" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"tgl" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/light/neon_lining{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) +"tgq" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/door/window/right/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"tgG" = ( +/turf/closed/wall, +/area/station/maintenance/department/engine/atmos) +"tgJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor/massdriver_trash, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"tgW" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/science/ordnance/testlab) +"thf" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"thk" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"thA" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"thD" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_b) +"thT" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer2, +/obj/machinery/air_sensor/ordnance_freezer_chamber, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/freezerchamber) +"tir" = ( +/turf/closed/wall/r_wall, +/area/station/medical/virology) +"tiN" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/effect/landmark/start/hangover, +/turf/open/floor/carpet/red, +/area/station/commons/dorms) +"tiT" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/white, +/area/station/science/research) +"tiV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Labor Shuttle Dock" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/turf/open/floor/iron/dark/textured, +/area/station/security/processing) +"tja" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"tjC" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/white, +/area/station/science/research) +"tjI" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"tjP" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/camera/directional/east{ + c_tag = "Central Hallway East - Teleporter Access"; + name = "hallway camera" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"tjR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/sign/departments/medbay/alt/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"tkC" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) +"tkE" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"tkP" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/spray/plantbgone, +/obj/item/reagent_containers/spray/pestspray{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/bottle/nutrient/ez, +/obj/item/reagent_containers/cup/bottle/nutrient/rh{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics/garden) +"tkR" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 10 + }, +/obj/item/assembly/igniter{ + pixel_y = -3 + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"tlg" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/machinery/conveyor{ + dir = 10; + id = "QMLoad" + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/cargo/storage) +"tln" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/wood, +/obj/item/clipboard, +/obj/item/folder/red, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/station/security/detectives_office) +"tlp" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"tlq" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/machinery/firealarm/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"tlz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"tlA" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/money{ + pixel_y = 8 + }, +/obj/effect/spawner/random/entertainment/money, +/turf/open/floor/carpet/green, +/area/station/maintenance/starboard/aft) +"tlO" = ( +/turf/closed/wall/r_wall, +/area/station/tcommsat/computer) +"tlW" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/spawner/directional/north, +/obj/structure/table/glass, +/obj/item/pai_card, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"tmj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"tmI" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/jungle/b/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/aft) +"tmP" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"tmQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/closet/firecloset, +/obj/machinery/camera/directional/south{ + c_tag = "Central Hallway Southeast"; + name = "hallway camera" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"tmR" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/clothing/costume, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"tnh" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Holodeck - Fore"; + name = "holodeck camera" + }, +/turf/open/floor/engine{ + name = "Holodeck Projector Floor" + }, +/area/station/holodeck/rec_center) +"tnk" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"tnt" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"tnu" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/line, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"tnK" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 9 + }, +/obj/machinery/firealarm/directional/north, +/obj/structure/sign/poster/official/random/directional/west, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"tnM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"tnN" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/food_cart, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"tnQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"tnW" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"tof" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"toh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"tom" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"tos" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"tot" = ( +/obj/machinery/teleport/hub, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"tou" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"toD" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"toN" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"toY" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/arrow_ccw{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"tpk" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"tpm" = ( +/turf/closed/wall, +/area/station/bitrunning/den) +"tpn" = ( +/obj/structure/sink/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"tpr" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/chair, +/obj/effect/landmark/start/roboticist, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) +"tpC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"tpL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"tpO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/service{ + name = "Kitchen" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/effect/landmark/navigate_destination/kitchen, +/turf/open/floor/iron/dark/textured, +/area/station/service/kitchen) +"tpU" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"tpV" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_x = 7 + }, +/obj/machinery/recharger{ + pixel_x = -7 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"tqd" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/random{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"tqj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/small/directional/east, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/auxlab) +"tqy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"tqH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"tqK" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"tqP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/holding_cell) +"tqT" = ( +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"trg" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/dresser, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"trh" = ( +/obj/structure/sign/departments/engineering/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"trv" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/stove, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"trz" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/incinerator_input{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"trQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"trS" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/plating, +/area/station/tcommsat/computer) +"trV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Post - Cargo" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron/dark/textured, +/area/station/security/checkpoint/supply) +"trZ" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"tsd" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Atmospherics External Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/atmos/storage) +"tsh" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"tsi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) +"tsn" = ( +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"tsv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"tsw" = ( +/obj/structure/table, +/obj/item/storage/dice, +/obj/effect/spawner/random/entertainment/coin, +/turf/open/floor/iron, +/area/station/commons/dorms) +"tsD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/mop_bucket, +/obj/item/mop, +/turf/open/floor/plating, +/area/station/maintenance/port) +"tsL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) +"tsN" = ( +/turf/open/floor/iron/dark/side, +/area/station/hallway/secondary/exit/departure_lounge) +"tsP" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/rack, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/clothing/suit/armor/riot{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/shield/riot{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/shield/riot, +/obj/item/shield/riot{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"ttl" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"tto" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"ttr" = ( +/obj/structure/cable, +/obj/structure/chair/wood{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"ttt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/security/prison/workout) +"ttC" = ( +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/item/kirbyplants/dead, +/turf/open/floor/iron/vaporwave, +/area/station/command/heads_quarters/rd) +"ttD" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"ttK" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/light/small/directional/south, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"ttO" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/obj/structure/table, +/obj/item/toy/cards/deck, +/obj/item/coin/silver{ + pixel_y = 6; + pixel_x = -3 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"tuk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Chief Medical Officer's Quarters" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/cmo, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/cmo) +"tum" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"tuu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"tux" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/effect/spawner/random/bureaucracy/folder{ + pixel_y = 6 + }, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_y = 6 + }, +/turf/open/floor/iron, +/area/station/commons/dorms) +"tuX" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/central) +"tvc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"tve" = ( +/obj/structure/chair/sofa/corp/right{ + color = "#7fb3d5"; + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/light/directional/west, +/turf/open/floor/carpet/cyan, +/area/station/ai_monitored/turret_protected/ai_upload) +"tvh" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"tvj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"tvk" = ( +/obj/effect/spawner/random/structure/chair_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"tvl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"tvo" = ( +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"tvq" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/bodycontainer/morgue{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"tvs" = ( +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness/recreation) +"tvt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/office) +"tvC" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/power/shieldwallgen, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"tvK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"tvQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Art Gallery" + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/library/artgallery) +"tvS" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/engineering/break_room) +"tvV" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner, +/turf/open/floor/iron/white, +/area/station/science/lab) +"tvX" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/obj/machinery/duct, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/prison) +"tvZ" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/commons/locker) +"twi" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/west{ + name = "Security Delivery"; + req_access = list("security") + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"twj" = ( +/obj/machinery/status_display/ai{ + pixel_x = -32 + }, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"twl" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"twn" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/machinery/computer/camera_advanced/base_construction/aux{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"twN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"twO" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/wood, +/area/station/service/library) +"twQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"twS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"twU" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/structure/table, +/obj/item/storage/box/lights/mixed, +/obj/item/storage/box/lights/mixed, +/obj/item/lightreplacer, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/janitor) +"twW" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/dorms) +"txf" = ( +/obj/machinery/atmospherics/components/trinary/mixer/airmix{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"txx" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/machinery/light_switch/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/science/server) +"txI" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) +"tyq" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"tyt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/obj/item/restraints/handcuffs/cable/zipties/used, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"tyC" = ( +/obj/machinery/firealarm/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron, +/area/station/science/ordnance/office) +"tyF" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/stamp/hop, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/hop) +"tyG" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/airalarm/directional/south, +/obj/structure/table/glass, +/obj/item/roller{ + pixel_y = 6 + }, +/obj/item/roller{ + pixel_y = 11 + }, +/obj/item/roller{ + pixel_y = 13 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"tzc" = ( +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"tzf" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) +"tzg" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/storage/box/monkeycubes, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"tzi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"tzk" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 6 + }, +/obj/machinery/firealarm/directional/east, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/server) +"tzm" = ( +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/hop) +"tzr" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/storage/box/donkpockets/donkpocketteriyaki, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"tzs" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"tzy" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/sign/departments/chemistry/pharmacy/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"tzN" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"tzU" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"tzV" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"tzZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"tAb" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) +"tAf" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"tAk" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/obj/machinery/vending/drugs, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"tAr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"tAK" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"tBh" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"tBn" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"tBp" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/structure/closet/secure_closet{ + req_access = list("security"); + name = "Ammo Locker - Lethal" + }, +/obj/item/storage/box/lethalshot{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/storage/box/lethalshot, +/obj/item/storage/box/lethalshot{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/ammo_box/magazine/m35{ + pixel_y = -6; + pixel_x = -6 + }, +/obj/item/ammo_box/magazine/m35{ + pixel_y = -3; + pixel_x = -3 + }, +/obj/item/ammo_box/magazine/m35, +/obj/item/ammo_box/magazine/m35{ + pixel_y = 3; + pixel_x = 3 + }, +/obj/item/ammo_box/magazine/m35{ + pixel_y = 6; + pixel_x = 6 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"tBq" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/random{ + dir = 4 + }, +/obj/effect/landmark/start/janitor, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/janitor) +"tBD" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space, +/area/station/solars/port/fore) +"tBI" = ( +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness/recreation) +"tCM" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness/recreation) +"tCR" = ( +/obj/machinery/holopad, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"tCW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"tDa" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/chemistry) +"tDk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"tDV" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/work) +"tEg" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/machinery/meter, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"tEm" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + id = "chem_factory_shutters"; + name = "Chem Factory Shutter" + }, +/turf/open/floor/iron/white/textured, +/area/station/maintenance/starboard/aft) +"tEB" = ( +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/storage) +"tEK" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"tET" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/structure/closet/secure_closet/miner{ + anchored = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/cargo/miningoffice) +"tEZ" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics) +"tFb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"tFs" = ( +/obj/machinery/firealarm/directional/south, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"tFK" = ( +/turf/closed/wall/r_wall, +/area/station/security/prison/garden) +"tFM" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"tGl" = ( +/obj/structure/bodycontainer/morgue{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"tGq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/storage) +"tGA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/east{ + name = "Hydroponics Desk"; + req_access = list("kitchen") + }, +/obj/machinery/door/window/left/directional/west{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "hydro_kitchen_shutters"; + name = "Hydro-Kitchen Shutters"; + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/hydroponics) +"tGD" = ( +/obj/effect/turf_decal/trimline/purple/line, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"tGK" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/structure/sign/departments/evac/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"tGT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"tGW" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"tHc" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/light/small/directional/north, +/obj/structure/chair, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"tHx" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"tHB" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/table, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_a) +"tIp" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/mob/living/carbon/human/species/monkey, +/turf/open/floor/grass, +/area/station/medical/virology) +"tIw" = ( +/obj/structure/sign/painting/library{ + pixel_y = -32 + }, +/turf/open/floor/wood, +/area/station/service/library) +"tIF" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"tIO" = ( +/obj/machinery/hydroponics/soil, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"tIU" = ( +/turf/open/floor/iron/dark/smooth_large, +/area/station/maintenance/department/security) +"tJd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"tJu" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"tJy" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) +"tJE" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics) +"tJF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/silver{ + name = "Crematorium" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/crematorium, +/turf/open/floor/iron/dark/textured, +/area/station/service/chapel/office) +"tJM" = ( +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"tJO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/open/floor/iron/white/textured, +/area/station/medical/office) +"tJS" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/warning, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"tJZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/molten_object/large, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"tKm" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/obj/structure/transit_tube/crossing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space, +/area/space/nearstation) +"tKp" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark_red/corner, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"tKr" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/shaft_miner, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"tKG" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox{ + pixel_y = 6 + }, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/spawner/random/engineering/toolbox{ + pixel_y = -6 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"tKL" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/storage) +"tKW" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/status_display/evac/directional/west, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"tKX" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"tLj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/wood, +/area/station/service/bar) +"tLo" = ( +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"tLs" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"tLt" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/large, +/area/station/engineering/break_room) +"tLu" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port) +"tLv" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"tLM" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"tLN" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/table/glass, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/wrench/medical, +/obj/item/gun/syringe, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"tLT" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/sink/directional/west, +/turf/open/floor/iron/white, +/area/station/science/research) +"tMr" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"tMt" = ( +/obj/machinery/door/airlock/grunge{ + id_tag = "toilet_5"; + name = "Stall 5" + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"tMu" = ( +/obj/structure/lattice/catwalk, +/obj/item/stack/cable_coil, +/obj/structure/sign/warning/electric_shock/directional/west, +/turf/open/space/basic, +/area/station/solars/port/aft) +"tMU" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "qm_privacy"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) +"tNd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"tNo" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/medical/cryo) +"tNr" = ( +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"tNE" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"tNG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"tNK" = ( +/obj/machinery/artifact_xray, +/turf/open/floor/engine, +/area/station/science/explab) +"tNL" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/chair/stool/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"tNM" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "Burn Chamber" + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"tNO" = ( +/obj/machinery/airalarm/directional/south, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/carpet/red, +/area/station/security/detectives_office) +"tNQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"tOb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"tOd" = ( +/obj/structure/light_construct/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/construction) +"tOe" = ( +/obj/item/radio/intercom/directional/west, +/obj/structure/tank_holder/oxygen, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"tOj" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"tOn" = ( +/obj/structure/grille, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"tOB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Custodial Closet Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/janitor, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) +"tOJ" = ( +/turf/closed/wall/r_wall, +/area/station/science/lab) +"tOY" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/station/service/library) +"tPs" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/machinery/conveyor/inverted{ + dir = 5; + id = "QMLoad" + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/storage) +"tPw" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/money{ + pixel_y = 8 + }, +/obj/effect/spawner/random/entertainment/money, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/carpet/green, +/area/station/maintenance/starboard/aft) +"tPP" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) +"tPZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Visitation" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/visit) +"tQa" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/station/engineering/transit_tube) +"tQg" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"tQl" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"tQm" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/carpet/cyan, +/area/station/medical/break_room) +"tQo" = ( +/obj/machinery/light/directional/west, +/obj/structure/kitchenspike, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"tQD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"tQF" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/reinforced, +/obj/item/disk/nuclear, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"tQJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"tQM" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/vending/security, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"tQS" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) +"tRg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"tRj" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/glass, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"tRo" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Chapel Office Maintenance" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"tRs" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Air to Mix" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"tRz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"tRE" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/bodycontainer/morgue{ + dir = 2 + }, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) +"tRM" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/camera/directional/west{ + c_tag = "Engineering - Atmospherics, Northwest"; + name = "engineering camera" + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"tRU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"tRW" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"tRX" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/obj/machinery/button/door/directional/south{ + id = "sci_west_win_shutters"; + name = "Western Window Shutters Control"; + req_access = list("science") + }, +/obj/structure/closet/l3closet/scientist, +/turf/open/floor/iron/white, +/area/station/science/research) +"tSd" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Xeniobiology - Xenobiology Computers"; + name = "xenobiology camera"; + network = list("ss13","xeno","rd") + }, +/obj/machinery/light/neon_lining{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"tSx" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 5 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"tSE" = ( +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/smooth_large, +/area/station/engineering/main) +"tSN" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness) +"tTg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"tTk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"tTo" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/white, +/area/station/science/research) +"tTs" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"tTx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/office) +"tTR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port) +"tUg" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"tUz" = ( +/obj/docking_port/stationary/random{ + name = "lavaland"; + shuttle_id = "pod_lavaland"; + dir = 8 + }, +/turf/open/space, +/area/space) +"tUA" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/newscaster/directional/east, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"tUG" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/light/directional/south, +/obj/machinery/computer/operating{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/exam_room) +"tUH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"tUK" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"tUT" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/engineering/break_room) +"tUV" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/corner, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"tVt" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"tVz" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"tVD" = ( +/obj/machinery/duct, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"tVM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters{ + id = "qm_warehouse"; + name = "Warehouse Shutters"; + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/warehouse) +"tVY" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"tWv" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "atmos_hfr"; + name = "HFR Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/hfr_room) +"tWx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"tWy" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"tWN" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1 + }, +/obj/structure/railing{ + dir = 4; + layer = 4.1 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"tWP" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/chair/comfy/teal{ + dir = 1 + }, +/obj/effect/landmark/start/chief_medical_officer, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"tWQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrogen_output{ + dir = 8 + }, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos) +"tWR" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/carpet, +/area/station/service/chapel) +"tWX" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/station/solars/starboard/aft) +"tXa" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/camera/autoname/directional/north, +/obj/structure/table, +/obj/item/storage/briefcase/lawyer, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"tXj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/science/ordnance/office) +"tXk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/frame/machine, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"tXu" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) +"tXM" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"tXP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/chem_heater/withbuffer, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"tYb" = ( +/obj/effect/turf_decal/trimline/neutral/warning, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"tYj" = ( +/obj/machinery/light/floor/has_bulb, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/station/hallway/secondary/exit/departure_lounge) +"tYl" = ( +/turf/open/floor/iron/dark/corner, +/area/station/commons/dorms) +"tYz" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/obj/structure/sign/departments/engineering/directional/east, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"tYE" = ( +/obj/machinery/light_switch/directional/east, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"tYO" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"tYU" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/office) +"tZa" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/shower/directional/west, +/turf/open/floor/iron/textured, +/area/station/engineering/main) +"tZd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"tZe" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"tZi" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"tZl" = ( +/obj/structure/table/wood, +/obj/item/storage/photo_album/prison, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"tZr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Dormitories Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"tZH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/storage) +"tZU" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"uaf" = ( +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"uan" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/primary/fore) +"uaq" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/machinery/vending/wardrobe/hydro_wardrobe, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/service/hydroponics) +"uaB" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"uaC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/service/library) +"uaL" = ( +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"uaO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"ubp" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"ubz" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/computer/records/medical, +/turf/open/floor/iron, +/area/station/medical/paramedic) +"ubE" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/camera/autoname/directional/north, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness/recreation) +"uch" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"uck" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/requests_console/directional/south{ + anon_tips_receiver = 1; + assistance_requestable = 1; + department = "Bridge"; + name = "Bridge Requests Console"; + can_send_announcements = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"ucr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/morgue{ + name = "Confession Booth" + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/chapel/office) +"ucv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"ucG" = ( +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"ucJ" = ( +/turf/closed/wall, +/area/station/maintenance/disposal) +"ucO" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/structure/sink/directional/south, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/service/hydroponics/garden) +"ucP" = ( +/turf/closed/wall, +/area/station/cargo/office) +"udb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + id_tag = "cargooffice"; + name = "Cargo Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/landmark/navigate_destination/cargo, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/office) +"udd" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/plaque{ + icon_state = "L6" + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ude" = ( +/obj/effect/turf_decal/trimline/green/filled/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"udl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table, +/obj/item/screwdriver, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"udm" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Engineering - Atmospherics, External HFR Room, West"; + name = "engineering camera" + }, +/obj/structure/closet/secure_closet/atmospherics, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"udB" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/computer/security/labor{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"udQ" = ( +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"ueo" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - MiniSat Transit Pod Access, Internal"; + name = "engineering camera"; + network = list("ss13","rd","xeno_pens"); + start_active = 1 + }, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"uer" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "MiniSat Pod Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination/minisat_access_ai, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "aisat-pathatmos-maint-passthrough" + }, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/transit_tube) +"uet" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"uey" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot, +/obj/machinery/airalarm/directional/north, +/obj/machinery/vending/modularpc, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"ueH" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"ueL" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/detectives_office) +"ufg" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrous_input{ + dir = 8 + }, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"ufk" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"ufl" = ( +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/dorms) +"ufn" = ( +/turf/closed/wall, +/area/station/medical/paramedic) +"ufq" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"ufs" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/break_room) +"ufu" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/pen{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/auxiliary) +"ufA" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/south{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") + }, +/obj/machinery/door/window/right/directional/north{ + name = "Hydroponics Desk" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "hydroponics_shutters"; + name = "Hydroponics Shutters" + }, +/obj/structure/desk_bell{ + pixel_x = 7; + pixel_y = 7 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/hydroponics) +"ufQ" = ( +/obj/effect/turf_decal/box/red, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"ufV" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"ugi" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"ugj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) +"ugn" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/security/glass{ + name = "Isolation Cell"; + id_tag = "iso_cell_hall_bolt" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/duct, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) +"ugy" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/camera/autoname/directional/south, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"ugC" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"ugD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "EVA Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/eva, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/landmark/navigate_destination/eva, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/command/storage/eva) +"ugN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/chem_master, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"ugS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/item/radio/intercom/directional/north, +/obj/machinery/chem_dispenser, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"ugZ" = ( +/obj/machinery/requests_console/directional/east{ + anon_tips_receiver = 1; + assistance_requestable = 1; + department = "Telecomms Admin"; + name = "Telecomms Requests Console" + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/tcommsat/computer) +"uha" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"uhe" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/gateway) +"uho" = ( +/turf/closed/wall, +/area/station/hallway/secondary/entry) +"uhv" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/glass, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/clothing/neck/stethoscope, +/obj/item/clothing/neck/stethoscope, +/obj/item/storage/belt/medical, +/obj/item/storage/belt/medical, +/obj/machinery/door/window/left/directional/west{ + name = "Miscellaneous Medical Supplies"; + req_access = list("medical") + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"uhz" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible, +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine/atmos) +"uhA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "Port Docking Bay 1" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/entry) +"uhG" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"uib" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + id_tag = "inner_brig"; + name = "Brig Entrance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brigentrance" + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/brig/entrance) +"uio" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"uir" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/filingcabinet, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"uis" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"uit" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/pen/red{ + pixel_x = -4 + }, +/obj/item/book/manual/wiki/medicine, +/obj/item/book/manual/wiki/infections{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/reagent_containers/syringe/antiviral, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/hand_labeler, +/obj/item/radio/headset/headset_med, +/obj/machinery/requests_console/auto_name/directional/west{ + department = "Virology"; + name = "Pathology Requests Console"; + receive_ore_updates = 1 + }, +/obj/item/clothing/glasses/science, +/obj/item/extrapolator, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"uiu" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"uiv" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/storage/tech) +"uiA" = ( +/obj/item/food/grown/banana, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"uiJ" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"uiS" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"uiW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/lobby) +"ujk" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/hfr_room) +"ujm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/telecomms/bus/preset_three, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"ujt" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/green/corner{ + dir = 8 + }, +/obj/machinery/firealarm/directional/east{ + pixel_y = 6 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"ujN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Port Quarter Solar Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/landmark/navigate_destination/common/portquartersolar, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"ujV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"ujY" = ( +/turf/open/floor/circuit, +/area/station/ai_monitored/command/nuke_storage) +"ujZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/security/glass{ + name = "Cell 2" + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/safe) +"uki" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/air_input{ + dir = 8 + }, +/turf/open/floor/engine/air, +/area/station/engineering/atmos) +"ukj" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/carpet/cyan, +/area/station/medical/break_room) +"ukk" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Chemistry Factory" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/turf/open/floor/iron/white/textured, +/area/station/maintenance/starboard/aft) +"ukt" = ( +/obj/effect/turf_decal/trimline/red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"ukC" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"ukF" = ( +/obj/structure/table, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/north, +/obj/machinery/door/window/left/directional/south, +/obj/machinery/door/poddoor/shutters{ + id = "visitation"; + name = "Visitation Shutters" + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"ukT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/security/glass{ + name = "Cell 1" + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/safe) +"ukV" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"ukW" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/engineering/break_room) +"ukY" = ( +/obj/structure/table/wood, +/obj/item/device/walkman{ + pixel_y = 7; + pixel_x = -8 + }, +/obj/item/device/walkman{ + pixel_y = 7; + pixel_x = -8 + }, +/obj/item/device/walkman{ + pixel_y = 7; + pixel_x = -8 + }, +/obj/item/device/walkman{ + pixel_y = 7; + pixel_x = -8 + }, +/obj/item/device/walkman{ + pixel_y = 7; + pixel_x = -8 + }, +/obj/item/device/walkman{ + pixel_y = 7; + pixel_x = -8 + }, +/obj/item/device/walkman{ + pixel_y = 7; + pixel_x = -8 + }, +/obj/item/device/walkman{ + pixel_y = 7; + pixel_x = -8 + }, +/obj/item/device/walkman{ + pixel_y = 7; + pixel_x = -8 + }, +/obj/item/device/cassette_tape/blank, +/obj/item/device/cassette_tape/blank, +/obj/item/device/cassette_tape/blank, +/obj/item/device/cassette_tape/blank, +/obj/item/device/cassette_tape/blank, +/obj/item/device/cassette_tape/blank, +/obj/item/device/cassette_tape/blank, +/obj/item/device/cassette_tape/blank, +/obj/item/device/cassette_tape/blank, +/obj/item/device/cassette_tape/random{ + pixel_y = 8 + }, +/obj/item/device/cassette_tape/random{ + pixel_y = 8 + }, +/obj/item/device/cassette_tape/random{ + pixel_y = 8 + }, +/obj/item/device/cassette_tape/random{ + pixel_y = 8 + }, +/obj/item/device/cassette_tape/random{ + pixel_y = 8 + }, +/obj/item/device/cassette_tape/friday{ + pixel_y = 2; + pixel_x = 9 + }, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"ukZ" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"ula" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"ulf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/engineering{ + name = "Auxiliary Construction Storage" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"ulm" = ( +/turf/open/floor/carpet, +/area/station/maintenance/starboard/fore) +"ulO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"ulQ" = ( +/obj/machinery/light/small/broken/directional/west, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/clothing/gloves, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"ulR" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/landmark/start/atmospheric_technician, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"ulW" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"umd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"ume" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"umi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/office) +"umz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) +"umJ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/chair/stool/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness) +"umL" = ( +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"umO" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/leafy, +/mob/living/basic/butterfly, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/grass, +/area/station/command/bridge) +"umP" = ( +/obj/structure/sign/poster/official/do_not_question/directional/east, +/obj/machinery/cryopod{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"umX" = ( +/obj/effect/mapping_helpers/iannewyear, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/hop) +"une" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/closet/l3closet/virology, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"unj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"unQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"unV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"uob" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/structure/table/glass, +/turf/open/floor/iron/white, +/area/station/science/research) +"uof" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"uol" = ( +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"uoo" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"uou" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible/layer4, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos) +"uov" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"uox" = ( +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/iron, +/area/station/science/ordnance) +"uoE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"uoF" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/security/prison) +"uoH" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor/massdriver_chapel, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/chapel/funeral) +"uoX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"upb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/library) +"upz" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/defibrillator_mount/directional/east, +/obj/machinery/computer/operating{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"uqn" = ( +/obj/machinery/atmospherics/components/binary/valve, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"uqt" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/red/corner, +/obj/structure/statue/silver/sec{ + name = "Statue of Security Officer Doe"; + desc = "You were good son, real good; maybe even the best." + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"uqM" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/maintenance/port) +"uqS" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics/garden) +"urb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/light_switch/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"ure" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"urh" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/trimline/blue/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"urk" = ( +/obj/structure/table/wood, +/obj/item/newspaper{ + pixel_x = 8; + pixel_y = 10 + }, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/carpet/red, +/area/station/commons/vacant_room/office) +"urm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_y = 3 + }, +/obj/effect/spawner/random/bureaucracy/folder{ + pixel_y = 5 + }, +/obj/item/pen{ + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"urn" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"urt" = ( +/obj/item/shard{ + icon_state = "medium" + }, +/obj/item/circuitboard/computer/operating, +/turf/open/floor/iron/white, +/area/station/maintenance/port/fore) +"uru" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"urJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/north, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"urW" = ( +/turf/open/floor/iron/dark, +/area/station/security/prison/workout) +"urZ" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/smartfridge/chemistry/preloaded, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry) +"usd" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/oil/slippery, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"usg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"usv" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning, +/turf/open/floor/iron/dark/side, +/area/station/cargo/lobby) +"usR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/layer3, +/turf/open/floor/engine, +/area/station/ai_monitored/command/storage/satellite) +"uth" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/light/directional/west, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"utj" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"utm" = ( +/obj/structure/table, +/obj/item/stack/sheet/plasteel/fifty, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"utw" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"utD" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/line, +/obj/machinery/iv_drip, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"utE" = ( +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/light/directional/north, +/obj/machinery/button/door/directional/north{ + id = "hydroponics_shutters"; + name = "Hydroponics Shutters Control"; + req_access = list("hydroponics") + }, +/obj/structure/chair, +/obj/effect/landmark/start/botanist, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/hydroponics) +"utG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) +"utO" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/light/directional/north, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"utT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"utV" = ( +/obj/structure/table/optable{ + desc = "A cold, hard place for your final rest."; + name = "Morgue Slab" + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"utW" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/chair, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/storage) +"uuh" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/guillotine, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"uui" = ( +/obj/machinery/light/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"uuj" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"uum" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/vending/wardrobe/sec_wardrobe, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"uut" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"uuA" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/doppler_array{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"uuD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/grunge{ + id_tag = "dorm_6"; + name = "Dorm 6" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms) +"uuG" = ( +/turf/open/floor/eighties/red, +/area/station/service/theater) +"uuZ" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"uvm" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Library - Private Study"; + dir = 9; + name = "library camera" + }, +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/station/service/library/private) +"uvP" = ( +/obj/structure/table, +/obj/item/kitchen/fork/plastic, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"uvU" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/newscaster/directional/west, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"uwd" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"uwf" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/light, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"uwq" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/chief_medical_officer, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) +"uwr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"uwv" = ( +/obj/item/radio/intercom/directional/west{ + freerange = 1; + listening = 0; + name = "Common Channel" + }, +/obj/item/radio/intercom/directional/north{ + freerange = 1; + listening = 0; + name = "Custom Channel" + }, +/obj/item/radio/intercom/directional/south{ + freerange = 1; + frequency = 1447; + listening = 0; + name = "Private Channel" + }, +/obj/effect/landmark/start/ai/secondary, +/obj/machinery/button/door/directional/north{ + id = "AI Chamber entrance shutters"; + name = "AI Chamber Lockdown"; + pixel_x = -24; + req_access = list("ai_upload") + }, +/obj/machinery/button/door/directional/south{ + pixel_x = -24; + id = "tertiary_ai_core_shutters"; + name = "Tertiary AI Core Shutters Control"; + req_access = list("ai_upload") + }, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai) +"uwx" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/break_room) +"uwJ" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted, +/obj/structure/table, +/obj/effect/spawner/random/clothing/gloves, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/iron, +/area/station/maintenance/port) +"uwZ" = ( +/obj/machinery/airalarm/directional/south, +/obj/machinery/seed_extractor, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"uxh" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/captain, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"uxl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"uxx" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/reagent_containers/cup/glass/mug/coco{ + pixel_x = 8; + pixel_y = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) +"uxF" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/security/prison) +"uxM" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "N2O Outlet Pump" + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"uyh" = ( +/obj/structure/cable, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/landmark/start/atmospheric_technician, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"uyr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"uyw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"uyK" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"uyP" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/secure_area/directional/south, +/turf/open/space, +/area/space/nearstation) +"uyQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"uyU" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"uze" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/construction) +"uzn" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) +"uzN" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/cell_5k, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"uAg" = ( +/obj/machinery/the_singularitygen/tesla, +/turf/open/floor/plating, +/area/station/engineering/main) +"uAu" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/machinery/light/built/directional/south, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"uAv" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 1 + }, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"uAy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"uAL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/table/wood, +/obj/item/storage/crayons, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"uAP" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"uBk" = ( +/obj/item/radio/intercom/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Science - Old Exploration Dock"; + name = "science camera"; + network = list("ss13","rd") + }, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"uBt" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"uBC" = ( +/turf/open/floor/iron, +/area/station/cargo/lobby) +"uBE" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"uBI" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"uBL" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"uBX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"uCh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"uCi" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/box/red, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"uCp" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"uCv" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"uCx" = ( +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"uCB" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/captain/private) +"uDj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"uDm" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness/recreation) +"uDB" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/table/glass, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/spawner/random/aimodule/neutral, +/obj/effect/spawner/random/aimodule/neutral{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"uDY" = ( +/mob/living/carbon/human/species/monkey, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/station/medical/virology) +"uEi" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Construction Area" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/construction) +"uEp" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"uEU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/telecomms/processor/preset_two, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"uEZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/office) +"uFo" = ( +/obj/effect/spawner/random/entertainment/coin, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"uFv" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted, +/obj/structure/table, +/obj/item/book/manual/hydroponics_pod_people, +/obj/item/paper/guides/jobs/hydroponics, +/obj/item/grenade/chem_grenade/antiweed{ + pixel_x = -9; + pixel_y = 10 + }, +/obj/item/grenade/chem_grenade/antiweed{ + pixel_x = -9; + pixel_y = 5 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/service/hydroponics) +"uFw" = ( +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"uFH" = ( +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/wood, +/area/station/service/library/private) +"uFU" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"uGk" = ( +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"uGA" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/light/small/directional/north, +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"uGF" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"uGK" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/storage/tech) +"uGS" = ( +/mob/living/basic/chicken, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"uHf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) +"uHg" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"uHo" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible/layer2, +/obj/machinery/air_sensor/incinerator_tank, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"uHs" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/storage) +"uHz" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/computer/prisoner/gulag_teleporter_computer{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"uHC" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"uHD" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"uHE" = ( +/obj/machinery/button/door/directional/north{ + id = "secondary_shop" + }, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"uHM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/virology/glass{ + name = "Virology Containment Cell" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/turf/open/floor/iron/white/textured, +/area/station/medical/virology) +"uHN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "bar_sec_shutters"; + name = "Bar Shutters"; + dir = 8 + }, +/obj/structure/displaycase/forsale/kitchen, +/turf/open/floor/iron/dark/textured, +/area/station/service/bar) +"uIi" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/lavendergrass/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/aft) +"uIk" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"uIl" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"uIy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"uII" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"uIQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/xenobio, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"uJk" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/button/door/directional/south{ + req_access = list("security"); + name = "Security Post Shutters Control"; + id = "engi_security_post" + }, +/obj/machinery/computer/records/security{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"uJm" = ( +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"uJn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + name = "Patient Room 2" + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/patients_rooms/room_b) +"uJu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"uJz" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/sign/directions/evac/directional/east{ + pixel_y = 9 + }, +/obj/structure/sign/directions/science/directional/east, +/obj/structure/sign/directions/security/directional/east{ + dir = 1; + pixel_y = -9 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"uJI" = ( +/obj/structure/rack, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"uJP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"uJQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/chair/sofa/corp{ + color = "#7fb3d5"; + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/light/directional/west, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"uKb" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"uKf" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"uKj" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"uKp" = ( +/obj/structure/mirror/directional/north, +/obj/structure/sink/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"uKy" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"uKB" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/machinery/requests_console/directional/east{ + anon_tips_receiver = 1; + assistance_requestable = 1; + department = "Security"; + name = "Security Requests Console" + }, +/obj/structure/filingcabinet/chestdrawer, +/obj/machinery/button/door/directional/north{ + id = "medbay_foyer"; + name = "Medbay Doors Control"; + req_access = list("medical"); + desc = "A remote control switch for the medbay foyer."; + normaldoorcontrol = 1; + pixel_x = -6 + }, +/obj/machinery/button/door/directional/north{ + name = "Medbay Front Desk Shutters Control"; + req_access = list("medical"); + pixel_x = 6; + id = "medbay_desk_shutters" + }, +/obj/machinery/light_switch/directional/north{ + pixel_y = 34 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"uKL" = ( +/obj/machinery/corral_corner{ + mapping_id = "2" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "2" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"uKO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port) +"uKT" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics/garden) +"uLo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/purple/filled/warning, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"uLz" = ( +/obj/structure/table/wood, +/obj/item/food/grown/poppy{ + pixel_y = 2 + }, +/obj/item/food/grown/poppy{ + pixel_y = 2 + }, +/obj/item/food/grown/poppy{ + pixel_y = 2 + }, +/obj/item/food/grown/poppy{ + pixel_y = 2 + }, +/obj/item/food/grown/poppy{ + pixel_y = 2 + }, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"uLC" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"uLE" = ( +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/machinery/holopad{ + pixel_y = 16; + pixel_x = 16 + }, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry) +"uLI" = ( +/obj/machinery/button/door/directional/east{ + id = "atmos"; + name = "Atmospherics Lockdown"; + req_access = list("atmospherics"); + pixel_y = 6 + }, +/obj/machinery/modular_computer/preset/civilian{ + dir = 8 + }, +/obj/machinery/button/door/directional/east{ + id = "atmos_rad_shutters"; + name = "Atmospherics Radiation Shutters Control"; + req_access = list("atmospherics"); + pixel_y = -6 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"uLJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/white, +/area/station/maintenance/port/fore) +"uLK" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/bed{ + dir = 4 + }, +/obj/item/clothing/suit/jacket/straight_jacket, +/obj/item/clothing/mask/muzzle, +/obj/item/clothing/glasses/blindfold, +/obj/item/electropack, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"uLQ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/requests_console/directional/south{ + department = "Genetics"; + name = "Genetics Requests console"; + supplies_requestable = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"uLS" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/stripes, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Command Chair"; + req_access = list("command") + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"uLT" = ( +/obj/item/wrench, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"uLZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"uMj" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"uMz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/station/cargo/sorting) +"uML" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"uMT" = ( +/obj/structure/sign/poster/contraband/random/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/commons/locker) +"uMW" = ( +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"uNa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/light_switch/directional/east, +/obj/item/radio/intercom/directional/south, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"uNj" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"uNw" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/table/glass, +/obj/item/storage/medkit/regular, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"uNz" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/north{ + name = "Robotics Desk"; + req_access = list("robotics") + }, +/obj/machinery/door/window/left/directional/south{ + name = "Robotics Desk" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics_pub_shutters"; + name = "Robotics Shutters"; + dir = 1 + }, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/turf/open/floor/iron/white/textured, +/area/station/science/robotics/lab) +"uNE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"uNM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"uNS" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/table/glass, +/obj/item/book/manual/wiki/chemistry{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/book/manual/wiki/plumbing, +/obj/item/hand_labeler, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"uNU" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/composters, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"uNX" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"uOf" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/folder/red, +/obj/item/pen, +/turf/open/floor/carpet/red, +/area/station/security/detectives_office) +"uOj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/binary/pump{ + name = "Fuel Pipe to Incinerator" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"uOF" = ( +/obj/docking_port/stationary/random{ + name = "lavaland"; + shuttle_id = "pod_2_lavaland"; + dir = 8 + }, +/turf/open/space, +/area/space) +"uOS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"uPa" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Commons - Vacant Office, Southwest"; + name = "commons camera" + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/firealarm/directional/south, +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"uPg" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"uPs" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"uPx" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden, +/obj/machinery/door/airlock/external{ + name = "Satellite External Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"uPD" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/clothing/suit/apron/surgical, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"uQg" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/engine, +/area/station/ai_monitored/command/storage/satellite) +"uQk" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) +"uQm" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"uQr" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/table/glass, +/obj/item/storage/medkit/regular{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/storage/medkit/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/fire, +/obj/item/storage/medkit/fire{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"uQP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"uQQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"uRe" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/closet/radiation, +/turf/open/floor/iron/textured, +/area/station/engineering/gravity_generator) +"uRq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"uRy" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"uRD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"uRF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"uRJ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"uRK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/closet/secure_closet/exile, +/turf/open/floor/iron/dark/textured, +/area/station/command/gateway) +"uRW" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "3"; + dir = 1 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"uSp" = ( +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"uSG" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"uSI" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"uSJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/warning, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"uSP" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/security/general, +/turf/open/floor/iron/dark, +/area/station/security/office) +"uSR" = ( +/obj/structure/grille, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"uTb" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/rack, +/obj/item/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/clothing/gloves/color/yellow, +/obj/item/t_scanner, +/obj/item/multitool, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"uTo" = ( +/obj/machinery/suit_storage_unit/atmos, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"uTq" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"uTw" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/structure/sign/poster/official/report_crimes/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"uTH" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/turf_decal/box/red, +/obj/structure/sign/warning/secure_area/directional/south, +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/turret_protected/aisat_interior) +"uUa" = ( +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness/recreation) +"uUp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/paramedic) +"uUq" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"uUC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/showcase/cyborg/old{ + dir = 4; + pixel_x = -9; + pixel_y = 2 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"uUN" = ( +/obj/machinery/door/poddoor{ + id = "ord_freezer_vent"; + name = "Ordnance Freezer Chamber Vent" + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/freezerchamber) +"uUV" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/sign/departments/maint/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"uVb" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/machinery/vending/medical, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"uVf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/external/glass{ + name = "Supply Door Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/storage) +"uVl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/hydroponics{ + name = "Hydroponics" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/service/hydroponics) +"uVn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "Escape Pod One" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/entry) +"uVC" = ( +/obj/machinery/bookbinder, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"uVG" = ( +/obj/machinery/light/directional/west, +/obj/structure/table, +/obj/item/assembly/timer{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/assembly/timer, +/obj/item/assembly/timer{ + pixel_x = 6; + pixel_y = -4 + }, +/obj/item/assembly/timer{ + pixel_x = 5; + pixel_y = 4 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"uVI" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/structure/table, +/obj/item/stack/sheet/glass{ + pixel_x = -5 + }, +/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass{ + pixel_x = 5 + }, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/matter_bin{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stock_parts/scanning_module, +/obj/item/stock_parts/scanning_module{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/iron/white, +/area/station/science/lab) +"uVJ" = ( +/obj/effect/spawner/random/trash/moisture_trap, +/turf/open/floor/plating, +/area/station/maintenance/port) +"uVO" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/chair/pew/left{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"uVP" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"uVQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/table/glass, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/light_switch/directional/east, +/obj/item/paper_bin{ + pixel_x = -7 + }, +/obj/item/clipboard{ + pixel_x = -7 + }, +/obj/item/folder/white{ + pixel_x = -7 + }, +/obj/item/pen{ + pixel_x = -7 + }, +/obj/item/book/manual/wiki/grenades{ + pixel_x = 7 + }, +/obj/item/book/manual/wiki/plumbing{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/item/book/manual/wiki/chemistry{ + pixel_x = 7; + pixel_y = 10 + }, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"uWa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"uWn" = ( +/obj/machinery/button/door/directional/south{ + id = "dorm_3"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/carpet/purple, +/area/station/commons/dorms) +"uWo" = ( +/obj/machinery/shower/directional/east, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/atmos/storage) +"uWp" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/floor/grass, +/area/station/command/bridge) +"uWr" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/machinery/status_display/ai/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"uWB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/storage) +"uWF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/grunge{ + id_tag = "dorm_5"; + name = "Dorm 5" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms) +"uWJ" = ( +/obj/structure/sign/warning/vacuum/external/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"uWY" = ( +/obj/structure/table/wood, +/obj/item/toy/plush/beeplushie, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"uXe" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/lab) +"uXn" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/detectives_office) +"uXH" = ( +/obj/machinery/shower/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"uXN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/main) +"uXP" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Mix to Distro" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"uXQ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/computer/atmos_alert, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/break_room) +"uXU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/firealarm/directional/west, +/obj/machinery/byteforge, +/turf/open/floor/iron/dark/smooth_large, +/area/station/bitrunning/den) +"uYe" = ( +/obj/effect/landmark/blobstart, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"uYf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/telecomms/processor/preset_three, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"uYB" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/structure/table, +/obj/structure/reagent_dispensers/wall/peppertank/directional/east, +/obj/item/paper_bin{ + pixel_y = 6 + }, +/obj/item/pen, +/obj/item/book/manual/wiki/security_space_law, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"uYI" = ( +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/bridge) +"uYJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"uYP" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"uZf" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/enzyme, +/obj/item/kitchen/rollingpin, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"uZj" = ( +/obj/structure/closet/crate/wooden, +/obj/item/instrument/accordion, +/obj/item/instrument/glockenspiel, +/obj/item/instrument/guitar, +/obj/item/instrument/harmonica, +/obj/item/instrument/banjo, +/obj/item/instrument/eguitar, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"uZz" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Engineering - Atmospherics, External HFR Room, South"; + name = "engineering camera" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"uZG" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/command/gateway) +"uZH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet/blue, +/area/station/commons/dorms) +"uZR" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"vac" = ( +/obj/structure/closet/crate, +/obj/item/stock_parts/micro_laser, +/obj/item/stock_parts/micro_laser, +/obj/item/stock_parts/micro_laser, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"vah" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west, +/obj/structure/closet/secure_closet/evidence, +/turf/open/floor/iron/dark, +/area/station/security/evidence) +"val" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"vam" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"vaG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/carpet/neon/simple/green, +/area/station/science/xenobiology) +"vaO" = ( +/obj/structure/table/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/hand_labeler, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"vaP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/cargo/storage) +"vaR" = ( +/obj/effect/turf_decal/tile/green, +/obj/machinery/camera/autoname/directional/north{ + dir = 9 + }, +/obj/structure/table, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_y = 3 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = -10; + pixel_y = 5 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/watertank, +/obj/effect/spawner/random/food_or_drink/seed, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/service/hydroponics) +"vaW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/bathroom{ + name = "Bathroom" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/maintenance/starboard/aft) +"vbc" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/science/research) +"vbi" = ( +/obj/machinery/airalarm/directional/east, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"vbl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/circuit, +/area/station/ai_monitored/command/nuke_storage) +"vbz" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/office) +"vbB" = ( +/obj/machinery/duct, +/obj/machinery/light/neon_lining{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) +"vbD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"vbI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"vbK" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/lobby) +"vbT" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = -8 + }, +/obj/machinery/camera/directional/south, +/obj/machinery/atmospherics/components/tank, +/turf/open/floor/iron, +/area/station/science/ordnance) +"vcn" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"vcv" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"vcA" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"vcC" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"vcD" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/cargo/office) +"vcG" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/engine_smes) +"vcI" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_lockdown"; + name = "Medbay Emergency Lockdown Shutters"; + dir = 8 + }, +/turf/open/floor/grass, +/area/station/medical/medbay/central) +"vcL" = ( +/obj/machinery/airalarm/directional/east, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"vcW" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) +"vdf" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) +"vdj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/prison/mess) +"vdO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"vdQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"vdT" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"vdX" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/sign/warning/cold_temp/directional/east, +/turf/open/floor/plating/reinforced, +/area/station/science/research) +"vec" = ( +/obj/structure/disposalpipe/sorting/mail{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/mail_sorting/engineering/ce_office, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) +"vez" = ( +/obj/machinery/shower/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/shower) +"veJ" = ( +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"veQ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + id = "aux_base_shutters"; + name = "Auxiliary Base Shutters" + }, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"veX" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 8 + }, +/obj/structure/table, +/obj/item/clothing/mask/balaclava, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"vfg" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/sign/departments/security/directional/west, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/fore) +"vfi" = ( +/obj/structure/flora/rock/pile/jungle/large/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"vfw" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"vfE" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/port) +"vfK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"vfO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/open/floor/iron/white/textured, +/area/station/medical/office) +"vfV" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/window/brigdoor/security/holding/left/directional/south{ + id = "defendant_holding_cell"; + name = "Defendant Holding Cell" + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"vfX" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"vfY" = ( +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"vgG" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/airlock/command/glass{ + name = "Research Director's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/rd, +/turf/open/floor/iron/white/textured, +/area/station/command/heads_quarters/rd) +"vgJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/table, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_b) +"vhb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"vhd" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"vhh" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/door_buttons/access_button{ + idDoor = "xeno_airlock_interior"; + idSelf = "xeno_airlock_control"; + name = "Access Button"; + pixel_x = -24; + pixel_y = -5; + req_access = list("xenobiology") + }, +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "xeno_airlock_exterior"; + idInterior = "xeno_airlock_interior"; + idSelf = "xeno_airlock_control"; + name = "Access Console"; + pixel_x = 25; + req_access = list("xenobiology") + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + autoclose = 0; + frequency = 1449; + id_tag = "xeno_airlock_interior"; + name = "Xenobiology Lab Internal Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/science/xenobiology/hallway) +"vho" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"vhu" = ( +/turf/closed/wall, +/area/station/security/prison/rec) +"vhx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"vhN" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/clipboard, +/obj/item/stamp{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/stamp/denied{ + pixel_x = 6; + pixel_y = 2 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/office) +"vhY" = ( +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"via" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bonfire, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"vii" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/east{ + name = "Armory Desk"; + req_access = list("security") + }, +/obj/machinery/door/window/brigdoor/right/directional/west{ + name = "Armory Desk"; + req_access = list("armory") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "armory_desk"; + name = "Armory Desk Shutter"; + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"vio" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_lockdown"; + name = "Medbay Emergency Lockdown Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/medical/paramedic) +"vip" = ( +/obj/structure/lattice, +/obj/structure/sign/departments/security/directional/south, +/turf/open/space/basic, +/area/space/nearstation) +"vir" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/telecomms/server/presets/common, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"viW" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"vje" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/shower/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/starboard/aft) +"vjj" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"vjs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/floor/plating, +/area/station/maintenance/port) +"vjv" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - Gravity Generator"; + name = "engineering camera" + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"vjx" = ( +/obj/structure/table/glass, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = 6 + }, +/turf/open/floor/iron/dark, +/area/station/medical/paramedic) +"vjD" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/maintenance/disposal) +"vjI" = ( +/obj/machinery/computer/turbine_computer{ + dir = 1; + mapping_id = "main_turbine" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal/incinerator) +"vjV" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/sorting) +"vjY" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/closet/crate, +/obj/item/tank/internals/oxygen/red{ + pixel_x = -4; + pixel_y = -1 + }, +/obj/item/tank/internals/oxygen/red{ + pixel_x = -4; + pixel_y = -1 + }, +/obj/item/tank/internals/anesthetic{ + pixel_x = 2 + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/electrical, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/wrench, +/obj/item/holosign_creator/atmos, +/obj/item/analyzer/ranged, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"vka" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"vkc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"vkg" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"vkh" = ( +/obj/machinery/vending/autodrobe, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"vki" = ( +/obj/effect/turf_decal/delivery/red, +/obj/machinery/status_display/ai/directional/east, +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/iron/textured, +/area/station/ai_monitored/command/storage/eva) +"vkj" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/flashlight/lantern{ + on = 1 + }, +/turf/open/floor/carpet, +/area/station/service/chapel) +"vkz" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/north, +/obj/machinery/camera/autoname/directional/north, +/obj/item/radio/intercom/directional/north, +/obj/structure/rack, +/obj/item/storage/belt/utility, +/obj/item/clothing/gloves/color/fyellow, +/obj/item/clothing/gloves/color/fyellow, +/obj/item/clothing/gloves/color/fyellow, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"vkB" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/robotics/lab) +"vkF" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/break_room) +"vkL" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"vkX" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"vlf" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/machinery/light_switch/directional/east{ + pixel_y = -10 + }, +/obj/machinery/firealarm/directional/east, +/obj/machinery/suit_storage_unit/security, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"vlq" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/cargo) +"vlr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/grunge{ + id_tag = "dorm_1"; + name = "Dorm 1" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms) +"vlK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Warehouse Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port) +"vlU" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/conveyor{ + id = "QMLoad" + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/storage) +"vmf" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"vmh" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/maintenance/starboard/aft) +"vmo" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/office) +"vmq" = ( +/obj/effect/turf_decal/tile/green/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"vmu" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/light/neon_lining{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) +"vmA" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"vmC" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/table/wood, +/obj/item/toy/plush/slimeplushie, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"vmV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"vnp" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"vnO" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"vnP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"vof" = ( +/obj/structure/table/wood, +/obj/item/taperecorder, +/obj/item/tape/random, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"voi" = ( +/obj/structure/sign/poster/random/directional/south, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"vom" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south{ + dir = 5 + }, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics) +"voo" = ( +/turf/closed/wall, +/area/station/science/ordnance/testlab) +"voq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) +"vot" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, +/turf/open/space/basic, +/area/space/nearstation) +"vox" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"voE" = ( +/obj/structure/cable, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/entry) +"voL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) +"voQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/office) +"voV" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"vpb" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"vpe" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/machinery/smartfridge/chemistry/preloaded, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry) +"vpn" = ( +/turf/open/floor/carpet/green, +/area/station/maintenance/starboard/aft) +"vpp" = ( +/obj/docking_port/stationary/public_mining_dock{ + dir = 2 + }, +/turf/open/floor/plating, +/area/station/construction/mining/aux_base) +"vpA" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/aisat_interior"; + name = "Antechamber Turret Control"; + pixel_y = -28; + req_access = list("minisat") + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"vpG" = ( +/turf/closed/wall/r_wall, +/area/station/security/prison/visit) +"vpL" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"vpV" = ( +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"vpY" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"vqb" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_priv_1"; + name = "Privacy Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/medical/patients_rooms/room_a) +"vqc" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"vqd" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"vqk" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/commons/fitness/recreation) +"vqo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/service/library/lounge) +"vqr" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"vqJ" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/duct, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"vqK" = ( +/obj/item/radio/intercom/directional/north, +/obj/machinery/suit_storage_unit/industrial/loader, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"vqP" = ( +/obj/structure/filingcabinet, +/turf/open/floor/carpet/red, +/area/station/commons/vacant_room/office) +"vqV" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"vrc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"vrf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"vrm" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/line, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"vro" = ( +/obj/structure/frame/machine, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"vrG" = ( +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"vrT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/computer/records/medical, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"vrW" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 5 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/directional/north, +/obj/machinery/firealarm/directional/north, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"vsb" = ( +/obj/structure/foamedmetal, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"vse" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "2"; + dir = 1 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"vsk" = ( +/obj/machinery/firealarm/directional/north, +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"vss" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/east, +/obj/structure/closet/boxinggloves, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness/recreation) +"vsB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"vsG" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/server) +"vsU" = ( +/obj/machinery/light/small/built/directional/east, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"vtc" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark/side, +/area/station/hallway/secondary/service) +"vtr" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/medical{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"vtD" = ( +/obj/machinery/requests_console/directional/west{ + assistance_requestable = 1; + department = "Janitorial"; + name = "Janitorial Requests Console" + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/janitor) +"vtJ" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/circuit, +/area/station/ai_monitored/command/nuke_storage) +"vtP" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"vtT" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"vub" = ( +/obj/effect/spawner/random_engines/box, +/turf/open/space/basic, +/area/space) +"vui" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"vuz" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/light/small/directional/north, +/turf/open/floor/carpet, +/area/station/service/library) +"vuA" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/eva) +"vuH" = ( +/obj/effect/spawner/random/structure/chair_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"vuY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"vvg" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"vvu" = ( +/obj/effect/turf_decal/stripes/box, +/obj/machinery/mech_bay_recharge_port{ + dir = 2 + }, +/turf/open/floor/iron/large, +/area/station/science/robotics/mechbay) +"vvy" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"vvM" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/bed/pod{ + desc = "An old medical bed, just waiting for replacement with something up to date."; + name = "medical bed" + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) +"vvQ" = ( +/obj/structure/rack, +/obj/item/storage/medkit/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/storage/medkit/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/storage/medkit/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/healthanalyzer, +/obj/item/healthanalyzer, +/obj/item/healthanalyzer, +/obj/item/radio/headset/headset_sci, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"vvV" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/medical/paramedic) +"vvX" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"vwh" = ( +/obj/structure/table/wood, +/obj/item/toy/figure/clown{ + pixel_y = 8; + pixel_x = 8 + }, +/obj/item/storage/crayons{ + pixel_y = 8; + pixel_x = -4 + }, +/obj/item/bikehorn/rubberducky{ + pixel_x = -10 + }, +/obj/item/flashlight/lamp/bananalamp{ + pixel_y = 3 + }, +/turf/open/floor/eighties/red, +/area/station/service/theater) +"vww" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"vwz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"vwE" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"vxd" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"vxg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"vxs" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"vxD" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 9 + }, +/obj/machinery/light/directional/west, +/obj/structure/frame/computer, +/turf/open/floor/iron/white, +/area/station/science/lab) +"vxJ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/broken_bottle, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"vyg" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"vym" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "atmos_hfr"; + name = "HFR Shutters" + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/hfr_room) +"vyt" = ( +/obj/structure/sink/directional/west, +/obj/structure/mirror/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/captain/private) +"vyC" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/booze, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"vyJ" = ( +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/shower) +"vyP" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/obj/structure/transit_tube, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space, +/area/space/nearstation) +"vyY" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/table/reinforced, +/obj/item/restraints/handcuffs, +/obj/item/restraints/handcuffs{ + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"vyZ" = ( +/turf/open/floor/iron/dark, +/area/station/service/library/printer) +"vzc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"vzd" = ( +/obj/machinery/duct, +/turf/open/floor/carpet/blue, +/area/station/security/prison/safe) +"vze" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/engine/air, +/area/station/engineering/atmos) +"vzf" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/storage/tech) +"vzh" = ( +/obj/docking_port/stationary/mining_home/common/kilo{ + dir = 8 + }, +/turf/open/space/basic, +/area/space) +"vzy" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/service/chapel) +"vzJ" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/machinery/seed_extractor, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics/garden) +"vzK" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"vzN" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/commons/storage/primary) +"vzQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"vAm" = ( +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"vAq" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"vAH" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/carpet/purple, +/area/station/commons/dorms) +"vAP" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"vAZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/service/bar) +"vBh" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/electrical{ + pixel_y = 7 + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/crowbar/large, +/obj/item/clothing/suit/armor/laserproof, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"vBm" = ( +/obj/machinery/biogenerator, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"vBp" = ( +/obj/machinery/keycard_auth{ + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"vBx" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"vBA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side, +/area/station/hallway/secondary/service) +"vBE" = ( +/turf/closed/wall, +/area/station/service/library/private) +"vBG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/station/service/chapel) +"vBL" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"vBP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"vBQ" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/chair, +/obj/item/reagent_containers/blood/random, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"vCc" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"vCn" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"vCp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"vCq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Engineering Foyer Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"vCs" = ( +/obj/machinery/door/window/left/directional/east{ + name = "Brig Infirmary"; + req_access = list("security") + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/medical) +"vCB" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/item/radio/intercom/directional/west, +/obj/machinery/light/small/directional/west, +/obj/structure/filingcabinet/filingcabinet, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/cargo/sorting) +"vCE" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating, +/area/station/maintenance/port) +"vCI" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"vCQ" = ( +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"vCT" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/poddoor/shutters/window{ + id = "eva_shutters"; + name = "EVA Shutters" + }, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/command/storage/eva) +"vCZ" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"vDa" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "O2 to Pure" + }, +/obj/machinery/atmospherics/components/binary/pump/layer4{ + dir = 8; + name = "O2 to Turbine" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"vDm" = ( +/obj/effect/spawner/random/structure/table, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"vDr" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"vDw" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/structure/closet/l3closet/security, +/obj/structure/sign/warning/secure_area/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"vDy" = ( +/obj/machinery/air_sensor/ordnance_burn_chamber, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"vDF" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/status_display/ai/directional/west, +/obj/machinery/mecha_part_fabricator{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"vDJ" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/flashlight/lamp{ + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/station/maintenance/port/fore) +"vDK" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"vDO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/port) +"vEp" = ( +/obj/structure/dresser, +/turf/open/floor/wood, +/area/station/commons/dorms) +"vEu" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/library) +"vEB" = ( +/obj/machinery/light/directional/west, +/obj/machinery/newscaster/directional/west, +/obj/machinery/chem_master/condimaster{ + desc = "Looks like a knock-off chem-master. Perhaps useful for separating liquids when mixing drinks precisely. Also dispenses condiments."; + name = "HoochMaster Deluxe" + }, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"vEP" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Mix to Engine" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"vER" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/small/directional/east, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"vEV" = ( +/obj/machinery/atmospherics/components/tank, +/turf/open/floor/iron, +/area/station/science/ordnance) +"vFa" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/security/armory) +"vFe" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/bookcase/manuals/engineering, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/engineering/break_room) +"vFg" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide{ + valve_open = 1 + }, +/obj/machinery/atmospherics/miner/n2o, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"vFB" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/machinery/computer/security/telescreen{ + desc = "Used for monitoring medbay to ensure patient safety."; + dir = 4; + name = "Medbay Monitor"; + network = list("medbay") + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"vFG" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Medbay" + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/medbay/lobby) +"vFI" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"vFQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/storage) +"vFV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Dormitory" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms) +"vFW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"vGb" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/commons/storage/primary) +"vGf" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research/glass{ + name = "Cloning Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/genetics, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics/cloning) +"vGz" = ( +/obj/structure/sign/warning/vacuum/external/directional/north, +/obj/structure/cable, +/obj/machinery/power/solar_control{ + id = "forestarboard"; + name = "Starboard Bow Solar Control" + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"vGC" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/prison/safe) +"vGM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"vGY" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"vHb" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "Labor Camp Shuttle Airlock"; + req_access = list("brig") + }, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/turf/open/floor/iron/dark/textured_large, +/area/station/security/processing) +"vHc" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"vHf" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "engineering"; + name = "Engineering Blast Door" + }, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) +"vHk" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + id_tag = "medbay_foyer"; + name = "Medbay" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/iron/white/textured, +/area/station/medical/medbay/lobby) +"vHv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"vHT" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"vHU" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"vIn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security{ + aiControlDisabled = 1; + id_tag = "justice_chamber"; + name = "Justice Chamber" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/execution) +"vIQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"vJc" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable/layer1, +/obj/machinery/door/airlock/external{ + name = "Engineering External Access" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/main) +"vJe" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 9 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/freezerchamber) +"vJk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible/layer4, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos) +"vJw" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"vJI" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"vJW" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/shower) +"vJZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"vKc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"vKd" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"vKf" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) +"vKo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"vKr" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"vKs" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"vKt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/tank/air{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"vKu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Funeral Parlor" + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/chapel/funeral) +"vLf" = ( +/turf/open/floor/iron, +/area/station/construction) +"vLk" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"vLC" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"vLI" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"vLL" = ( +/obj/machinery/light_switch/directional/west, +/obj/machinery/light/small/directional/west, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/turf/open/floor/wood, +/area/station/service/bar) +"vLQ" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/tcommsat/computer) +"vLV" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/storage/box/gloves, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"vMf" = ( +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"vMp" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_a) +"vMt" = ( +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) +"vMB" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/structure/window/reinforced/tinted, +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"vMC" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/closet/crate/coffin, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/fore) +"vME" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/structure/sign/poster/official/random/directional/west, +/obj/structure/table, +/turf/open/floor/iron/white, +/area/station/science/explab) +"vML" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 1 + }, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"vMT" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/cargo/sorting) +"vNq" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"vNr" = ( +/obj/structure/sign/warning/vacuum/external/directional/south, +/obj/structure/cable, +/obj/machinery/power/solar_control{ + dir = 1; + id = "starboardsolar"; + name = "Starboard Quarter Solar Control" + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) +"vNz" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/storage_shared) +"vNB" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/cook, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"vOj" = ( +/obj/effect/turf_decal/box, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"vOm" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"vOq" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/structure/chair/office/light, +/obj/effect/landmark/start/security_officer, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"vOB" = ( +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/machinery/computer/robotics, +/turf/open/floor/carpet/purple, +/area/station/command/heads_quarters/rd) +"vOP" = ( +/obj/effect/turf_decal/tile/purple/full, +/obj/effect/turf_decal/box/white, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/primary/starboard) +"vOQ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"vOS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Delivery Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/office) +"vOT" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/cyan/visible, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"vOV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/printer) +"vPe" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"vPn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"vPr" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"vPF" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/table, +/obj/item/folder/white, +/obj/item/folder/blue{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/folder/blue{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/item/stamp/cmo, +/turf/open/floor/iron/dark/side, +/area/station/command/heads_quarters/cmo) +"vPG" = ( +/obj/structure/cable, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"vPL" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/entertainment/coin, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"vPR" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/small/broken/directional/south, +/obj/structure/closet/crate, +/obj/item/stack/ore/silver, +/obj/item/stack/ore/silver, +/obj/item/stack/ore/silver, +/obj/item/stack/ore/silver, +/obj/item/stack/ore/silver, +/turf/open/floor/plating, +/area/station/maintenance/port) +"vPS" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"vQg" = ( +/obj/effect/turf_decal/trimline/red/filled/corner, +/obj/effect/turf_decal/trimline/red/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"vQo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "Scrubbers to Space" + }, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"vQt" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"vQw" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/exit/departure_lounge) +"vQD" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "Secure Gate"; + name = "Cell Shutters"; + pixel_x = 7; + pixel_y = -2; + req_access = list("brig") + }, +/obj/machinery/button/door{ + id = "prison_gate"; + name = "Prison Wing Lockdown"; + pixel_x = 7; + req_access = list("brig"); + pixel_y = 8 + }, +/obj/machinery/button/door{ + id = "BrigLock"; + name = "Cell Shutters"; + pixel_x = -7; + pixel_y = -2; + req_access = list("brig") + }, +/obj/machinery/button/door{ + id = "armory_shutters"; + name = "Armory Shutters"; + pixel_x = -7; + pixel_y = 8; + req_access = list("armory") + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"vQE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"vQV" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Foyer" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/break_room) +"vQY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"vRc" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) +"vRh" = ( +/obj/machinery/washing_machine, +/obj/item/clothing/shoes/laceup, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"vRi" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/table, +/obj/item/storage/box/bodybags{ + pixel_x = 5 + }, +/obj/item/storage/box/bodybags{ + pixel_x = -5 + }, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) +"vRl" = ( +/obj/machinery/power/turbine/core_rotor{ + dir = 8; + mapping_id = "main_turbine" + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"vRp" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/structure/table, +/obj/item/clothing/under/rank/prisoner/skirt{ + pixel_x = -13; + pixel_y = 5 + }, +/obj/item/clothing/under/rank/prisoner{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/clothing/under/rank/prisoner/skirt{ + pixel_x = 9; + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"vRw" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"vRJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/sink/directional/south, +/turf/open/floor/iron/white/textured, +/area/station/medical/virology) +"vRV" = ( +/turf/closed/wall/r_wall, +/area/station/security/checkpoint/customs/auxiliary) +"vRX" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port) +"vSc" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/wood, +/area/station/commons/dorms) +"vSd" = ( +/obj/machinery/hydroponics/soil, +/turf/open/floor/grass, +/area/station/security/prison/garden) +"vSj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"vSo" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/obj/structure/table, +/obj/item/disk/tech_disk{ + pixel_x = -4 + }, +/obj/item/disk/tech_disk, +/obj/item/clothing/glasses/welding{ + pixel_y = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/lab) +"vSr" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 8 + }, +/obj/structure/chair/sofa/corp/right{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"vSA" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_y = 5 + }, +/obj/item/folder/white{ + pixel_y = 7 + }, +/obj/item/pen{ + pixel_y = 7 + }, +/obj/item/stamp/rd{ + pixel_y = 10 + }, +/turf/open/floor/carpet/purple, +/area/station/command/heads_quarters/rd) +"vSE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"vTc" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/sign/departments/engineering/directional/east, +/obj/machinery/teleport/hub, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"vTl" = ( +/obj/structure/cable, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"vTs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sink/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/engineering/break_room) +"vTy" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"vTz" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"vTL" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"vTN" = ( +/obj/machinery/light/directional/east, +/obj/machinery/airalarm/directional/east, +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"vTP" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/robotics/mechbay) +"vTT" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/department/engine/atmos) +"vTX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"vUa" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"vUf" = ( +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"vUq" = ( +/obj/machinery/light_switch/directional/north, +/obj/item/radio/intercom/directional/west, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/service/theater) +"vUu" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "testlab"; + name = "Xenobiology Secure Chamber Blast Door" + }, +/turf/open/floor/plating/reinforced, +/area/station/science/xenobiology) +"vUv" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/door/window/left/directional/east{ + name = "Gateway Control"; + req_access = list("gateway") + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"vUA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"vUJ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/chair, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"vUS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"vVm" = ( +/obj/machinery/cryopod/prison{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"vVN" = ( +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/hydroponics) +"vVP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/shutters{ + id = "armory_side_access"; + name = "Armory Side Access"; + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"vVQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"vVY" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"vWa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"vWb" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"vWH" = ( +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/detectives_office) +"vXb" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"vXz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"vXA" = ( +/obj/machinery/door/airlock/grunge{ + id_tag = "toilet_4"; + name = "Stall 4" + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"vXE" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"vXG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"vXO" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"vXY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) +"vYg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"vYB" = ( +/turf/closed/wall, +/area/station/solars/port/fore) +"vYZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/end, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"vZb" = ( +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/commons/dorms) +"vZd" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"vZu" = ( +/obj/machinery/light/directional/south, +/obj/structure/easel, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_twentythree, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness/recreation) +"vZS" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/structure/table, +/obj/item/book/manual/wiki/atmospherics, +/obj/item/tank/internals/plasmaman/belt/empty{ + pixel_x = -12 + }, +/obj/item/tank/internals/plasmaman/belt/empty{ + pixel_x = 10 + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/engineering/break_room) +"waa" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white/right, +/obj/machinery/newscaster/directional/west, +/obj/structure/closet/crate/goldcrate, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"wae" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/obj/machinery/button/door/directional/west{ + id = "custodial_shutters"; + name = "Custodial Shutters Control"; + req_access = list("janitor") + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"waF" = ( +/obj/structure/disposalpipe/sorting/mail/flip, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/mail_sorting/service/chapel, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"wbe" = ( +/obj/effect/turf_decal/trimline/neutral/warning, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"wbn" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/structure/sign/warning/deathsposal/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"wbq" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/evidence) +"wbw" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/obj/item/radio/intercom/directional/south, +/obj/structure/table, +/obj/machinery/feed_machine{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics) +"wbA" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/structure/tank_dispenser, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"wbK" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"wbN" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/structure/table, +/obj/item/assembly/signaler{ + pixel_x = -8; + pixel_y = 5 + }, +/obj/item/assembly/signaler{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/assembly/signaler{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/assembly/signaler{ + pixel_y = 8 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"wbQ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/break_room) +"wce" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "engineering"; + name = "Engineering Blast Door" + }, +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/west{ + name = "Engineering Desk" + }, +/obj/machinery/door/window/left/directional/east{ + name = "Engineering Desk"; + req_access = list("atmospherics","engineering") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engi_lobby_shutters"; + name = "Engineering Lobby Shutters"; + dir = 4 + }, +/obj/structure/desk_bell{ + pixel_y = 10; + pixel_x = -6 + }, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/break_room) +"wcj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"wcp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Quartermaster's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/qm, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/qm) +"wcA" = ( +/obj/machinery/light/no_nightlight/directional/east, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"wcC" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/storage) +"wcH" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"wcU" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/commons/vacant_room/office) +"wcZ" = ( +/obj/machinery/light/small/broken/directional/south, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"wdv" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"wdB" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"wdR" = ( +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"wei" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/item/radio/intercom/directional/east, +/obj/structure/table/glass, +/obj/item/storage/bag/plants/portaseeder, +/obj/item/storage/bag/plants/portaseeder, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/service/hydroponics/garden) +"wen" = ( +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"wev" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"weD" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/sign/warning/vacuum/external/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"weS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/science/research) +"wfb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/moisture_trap, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"wfg" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"wfh" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"wfo" = ( +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"wfA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai) +"wfE" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"wfF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"wfI" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"wfJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"wfM" = ( +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) +"wfQ" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/hallway/secondary/exit/departure_lounge) +"wfR" = ( +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/locker) +"wfT" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"wgd" = ( +/obj/machinery/light/directional/south, +/obj/item/radio/intercom/directional/south, +/obj/structure/microscope{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = -8; + pixel_y = 12 + }, +/obj/item/biopsy_tool{ + pixel_x = 14; + pixel_y = 4 + }, +/obj/structure/table/reinforced/plasmarglass, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"wgn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"wgv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison/shower) +"wgM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/closet/l3closet/scientist, +/obj/item/extinguisher, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) +"wgR" = ( +/obj/machinery/corral_corner{ + mapping_id = "2" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"wgX" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port) +"wgZ" = ( +/obj/machinery/firealarm/directional/west, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/liquid_pump, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"whh" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=Lockers"; + location = "EVA" + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"whr" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 8 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"whv" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"whI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) +"whJ" = ( +/obj/machinery/atmospherics/components/tank/air, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"whM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/binary/pump/on{ + name = "Incinerator Output Pump"; + target_pressure = 4500 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"whN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/south, +/obj/structure/closet, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"wia" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"wic" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"wig" = ( +/obj/machinery/light_switch/directional/south, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"wii" = ( +/obj/effect/spawner/random/entertainment/coin, +/obj/effect/spawner/random/entertainment/coin{ + pixel_x = 9; + pixel_y = 9 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"wim" = ( +/obj/machinery/light/directional/north, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/modular_computer/preset/civilian, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) +"wiC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"wiD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"wiI" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/structure/mop_bucket/janitorialcart, +/obj/item/mop, +/turf/open/floor/iron/dark/side, +/area/station/service/janitor) +"wja" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/structure/sign/departments/psychology/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"wjf" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/closet/firecloset{ + anchored = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"wju" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=2"; + location = "Research Division" + }, +/obj/structure/plasticflaps/opaque, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/science) +"wjv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/musical_instrument, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"wjA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"wjB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/light/directional/west, +/obj/machinery/airalarm/directional/west, +/obj/structure/closet/secure_closet/engineering_chief, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"wjU" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"wjW" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters{ + id = "departures_security_post"; + name = "Security Post Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/security/checkpoint/escape) +"wkj" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"wko" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"wkK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"wkM" = ( +/obj/effect/spawner/random/structure/furniture_parts, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"wkO" = ( +/obj/machinery/light/no_nightlight/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"wkX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/right/directional/east{ + req_access = list("captain"); + name = "Captain's Desk Door" + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) +"wlm" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/security/glass{ + name = "Courtroom" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron/dark/textured, +/area/station/security/brig) +"wlw" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) +"wlA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/service{ + name = "Service Hall" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/general, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/service) +"wlG" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"wlT" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) +"wlX" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/station/solars/port/aft) +"wmi" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"wml" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"wmn" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/radio/intercom/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"wmA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/structure/sign/directions/medical/directional/east{ + pixel_y = -9 + }, +/obj/structure/sign/directions/engineering/directional/east{ + dir = 2 + }, +/obj/structure/sign/directions/supply/directional/east{ + pixel_y = 9; + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"wmF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"wmY" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/masks, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness/recreation) +"wnd" = ( +/obj/structure/chair/sofa/bench, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"wni" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/stack/sheet/iron/twenty, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/break_room) +"wnl" = ( +/turf/open/floor/engine, +/area/station/science/explab) +"wnn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/plumbed{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"wnr" = ( +/obj/effect/turf_decal/bot_red, +/obj/structure/cable, +/obj/machinery/power/emitter/welded{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"wnQ" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"wnR" = ( +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/processing) +"wom" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/structure/table/glass, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/service/hydroponics/garden) +"woo" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"wou" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"wov" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"woy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"woB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"woE" = ( +/obj/machinery/newscaster/directional/east, +/obj/machinery/computer/station_alert{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"wpo" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "law_office_shutters"; + name = "Law Office Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/service/lawoffice) +"wpO" = ( +/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"wpZ" = ( +/obj/effect/spawner/random/structure/table, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"wqd" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/plasma/five, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"wql" = ( +/obj/machinery/airalarm/directional/east, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/closet/l3closet/scientist, +/obj/item/extinguisher, +/turf/open/floor/iron/dark/textured, +/area/station/command/gateway) +"wqm" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/office) +"wqv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"wqw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"wqx" = ( +/obj/effect/turf_decal/arrows/white{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"wqy" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"wqK" = ( +/obj/effect/turf_decal/bot_white, +/obj/machinery/button/door/directional/west{ + id = "qm_warehouse"; + name = "Warehouse Door Control"; + req_access = list("cargo") + }, +/obj/structure/cargo_shelf, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"wqM" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"wqY" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/prison) +"wri" = ( +/obj/structure/table_frame, +/obj/item/stack/sheet/iron, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"wrl" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"wrt" = ( +/obj/machinery/requests_console/directional/south{ + department = "Science"; + name = "Science Requests Console"; + receive_ore_updates = 1; + supplies_requestable = 1 + }, +/obj/item/book/manual/wiki/cytology{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/book/manual/wiki/plumbing, +/obj/item/storage/box/petridish, +/obj/structure/table/reinforced/plasmarglass, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"wrx" = ( +/obj/machinery/vending/sustenance, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"wrA" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"wrB" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input{ + dir = 8 + }, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"wrD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"wsc" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/loading_area/white{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "hop_queue"; + name = "HoP Queue Shutters" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"wsn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/west, +/obj/structure/closet/crate, +/obj/effect/spawner/random/contraband/prison, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/prison/work) +"wsq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + name = "Justice Gas Injector"; + dir = 4 + }, +/turf/open/floor/engine, +/area/station/security/execution) +"wsv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/public/glass{ + name = "Gambling Den" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/maintenance/starboard/aft) +"wsy" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/reinforced, +/area/station/science/ordnance) +"wsE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"wsQ" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/white, +/area/station/medical/office) +"wsT" = ( +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"wtn" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/atm, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"wtt" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"wtF" = ( +/turf/closed/wall/r_wall, +/area/station/science/xenobiology) +"wtN" = ( +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/clothing/costume, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"wtX" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"wui" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/holopad, +/turf/open/floor/wood, +/area/station/service/bar) +"wuj" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"wuk" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/storage/box/lights/mixed, +/obj/item/storage/box/lights/mixed{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/box/lights/mixed{ + pixel_y = 6; + pixel_x = -6 + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"wup" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "cmo_shutters"; + name = "CMO Office Shutters" + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/cmo) +"wuE" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/east, +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/detectives_office) +"wuH" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"wuS" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/fishing_portal_generator, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics) +"wvb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"wvd" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"wvg" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 1 + }, +/obj/structure/table, +/obj/item/radio/off{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/radio/off{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/radio/off, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"wvi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"wvU" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"wwC" = ( +/obj/structure/displaycase/labcage, +/turf/open/floor/iron/vaporwave, +/area/station/command/heads_quarters/rd) +"wwI" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"wwN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"wwO" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/highsecurity{ + name = "AI Upload Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"wwQ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"wwS" = ( +/obj/machinery/light/no_nightlight/directional/west, +/obj/machinery/button/door/directional/west{ + id = "atmos_hfr"; + name = "HFR Shutters Control"; + req_access = list("atmospherics") + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"wxf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/main) +"wxl" = ( +/obj/machinery/vending/wardrobe/robo_wardrobe, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"wxo" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 4 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/freezerchamber) +"wxL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"wxP" = ( +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"wxS" = ( +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/security/prison/safe) +"wxT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/filingcabinet, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"wxU" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"wxY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"wye" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/large, +/area/station/engineering/break_room) +"wyL" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"wyS" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"wyZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/warning, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"wzb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"wzl" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/ai_monitored/command/storage/eva) +"wzr" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"wzu" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "atmos_hfr"; + name = "HFR Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/hfr_room) +"wzw" = ( +/obj/structure/table, +/obj/item/folder/blue{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/item/folder/yellow, +/turf/open/floor/iron/dark, +/area/station/tcommsat/computer) +"wzz" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"wzI" = ( +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"wzK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Medical - Storage Room, South"; + name = "medical camera"; + network = list("ss13","medbay") + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"wzL" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "sci_west_win_shutters"; + name = "Research Division Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/science/research) +"wzM" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"wzV" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/science/lab) +"wzX" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) +"wAd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/prison/mess) +"wAm" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"wAE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/decoration/glowstick, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"wAR" = ( +/obj/machinery/light_switch/directional/south{ + pixel_x = -8 + }, +/obj/machinery/firealarm/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"wAZ" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/door/firedoor/border_only, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"wBu" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_y = 3 + }, +/obj/effect/spawner/random/bureaucracy/folder{ + pixel_y = 5 + }, +/obj/item/pen{ + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"wBy" = ( +/obj/machinery/atmospherics/components/trinary/mixer{ + dir = 1; + name = "plasma mixer" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"wBF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/clothing/costume, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"wBG" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, +/obj/structure/chair/office/light, +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron/checker, +/area/station/science/lab) +"wBY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/tank_dispenser, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"wCb" = ( +/obj/effect/spawner/random/engineering/tool, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/fore) +"wCe" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/modular_computer/preset/id, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"wCn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"wCp" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/sign/warning/no_smoking/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"wCx" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 6 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"wCD" = ( +/obj/structure/chair/comfy/black, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood, +/area/station/service/library) +"wCS" = ( +/obj/structure/plasticflaps/opaque, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "Atmospherics" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/preopen{ + id = "engineering"; + name = "Engineering Blast Door" + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/medical) +"wCX" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/small/directional/west, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"wDg" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/landmark/start/librarian, +/turf/open/floor/iron/dark, +/area/station/service/library/printer) +"wDy" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/camera/autoname/directional/east, +/obj/effect/turf_decal/box/red, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"wDM" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/warning, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"wDR" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/sign/warning/secure_area/directional/south, +/obj/structure/cable, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"wDY" = ( +/obj/structure/table/glass, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 7 + }, +/obj/item/storage/box/syringes{ + pixel_y = 5 + }, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"wEs" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/line, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"wEt" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"wEv" = ( +/obj/machinery/light/directional/west, +/obj/structure/chair/stool/directional/north, +/turf/open/floor/wood, +/area/station/commons/dorms) +"wEy" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/camera/directional/west{ + c_tag = "Security - Armory, West"; + name = "security camera" + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/flasher/portable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/security/armory) +"wEA" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"wEB" = ( +/turf/closed/wall, +/area/station/maintenance/port/aft) +"wEH" = ( +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/dorms) +"wEK" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/airalarm/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/recharge_station, +/obj/effect/landmark/start/cyborg, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"wFc" = ( +/obj/machinery/button/door{ + id = "heads_meeting"; + name = "Security Shutters"; + pixel_x = -25; + pixel_y = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/meeting_room) +"wFf" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/structure/sign/poster/official/random/directional/west, +/obj/machinery/dna_scannernew, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"wFn" = ( +/obj/machinery/newscaster/directional/east, +/obj/machinery/light/directional/east, +/obj/machinery/modular_computer/preset/civilian{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/science/ordnance/office) +"wFu" = ( +/obj/structure/chair/comfy/beige, +/obj/effect/landmark/start/assistant, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"wFB" = ( +/obj/structure/grille, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"wFI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"wFZ" = ( +/obj/structure/chair/stool/directional/south, +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"wGe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"wGf" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning, +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"wGg" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"wGh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/door/poddoor/preopen{ + id = "perma_lockdown"; + name = "Lockdown Blast Door" + }, +/turf/open/floor/plating, +/area/station/security/execution/transfer) +"wGi" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness) +"wGk" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/newscaster/directional/south, +/obj/structure/table, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"wGm" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/candle_box/amber, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"wGq" = ( +/obj/structure/table, +/obj/item/radio/off{ + pixel_y = 6 + }, +/obj/item/radio/off{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/radio/off{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/radio/off, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) +"wGw" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"wGD" = ( +/obj/effect/turf_decal/bot_red, +/obj/structure/cable, +/obj/machinery/power/emitter/welded{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"wGE" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/hydroponics/constructable, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics) +"wGN" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/department/engine/atmos) +"wGQ" = ( +/obj/structure/table, +/obj/item/crowbar/red, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"wGT" = ( +/obj/machinery/computer/records/medical, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"wHi" = ( +/obj/machinery/bluespace_beacon, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"wHD" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/button/door/directional/west{ + id = "toilet_3"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/recharge_station, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"wHJ" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/status_display/shuttle{ + pixel_x = 32 + }, +/obj/machinery/computer/station_alert{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/minisat{ + pixel_y = -28; + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"wHQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"wHW" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"wIi" = ( +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/flora/bush/sunny/style_random, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/grass, +/area/station/ai_monitored/security/armory) +"wIn" = ( +/obj/effect/spawner/random/trash/box, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"wIr" = ( +/obj/structure/chair/pew/left{ + dir = 1 + }, +/turf/open/floor/iron/chapel{ + dir = 8 + }, +/area/station/service/chapel) +"wIv" = ( +/turf/closed/wall, +/area/station/maintenance/department/security/brig) +"wIx" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/structure/sign/departments/exam_room/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"wID" = ( +/obj/structure/sign/departments/medbay/alt/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"wIG" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/dorms) +"wIO" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/space/basic, +/area/space/nearstation) +"wIU" = ( +/obj/machinery/button/door/directional/west{ + id = "detective_office_shutters"; + name = "Detective Office Shutters Control"; + req_access = list("detective") + }, +/obj/structure/table/wood, +/obj/machinery/fax{ + fax_name = "Detective's Office"; + name = "Detective's Fax Machine" + }, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"wJa" = ( +/obj/structure/disposalpipe/junction/yjunction{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"wJr" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"wJA" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"wJK" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/closet/emcloset, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"wJP" = ( +/obj/structure/rack, +/obj/item/clothing/suit/hazardvest, +/turf/open/floor/iron, +/area/station/construction) +"wJW" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/commons/dorms) +"wKg" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"wKi" = ( +/obj/machinery/nuclearbomb/selfdestruct, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"wKr" = ( +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced/spawner/directional/south, +/mob/living/basic/chicken, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"wKv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/item/stack/ore/silver, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/miningoffice) +"wKE" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"wKG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/tcommsat/computer) +"wKV" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/window/left/directional/north{ + name = "Chicken Pen"; + req_access = list("hydroponics") + }, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"wKW" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"wLa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"wLb" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"wLm" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/obj/structure/bookcase/manuals/research_and_development, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"wLv" = ( +/obj/structure/cable, +/turf/open/floor/carpet/green, +/area/station/commons/locker) +"wLw" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"wLK" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"wLQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/status_display/ai/directional/west, +/obj/machinery/light/directional/west, +/obj/structure/cable/layer3, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"wLR" = ( +/obj/machinery/atmospherics/components/unary/artifact_heatingpad{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/explab) +"wMm" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"wMo" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"wMs" = ( +/obj/effect/turf_decal/bot, +/obj/structure/table, +/obj/item/stack/cable_coil{ + pixel_y = 7; + pixel_x = 3 + }, +/obj/item/stack/cable_coil, +/obj/item/storage/box/lights/mixed, +/obj/item/crowbar/large, +/obj/item/tank/internals/oxygen/yellow{ + pixel_x = 4; + pixel_y = -3 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"wMu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"wMK" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/lab) +"wML" = ( +/obj/effect/turf_decal/box/red, +/obj/machinery/atmospherics/components/unary/outlet_injector{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"wMO" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Cryo" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/safe) +"wNv" = ( +/obj/effect/landmark/blobstart, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/cable, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"wNw" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/window/left/directional/south{ + name = "Chicken Pen"; + req_access = list("hydroponics") + }, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"wNx" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/white, +/area/station/science/research) +"wNz" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"wND" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"wNK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "Port Docking Bay 3" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/entry) +"wNL" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"wOd" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/green/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"wOe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/warning, +/turf/open/floor/iron/dark/side, +/area/station/cargo/storage) +"wOt" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) +"wOu" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"wOC" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"wOD" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"wOI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"wOJ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/machinery/light_switch/directional/south, +/obj/machinery/button/door/directional/east{ + id = "justice_chamber"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/structure/table, +/obj/item/storage/box/bodybags{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/storage/box/bodybags{ + pixel_x = 5; + pixel_y = 10 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"wOS" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/wood, +/area/station/maintenance/port/fore) +"wPb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/netpod, +/turf/open/floor/iron/dark/smooth_large, +/area/station/bitrunning/den) +"wPA" = ( +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"wPH" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/item/toy/plush/beeplushie, +/turf/open/floor/grass, +/area/station/command/bridge) +"wPK" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"wPM" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/carpet/green, +/area/station/commons/locker) +"wPP" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"wPR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Prison Wing" + }, +/obj/machinery/door/poddoor/preopen{ + id = "perma_lockdown"; + name = "Lockdown Blast Door" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "perma-entrance" + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/execution/transfer) +"wPT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"wPX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"wQa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"wQk" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/grunge{ + name = "Prison Showers" + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/shower) +"wQr" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north, +/obj/structure/bodycontainer/morgue{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"wQE" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/cargo/sorting) +"wQG" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"wQO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"wQQ" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"wRe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"wRl" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/sign/departments/security/directional/south, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"wRs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"wRJ" = ( +/obj/effect/turf_decal/box, +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/hallway/primary/aft) +"wRN" = ( +/turf/closed/wall, +/area/station/science/ordnance/bomb) +"wRW" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/closet/firecloset/full, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"wSk" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall, +/area/station/maintenance/starboard/fore) +"wSl" = ( +/obj/machinery/light/neon_lining{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"wSn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"wSt" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"wSz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/gateway) +"wSC" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/item/kirbyplants/random, +/turf/open/floor/carpet, +/area/station/service/chapel) +"wSN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"wSQ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot, +/obj/structure/sign/poster/official/random/directional/north, +/obj/machinery/vending/tool, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"wTb" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/structure/closet/secure_closet/engineering_personal, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/engineering/storage_shared) +"wTy" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"wTz" = ( +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/commons/fitness/recreation) +"wTA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"wTD" = ( +/obj/structure/cable, +/obj/machinery/light/directional/west, +/obj/machinery/power/terminal{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"wTM" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"wTN" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_b) +"wUn" = ( +/obj/structure/table/wood, +/obj/item/paper_bin/carbon{ + pixel_y = 4 + }, +/obj/effect/spawner/random/bureaucracy/folder{ + pixel_y = 6 + }, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_y = 6 + }, +/turf/open/floor/carpet/red, +/area/station/commons/vacant_room/office) +"wUr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"wUx" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/closet/crate/secure/weapon{ + req_access = list("brig"); + name = "Rifle Crate" + }, +/obj/item/gun/ballistic/rifle/boltaction/surplus, +/obj/item/ammo_box/a762/surplus, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"wVk" = ( +/obj/machinery/computer/upload/ai{ + dir = 8 + }, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai_upload) +"wVm" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"wVp" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"wWf" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/exam_room) +"wWh" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/hallway/secondary/service) +"wWt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + name = "Patient Room 1" + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/patients_rooms/room_a) +"wWv" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/table, +/obj/item/mmi, +/obj/item/mmi{ + pixel_y = 4 + }, +/obj/item/mmi{ + pixel_y = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) +"wWx" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"wWJ" = ( +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"wWU" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"wXi" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"wXy" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured, +/area/station/medical/medbay/aft) +"wXz" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/watering_can, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"wXA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"wXC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"wXE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"wXG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/dark, +/area/station/science/research/abandoned) +"wXM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/sign/warning/deathsposal/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/disposaloutlet{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"wXR" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"wYc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance{ + name = "Crematorium Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"wYn" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/station/medical/office) +"wYA" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/effect/spawner/random/bureaucracy/folder{ + pixel_y = 6 + }, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_y = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"wYC" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"wYE" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured, +/area/station/security/brig) +"wZh" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "Hydroponics" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/service) +"wZk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"wZv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"wZx" = ( +/turf/closed/wall/r_wall, +/area/station/security/prison/safe) +"wZF" = ( +/turf/open/floor/plating, +/area/station/construction/mining/aux_base) +"wZI" = ( +/obj/machinery/firealarm/directional/south, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"wZQ" = ( +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness) +"xak" = ( +/obj/structure/sign/departments/engineering/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"xas" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"xaB" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"xaD" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/corner, +/area/station/maintenance/starboard/aft) +"xaW" = ( +/obj/machinery/rnd/server/master, +/turf/open/floor/circuit/telecomms/server, +/area/station/science/server) +"xba" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/port/aft) +"xby" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/light/small/directional/east, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/structure/closet/crate/freezer/surplus_limbs, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"xbz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, +/obj/machinery/meter, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"xbH" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"xbJ" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"xbP" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"xbV" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/obj/machinery/light_switch/directional/south, +/obj/machinery/firealarm/directional/east, +/obj/machinery/module_duplicator, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"xcb" = ( +/obj/machinery/status_display/ai/directional/east, +/obj/structure/chair/pew/left{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"xcd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"xcl" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/recharge_station, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/engineering/break_room) +"xct" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/chemistry) +"xcx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"xcB" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/carpet/cyan, +/area/station/medical/break_room) +"xcK" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"xcL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"xcO" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"xcP" = ( +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/locker) +"xcW" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/open/floor/iron/dark, +/area/station/security/execution) +"xdw" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "hop"; + name = "Privacy Shutters" + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/hop) +"xdz" = ( +/obj/effect/spawner/random/trash/graffiti, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"xdJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness) +"xdM" = ( +/obj/structure/table, +/obj/item/paper/fluff/holodeck/disclaimer, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) +"xdR" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half, +/obj/effect/turf_decal/bot_white, +/obj/machinery/gravity_generator/main, +/turf/open/floor/iron/dark/smooth_edge, +/area/station/engineering/gravity_generator) +"xdT" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/structure/sign/departments/cargo/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"xew" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/requests_console/directional/north{ + anon_tips_receiver = 1; + assistance_requestable = 1; + department = "Security"; + name = "Security Requests Console" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"xey" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"xeH" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/delivery_chute{ + dir = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"xeM" = ( +/obj/machinery/computer/security/qm{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"xeU" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2 + }, +/obj/effect/mapping_helpers/mail_sorting/medbay/virology, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"xeX" = ( +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/security/prison/workout) +"xeZ" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"xfg" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"xft" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/detective, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"xfv" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/disposaloutlet, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"xfN" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/yellow/corner{ + dir = 8 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"xfT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"xfW" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"xgf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/commons/fitness) +"xgg" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/item/extinguisher, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"xgj" = ( +/turf/closed/wall, +/area/station/science/research/abandoned) +"xgl" = ( +/obj/structure/bookcase/random/reference, +/turf/open/floor/wood, +/area/station/service/library) +"xgm" = ( +/obj/machinery/light/directional/west, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/storage/medkit/advanced, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"xgo" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Pure to Port Mix" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"xgs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/storage) +"xgu" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/bodycontainer/morgue, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"xgx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"xgz" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"xgB" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/space_heater, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"xgR" = ( +/obj/machinery/door/poddoor/incinerator_atmos_aux, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"xgU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/medical/cryo) +"xgX" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"xgY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"xhg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/button/door/directional/north{ + id = "apothecary_shutters"; + name = "Apothecary Shutters Control"; + req_access = list("pharmacy") + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/chem_master, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"xhj" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/station/maintenance/department/cargo) +"xhp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/shower) +"xhs" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/commons/dorms) +"xhv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"xhI" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"xhN" = ( +/obj/structure/bed, +/obj/item/bedsheet/patriot, +/obj/effect/landmark/start/bartender, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"xhP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) +"xhQ" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/transit_tube) +"xhW" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"xhY" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"xih" = ( +/obj/effect/landmark/navigate_destination/common/holodeck, +/turf/open/floor/engine{ + name = "Holodeck Projector Floor" + }, +/area/station/holodeck/rec_center) +"xix" = ( +/obj/effect/turf_decal/box, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/lobby) +"xiA" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"xiC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Primary Tool Storage" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/storage/primary) +"xiO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/landmark/start/virologist, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"xiW" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 9 + }, +/turf/open/space/basic, +/area/space/nearstation) +"xja" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/obj/structure/closet/crate/hydroponics, +/obj/item/seeds/apple, +/obj/item/seeds/banana, +/obj/item/seeds/cocoapod, +/obj/item/seeds/grape, +/obj/item/seeds/orange, +/obj/item/seeds/sugarcane, +/obj/item/seeds/wheat, +/obj/item/seeds/watermelon, +/obj/item/seeds/tower, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/hydroponics/garden) +"xjb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"xjO" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics/garden) +"xkh" = ( +/obj/item/radio/off{ + pixel_y = 6 + }, +/obj/item/radio/off{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/radio/off{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/radio/off, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/gateway) +"xkQ" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"xkV" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"xkY" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/camera/autoname/directional/north, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"xle" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/security/detectives_office) +"xlk" = ( +/obj/structure/closet, +/obj/item/clothing/under/misc/mailman, +/obj/item/clothing/head/costume/mailman, +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"xlo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/circuit, +/area/station/ai_monitored/command/nuke_storage) +"xlQ" = ( +/obj/structure/table, +/obj/item/toy/sword{ + pixel_x = 3; + pixel_y = 12 + }, +/obj/item/toy/foamblade, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/commons/fitness/recreation) +"xlS" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/food/grown/banana, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"xlW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics" + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/atmos) +"xml" = ( +/obj/structure/closet/secure_closet{ + req_access = list("bar") + }, +/obj/item/storage/box/rubbershot, +/obj/item/gun/ballistic/shotgun/doublebarrel, +/obj/effect/spawner/random/entertainment/money, +/obj/effect/spawner/random/entertainment/money, +/turf/open/floor/wood, +/area/station/service/bar/backroom) +"xmm" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, +/area/station/science/research) +"xmp" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"xmy" = ( +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/service_all, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"xmz" = ( +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"xmK" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"xnd" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"xnn" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/table/reinforced, +/obj/item/gun/grenadelauncher{ + pixel_y = 10 + }, +/obj/item/grenade/barrier{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/item/grenade/barrier{ + pixel_y = 3 + }, +/obj/item/grenade/barrier{ + pixel_x = 6; + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"xny" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"xnE" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"xnG" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"xnX" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/computer/atmos_alert{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"xob" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) +"xow" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/security/glass{ + name = "Cell 6" + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/safe) +"xoG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"xoI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"xoP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"xpb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"xpD" = ( +/turf/open/floor/plating/airless, +/area/space/nearstation) +"xpF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/cigarette, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"xqg" = ( +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"xqr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) +"xqC" = ( +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness) +"xqM" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) +"xqS" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/hydroponics/constructable, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics) +"xqW" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_red, +/obj/machinery/camera/directional/west{ + c_tag = "Command - EVA Storage West"; + name = "motion-sensitive command camera" + }, +/obj/machinery/recharge_station, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"xqZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/obj/structure/table/glass, +/obj/machinery/computer/records/medical/laptop, +/turf/open/floor/iron/white, +/area/station/security/medical) +"xrf" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"xrz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"xrJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/dorms) +"xrL" = ( +/obj/effect/spawner/random/structure/table, +/obj/item/reagent_containers/pill/maintenance, +/obj/item/reagent_containers/pill/maintenance{ + pixel_y = 8; + pixel_x = 7 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"xrQ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side, +/area/station/engineering/storage_shared) +"xrX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/gateway) +"xrY" = ( +/obj/structure/table, +/obj/item/storage/medkit/regular{ + pixel_y = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"xsa" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/transit_tube) +"xsd" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) +"xsf" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"xsi" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Engineering Maintenance" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"xsl" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/line, +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"xsm" = ( +/obj/machinery/button/door/directional/east{ + id = "bar_sec_shutters"; + name = "Bar Shutters Control"; + req_access = list("bar") + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood, +/area/station/service/bar) +"xsB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 1 + }, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) +"xsC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"xsR" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"xsX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/science/rd_office, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"xta" = ( +/turf/closed/wall/r_wall, +/area/station/security/prison/rec) +"xtc" = ( +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/prison/workout) +"xtn" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/obj/structure/sign/warning/cold_temp/directional/south, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"xtu" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"xtD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"xtL" = ( +/obj/structure/bodycontainer/morgue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"xtQ" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/machinery/light/directional/west, +/obj/machinery/status_display/supply{ + pixel_x = -32 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/storage) +"xtS" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/closet/secure_closet/security/engine, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"xud" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/west, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/snack{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage{ + pixel_y = 5; + pixel_x = -7 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) +"xuk" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"xuu" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/firealarm/directional/west, +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 5 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 5; + pixel_x = 4 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 5; + pixel_x = 8 + }, +/obj/item/stack/rods/fifty, +/obj/item/stack/rods/fifty, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"xuF" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/sign/departments/maint/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Central Hallway Southwest"; + name = "hallway camera" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"xuN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"xuO" = ( +/obj/effect/turf_decal/trimline/red/filled/corner, +/obj/effect/turf_decal/trimline/red/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"xva" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"xvF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"xvI" = ( +/turf/closed/wall/r_wall, +/area/station/security/checkpoint/escape) +"xvN" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/line, +/obj/structure/table, +/obj/item/wirecutters, +/obj/item/screwdriver{ + pixel_y = 10 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"xvT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"xvY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Crematorium Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"xvZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"xwg" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"xwq" = ( +/obj/structure/cable, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"xwx" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/simple/violet/visible/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"xwK" = ( +/obj/machinery/button/door/directional/west{ + id = "ord_freezer_vent"; + name = "Ordnance Freezer Chamber Vent Control"; + req_access = list("ordnance") + }, +/obj/machinery/atmospherics/pipe/smart/simple/violet/visible/layer2, +/obj/machinery/door/airlock/research/glass{ + name = "Freeze Chamber Interior Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/engine, +/area/station/science/ordnance/freezerchamber) +"xwT" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/atmos{ + name = "Pathology Atmospherics Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "aisat-pathatmos-maint-passthrough" + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"xxe" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/iron/white, +/area/station/science/research) +"xxr" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 9 + }, +/obj/machinery/airalarm/mixingchamber{ + pixel_x = 24; + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/burnchamber) +"xxB" = ( +/obj/structure/table, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/item/paper_bin, +/obj/item/pen/blue{ + pixel_y = 5 + }, +/obj/item/pen, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/tcommsat/computer) +"xxI" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"xxP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"xxS" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/engineering/storage/tech) +"xxX" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"xyc" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Apothecary" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/pharmacy, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"xyi" = ( +/obj/machinery/drone_dispenser/preloaded, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"xym" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/reagent_containers/cup/watering_can, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/service/hydroponics) +"xyv" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"xyw" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/closet/firecloset{ + anchored = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"xyD" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + name = "Research Division Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "sci-entrance" + }, +/obj/effect/landmark/navigate_destination/research, +/turf/open/floor/iron/white/textured, +/area/station/science/research) +"xyN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/science/server) +"xyQ" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/light/directional/east, +/obj/structure/table/glass, +/obj/item/storage/box/disks_nanite, +/turf/open/floor/iron/white, +/area/station/science/research) +"xyZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/closet/secure_closet/personal/patient, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_a) +"xzb" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/checkpoint/medical) +"xzd" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/machinery/light/directional/south, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"xzf" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Port Mix to Waste"; + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"xzm" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Security - Courtroom Southwest"; + name = "security camera" + }, +/obj/item/radio/intercom/directional/south, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"xzs" = ( +/obj/machinery/rnd/server, +/turf/open/floor/circuit/telecomms/server, +/area/station/science/server) +"xzw" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/recharge_floor, +/area/station/maintenance/department/electrical) +"xzC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"xzK" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"xzN" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/structure/sign/departments/medbay/alt/directional/east, +/obj/structure/chair/sofa/corp/left{ + color = "#7fb3d5"; + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"xzX" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/iron/dark, +/area/station/security/office) +"xzZ" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/hallway/secondary/service) +"xAc" = ( +/obj/effect/turf_decal/trimline/purple/line, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"xAf" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/small/directional/west, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"xAj" = ( +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"xAx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"xAB" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"xAL" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/genetics/cloning) +"xAQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"xBB" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security{ + name = "Interrogation" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/security/interrogation) +"xBK" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) +"xBN" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom{ + dir = 4 + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"xBX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/status_display/evac/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"xCa" = ( +/obj/structure/table, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil{ + pixel_x = -1; + pixel_y = -3 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"xCc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/security/brig) +"xCd" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/north, +/obj/structure/table, +/obj/machinery/smartfridge/disks{ + pixel_y = 2 + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/service/hydroponics) +"xCk" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"xCo" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/shower) +"xCt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/iron/textured, +/area/station/maintenance/starboard/aft) +"xCA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/sign/poster/official/safety_eye_protection/directional/west, +/obj/machinery/light/small/directional/west, +/obj/structure/chemical_manufacturer, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"xCP" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/item/wrench, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"xDd" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/decal/remains/human, +/turf/open/floor/grass, +/area/station/command/bridge) +"xDl" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Air to Port Mix" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"xDr" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/structure/sign/poster/official/nanotrasen_logo/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"xDM" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"xEe" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"xEj" = ( +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"xEu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"xEA" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/service/hydroponics) +"xEJ" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"xEM" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/library/lounge) +"xEV" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"xFe" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/obj/structure/sign/poster/official/cleanliness/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"xFj" = ( +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/commons/fitness/recreation) +"xFo" = ( +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"xFr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"xFH" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"xFJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"xFY" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"xGa" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research/glass{ + name = "Robotics Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/turf/open/floor/iron/textured, +/area/station/science/robotics/lab) +"xGb" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "surgery_privacy"; + name = "Surgery Privacy Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/medical/surgery) +"xGo" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/duct, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/service/hydroponics/garden) +"xGy" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/ordnance) +"xGG" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/storage) +"xGH" = ( +/obj/effect/turf_decal/box, +/obj/structure/sign/warning/no_smoking/directional/south, +/obj/machinery/holopad, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/white/smooth_large, +/area/station/maintenance/department/science) +"xGN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Courtroom" + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/courtroom) +"xGO" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/modular_computer/preset/cargochat/engineering{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) +"xHf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/engineering/atmos/storage) +"xHh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/maintenance/department/science) +"xHp" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"xHx" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/radiation/directional/west, +/turf/open/space/basic, +/area/space/nearstation) +"xHA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_b) +"xHH" = ( +/obj/structure/chair/office/light, +/obj/effect/landmark/start/chemist, +/turf/open/floor/iron/white/textured, +/area/station/medical/pharmacy) +"xHL" = ( +/obj/machinery/modular_computer/preset/id{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) +"xHM" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/station/solars/port/aft) +"xHP" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/grunge{ + name = "Observatory" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"xHX" = ( +/obj/machinery/power/tracker, +/obj/structure/cable, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/starboard/fore) +"xId" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix Outlet Pump" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"xIo" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/airalarm/directional/south, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"xIp" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/turf_decal/bot_white, +/obj/item/radio/intercom/directional/north, +/obj/machinery/computer/gateway_control, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"xIz" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"xIH" = ( +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"xIL" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "qm_privacy"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) +"xIP" = ( +/obj/structure/closet/crate/internals, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"xIW" = ( +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"xIX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"xJb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"xJA" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"xJE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters{ + id = "qm_warehouse"; + name = "Warehouse Shutters"; + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/warehouse) +"xJJ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/west, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"xJK" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/dorms) +"xJR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/landmark/blobstart, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) +"xJY" = ( +/obj/effect/turf_decal/trimline/purple/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"xKp" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/dark/visible{ + dir = 4 + }, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/airlock/atmos/glass{ + name = "Turbine Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/disposal/incinerator) +"xKq" = ( +/obj/structure/sign/warning/rad_shelter/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"xKR" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"xKS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/toy/basketball, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron, +/area/station/security/prison/workout) +"xKT" = ( +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/bot_white/right, +/turf/open/floor/iron/dark/smooth_corner, +/area/station/engineering/gravity_generator) +"xLc" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"xLi" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 1 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"xLn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"xLy" = ( +/obj/effect/turf_decal/box, +/obj/machinery/portable_atmospherics/scrubber/huge, +/turf/open/floor/engine, +/area/station/science/ordnance/storage) +"xLD" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"xLN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/lobby) +"xMb" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"xMz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"xMC" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/engineering/break_room) +"xMI" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) +"xMO" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/hallway/secondary/exit/departure_lounge) +"xMR" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "med_lockdown"; + name = "Medbay Emergency Lockdown Shutters"; + dir = 1 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/exam_room) +"xMX" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_y = 9 + }, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"xMY" = ( +/obj/structure/fireaxecabinet/directional/south, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"xNb" = ( +/obj/structure/chair/pew/left{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/chapel{ + dir = 8 + }, +/area/station/service/chapel) +"xNd" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters{ + id = "arrivals_security_post"; + name = "Security Post Shutters" + }, +/turf/open/floor/plating, +/area/station/security/checkpoint/customs/auxiliary) +"xNj" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Engineering - Atmospherics, External HFR Room, East"; + name = "engineering camera" + }, +/obj/structure/closet/radiation, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"xNz" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 6 + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"xNF" = ( +/obj/machinery/airalarm/directional/east, +/obj/structure/chair/sofa/left/maroon{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/wood, +/area/station/commons/locker) +"xNH" = ( +/obj/effect/turf_decal/trimline/purple/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"xNS" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/power/shieldwallgen, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"xNW" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"xOe" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"xOf" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/security/prison/rec) +"xOy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/iron/cafeteria, +/area/station/maintenance/starboard/aft) +"xOV" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"xPw" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage{ + pixel_y = 6; + pixel_x = 8 + }, +/obj/effect/spawner/random/food_or_drink/snack{ + pixel_x = -3; + pixel_y = 2 + }, +/turf/open/floor/carpet, +/area/station/hallway/secondary/entry) +"xPK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/break_room) +"xPS" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/circuits) +"xQr" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"xRd" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/table/glass, +/obj/machinery/fax{ + fax_name = "Chief Medical Officer's Office"; + name = "Chief Medical Officer's Fax Machine" + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"xRh" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"xRi" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/construction) +"xRl" = ( +/obj/item/picket_sign, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"xRn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/service{ + name = "Custodial Closet" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/janitor, +/obj/effect/landmark/navigate_destination/janitor, +/turf/open/floor/iron/dark/textured, +/area/station/service/janitor) +"xRs" = ( +/obj/structure/chair/sofa/left/maroon, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) +"xRA" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/vault{ + name = "Vault Door" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/vault, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/landmark/navigate_destination/vault, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/command/nuke_storage) +"xRJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/stone, +/area/station/science/xenobiology) +"xRO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"xRT" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"xSh" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/light/small/directional/south, +/obj/machinery/dna_infuser, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"xSl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"xSs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/workout) +"xSu" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"xSv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"xSA" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "hos_privacy"; + name = "HoS Office Privacy Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/hos) +"xSJ" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/chair/stool/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"xSM" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/requests_console/directional/south{ + department = "Cargo Bay"; + name = "Cargo Bay Requests Console"; + supplies_requestable = 1 + }, +/obj/machinery/conveyor_switch/oneway{ + id = "package_sort_2" + }, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/cargo/sorting) +"xSV" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) +"xTb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"xTe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/obj/structure/closet/radiation, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal/incinerator) +"xTh" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/item/radio/intercom/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/medical/paramedic) +"xTF" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"xTL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"xTP" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"xTT" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/security/prison/safe) +"xUa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"xUd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"xUs" = ( +/obj/structure/closet/secure_closet/freezer/kitchen{ + req_access = null + }, +/obj/item/food/breadslice/plain, +/obj/item/food/breadslice/plain, +/obj/item/food/breadslice/plain, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/onion, +/obj/item/food/grown/onion, +/turf/open/floor/iron/kitchen, +/area/station/security/prison/mess) +"xUB" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/neutral/corner, +/obj/structure/cable, +/obj/structure/sign/departments/maint/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"xUG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"xUO" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) +"xUZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) +"xVa" = ( +/turf/closed/wall, +/area/station/service/kitchen/coldroom) +"xVi" = ( +/obj/structure/table, +/obj/item/camera, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"xVj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"xVA" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"xVB" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) +"xVF" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"xVH" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"xVL" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"xVM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 8 + }, +/obj/effect/mapping_helpers/mail_sorting/medbay/general, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"xVV" = ( +/obj/structure/rack, +/obj/item/tank/internals/oxygen/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/item/tank/internals/oxygen/yellow{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/radio{ + pixel_x = -5 + }, +/obj/item/radio{ + pixel_x = 5 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"xVW" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/firealarm/directional/west{ + pixel_y = -6 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"xVX" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "Biohazard"; + name = "Biohazard Containment Door" + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/research) +"xWa" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/paper/crumpled, +/turf/open/floor/iron, +/area/station/maintenance/port/fore) +"xWh" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"xWi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"xWj" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"xWm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Recreation Area" + }, +/obj/effect/landmark/navigate_destination{ + location = "Recreation Area" + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/fitness/recreation) +"xWu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Secure EVA Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/eva, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/command/storage/eva) +"xWv" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/large, +/area/station/commons/storage/primary) +"xWM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) +"xWS" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"xXc" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname/directional/south{ + dir = 5 + }, +/obj/machinery/duct, +/turf/open/floor/carpet/orange, +/area/station/security/prison/safe) +"xXd" = ( +/turf/closed/wall, +/area/station/medical/storage) +"xXh" = ( +/obj/machinery/door/window/left/directional/east{ + name = "Fitness Ring" + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"xXk" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/tank/air{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"xXB" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/light, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) +"xXC" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"xXN" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/structure/rack, +/obj/item/wrench, +/obj/item/tank/internals/oxygen, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"xXP" = ( +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) +"xXV" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/computer/station_alert, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/engineering/break_room) +"xYi" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/service/chapel/funeral) +"xYn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"xYr" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/effect/turf_decal/bot, +/obj/effect/landmark/secequipment, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) +"xYt" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"xYE" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"xZd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"xZj" = ( +/obj/structure/table, +/obj/item/storage/crayons, +/obj/item/storage/crayons, +/obj/item/chisel{ + pixel_x = 4; + pixel_y = 3 + }, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/commons/fitness/recreation) +"xZp" = ( +/obj/structure/closet/secure_closet/captains, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"xZt" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/machinery/light/small/directional/east, +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/pipe_dispenser, +/turf/open/floor/iron/dark, +/area/station/construction/mining/aux_base) +"xZB" = ( +/obj/structure/chair/office, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/office) +"xZG" = ( +/obj/structure/table/wood, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/office) +"xZK" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=EVA"; + location = "Security" + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"xZO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port) +"yaj" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"yaL" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/service/hydroponics) +"yaQ" = ( +/obj/machinery/light/broken/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/station/maintenance/starboard/aft) +"yaT" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/camera/directional/east{ + c_tag = "Medical - Storage Room, Northeast"; + network = list("ss13","medbay"); + name = "medical camera"; + dir = 6 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/table/glass, +/obj/item/storage/medkit/regular{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/storage/medkit/o2{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/o2, +/obj/item/storage/medkit/o2{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"yaX" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) +"yaZ" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = 8 + }, +/obj/structure/closet/secure_closet/medical1, +/turf/open/floor/iron/white, +/area/station/medical/office) +"ybb" = ( +/obj/effect/turf_decal/trimline/purple/line, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) +"ybe" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"ybj" = ( +/turf/closed/wall/r_wall, +/area/station/security/prison) +"ybk" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/office) +"ybl" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"ybw" = ( +/obj/machinery/status_display/evac/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/station/maintenance/department/science) +"ybA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/ordnance) +"ybH" = ( +/obj/machinery/light/directional/west, +/obj/structure/chair/stool/directional/south, +/turf/open/floor/carpet/blue, +/area/station/commons/dorms) +"ybU" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Tech Storage - Secure" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) +"yce" = ( +/turf/open/floor/plating, +/area/station/maintenance/port) +"ycf" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/cable, +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 5 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 5; + pixel_x = 4 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"ycu" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/suit_storage_unit/engine, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) +"ycx" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"ycy" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_x = -32 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"ycz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Atmospherics Office Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"ycA" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/obj/machinery/light_switch/directional/east, +/obj/machinery/atmospherics/components/tank/air{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/atmos) +"ycB" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"ycH" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/sign/warning/radiation/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"ycL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"yda" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/carpet, +/area/station/service/library) +"ydh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) +"ydo" = ( +/obj/machinery/door/window/left/directional/west{ + name = "Fitness Ring" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"ydu" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) +"ydv" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) +"ydz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "library_desk_shutters"; + name = "Library Desk Shutters"; + dir = 1 + }, +/obj/structure/table/wood, +/turf/open/floor/iron/dark/textured, +/area/station/service/library/printer) +"ydN" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 8 + }, +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) +"ydO" = ( +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"ydY" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central) +"yeg" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/library/private) +"yen" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/maintenance/department/security) +"yeq" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/main) +"yeu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"yeR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"yeV" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"yfi" = ( +/obj/structure/closet/wardrobe/pjs, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/commons/dorms) +"yfn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/showcase/cyborg/old{ + dir = 8; + pixel_x = 9; + pixel_y = 2 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) +"yft" = ( +/obj/effect/turf_decal/tile/neutral/full, +/obj/machinery/gateway/centerstation, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/gateway) +"yfG" = ( +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/service/library/private) +"yfL" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/brigdoor/security/cell{ + id = "Cell 4"; + name = "Cell 4" + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"ygD" = ( +/obj/machinery/suit_storage_unit/rd, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) +"ygE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"ygO" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"ygS" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/construction) +"ygY" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "hos_privacy"; + name = "HoS Office Privacy Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/hos) +"ygZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/locker) +"yhg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"yhv" = ( +/obj/machinery/status_display/ai/directional/west, +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/turf_decal/box/red, +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/turret_protected/ai) +"yhG" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/line, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"yhO" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"yhT" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"yhW" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"yia" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/brigdoor/right/directional/west{ + name = "Primary AI Core"; + req_access = list("ai_upload") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "primary_ai_core_shutters"; + name = "Primary AI Core Shutters" + }, +/obj/machinery/turretid{ + icon_state = "control_stun"; + name = "AI Chamber turret control"; + pixel_x = 3; + pixel_y = -28 + }, +/turf/open/floor/engine, +/area/station/ai_monitored/turret_protected/ai) +"yic" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/structure/sign/warning/pods/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/office) +"yii" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"yio" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"yiw" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/firealarm/directional/south, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/closet/emcloset, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"yiC" = ( +/obj/machinery/corral_corner{ + mapping_id = "5" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"yiI" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/obj/machinery/newscaster/directional/north, +/obj/machinery/dna_scannernew, +/turf/open/floor/iron/white, +/area/station/science/genetics/cloning) +"yiR" = ( +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/commons/locker) +"yiY" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/bathroom{ + name = "Bathroom" + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/break_room) +"yja" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/office) +"yjc" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/obj/machinery/meter, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"yjh" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"yjo" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/white, +/area/station/science/research) +"yjA" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/closet/secure_closet/evidence, +/turf/open/floor/iron/dark, +/area/station/security/evidence) +"yjH" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/sign/poster/official/space_cops/directional/south, +/obj/machinery/camera/autoname/directional/south, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 5 + }, +/obj/item/folder/red{ + pixel_y = 7 + }, +/obj/item/pen{ + pixel_y = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"yjI" = ( +/obj/structure/rack, +/obj/item/tank/internals/oxygen/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/item/tank/internals/oxygen/yellow{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/radio{ + pixel_x = 5 + }, +/obj/item/radio{ + pixel_x = -5 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"yjJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance{ + name = "Departures Medical Post Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"yjL" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"yjP" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) +"yjR" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/floor/has_bulb, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"yjX" = ( +/obj/structure/table, +/obj/item/storage/fancy/donut_box, +/turf/open/floor/iron/dark, +/area/station/security/office) +"ykx" = ( +/obj/structure/table/glass, +/obj/structure/bedsheetbin, +/turf/open/floor/iron/white, +/area/station/maintenance/port/fore) +"ykJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"ykS" = ( +/obj/machinery/research/anomaly_refinery, +/turf/open/floor/iron, +/area/station/science/ordnance) +"ykT" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/small/directional/north, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"ylb" = ( +/obj/machinery/requests_console/directional/west{ + anon_tips_receiver = 1; + assistance_requestable = 1; + department = "Research Director's Desk"; + name = "Research Director's Requests Console"; + receive_ore_updates = 1; + can_send_announcements = 1 + }, +/turf/open/floor/carpet/purple, +/area/station/command/heads_quarters/rd) +"ylx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Captain's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/captain) +"yly" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) +"ylB" = ( +/obj/machinery/smartfridge/chemistry/preloaded, +/turf/closed/wall, +/area/station/medical/pharmacy) +"ylE" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/line{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/office) +"ylS" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/light/directional/south, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "Service" + }, +/turf/open/floor/iron/dark/side, +/area/station/hallway/secondary/service) +"ymb" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/structure/sink/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"ymc" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"ymi" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/structure/closet/bombcloset/security, +/obj/machinery/light/small/directional/west, +/obj/machinery/camera/directional/west{ + c_tag = "Security - Brig Equipment Room"; + name = "security camera" + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/lockers) + +(1,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(2,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(3,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(4,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(5,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(6,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(7,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(8,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(9,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(10,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(11,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(12,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(13,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(14,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +ksa +ksa +nLE +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(15,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(16,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +nLE +sQS +ksa +rxc +ksa +tUz +ksa +rxc +ksa +ksa +nLE +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +rxc +ksa +uOF +ksa +rxc +ksa +ksa +ksa +ksa +ksa +nLE +sQS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(17,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(18,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +bYL +ksa +ksa +ksa +bYL +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +bYL +ksa +ksa +ksa +bYL +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(19,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uho +ksa +ksa +ksa +uho +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uho +ksa +ksa +ksa +uho +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(20,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uho +ksa +oqp +ksa +uho +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uho +ksa +oqp +ksa +uho +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aSt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(21,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +bYL +uho +uVn +uho +bYL +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +bYL +uho +dSb +uho +bYL +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +bYL +uho +dos +uho +bYL +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(22,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +bYL +iLr +qyd +jlu +bYL +oWe +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +our +bYL +hvz +qyd +dEg +bYL +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +bYL +gWI +qyd +hvz +bYL +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +noh +noh +noh +noh +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(23,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +bYL +uho +dro +uho +bYL +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +bYL +uho +bbV +uho +bYL +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +bYL +uho +wNK +uho +bYL +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(24,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +bgJ +rDW +dLF +uho +uho +uho +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uho +uho +uho +tbw +eJt +bSo +uiu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +edT +rDW +oZQ +kfl +kfl +kfl +kfl +kfl +kfl +kfl +kfl +kfl +kfl +kfl +kfl +kfl +kfl +cRp +cRp +hsC +hsC +hsC +cRp +cRp +ksa +ksa +ksa +noh +noh +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(25,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uho +oDl +dNu +mQR +qvz +qyd +nwe +ksa +ksa +ksa +ksa +ksa +ksa +ksa +qvz +qyd +nwe +aHU +dNu +naL +uho +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uho +oDl +dNu +lcU +kfl +mpz +tQg +liV +ltM +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +cRp +eRQ +wxT +vPL +fvV +xyv +cRp +tgJ +ucJ +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +noh +noh +noh +noh +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(26,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +kXx +dNu +nwa +uiu +uiu +uiu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +uiu +uiu +eed +dNu +tbO +uiu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +kXx +dNu +tbO +kfl +bGK +cXu +twn +ltM +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +cRp +xMz +mRi +oAX +tyt +hNJ +cRp +ryp +ucJ +ucJ +iiv +iiv +iiv +ucJ +ksa +ksa +ksa +ksa +ksa +noh +ksa +xXP +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(27,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +kXx +dNu +qRH +oPJ +bHQ +uiu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +kEL +coE +oeU +dNu +tbO +uiu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +kXx +dNu +bnB +kfl +irt +cXu +uNX +ltM +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +cRp +bKY +xMz +xIX +sMS +rjd +cRp +oHt +fpa +iiv +vjD +jFG +vjD +ucJ +xXP +xXP +xXP +xXP +xXP +noh +xXP +mqG +xXP +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(28,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +xIz +pRn +mSx +qgO +xyw +uiu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +aXb +qgO +bDL +pRn +tbO +uiu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +kXx +pHA +wGf +veQ +mXM +shX +ntz +ltM +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +cRp +mbK +oAX +clf +lJj +whN +cRp +ucJ +cim +ucJ +fOB +fKp +eot +ucJ +ksa +ksa +ksa +ksa +ksa +noh +ksa +xHM +ksa +noh +noh +noh +noh +noh +noh +noh +noh +noh +noh +noh +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(29,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +xIz +pRn +dNu +dHj +rIC +uiu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +goq +dHj +dNu +pRn +tbO +uiu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +kXx +pRn +wGf +veQ +mXM +bFX +uNX +nct +vpp +wZF +wZF +wZF +hHz +wZF +wZF +wZF +wZF +cRp +cRp +cRp +pzi +cRp +cRp +cRp +wXM +pIS +gUS +gjb +ezp +lQw +ucJ +ksa +ksa +ksa +ksa +ksa +noh +ksa +wlX +ksa +xXP +ksa +ksa +xXP +ksa +ksa +xXP +ksa +ksa +xXP +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(30,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +kXx +pRn +wMm +rDe +ifT +uiu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +vXE +qlp +cQM +pRn +tbO +uiu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +kXx +pRn +bnB +kfl +smB +cXu +ntz +ltM +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +cRp +eGV +tWy +uut +cgX +cox +cRp +suC +pIS +aKS +hio +meh +sWl +ucJ +ksa +ksa +ksa +ksa +ksa +noh +ksa +wlX +ksa +myv +myv +myv +myv +myv +myv +myv +myv +myv +myv +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(31,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +kXx +pRn +nwa +uiu +uiu +uiu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +uiu +uiu +eed +pRn +tbO +uiu +ksa +ksa +ksa +ksa +vzh +ksa +ksa +ksa +ksa +uiu +kXx +xxP +sMy +nnB +eQj +uYP +fNy +ltM +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +cRp +fby +hxM +dZz +sKs +qQe +xhj +iXY +pIS +ext +kni +kau +jtU +ucJ +xXP +xXP +xXP +xXP +xXP +noh +xXP +wlX +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xXP +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(32,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +lZx +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uho +jkQ +pRn +mQR +qvz +qyd +nwe +ksa +ksa +ksa +ksa +ksa +ksa +ksa +qvz +qyd +bLR +aHU +pRn +naL +uho +ksa +ksa +xXP +uho +bsl +uho +xXP +ksa +ksa +uho +oDl +xxP +tbO +kfl +xFH +uYP +oxc +ltM +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +cRp +tRW +rwq +nxG +rwq +muO +cRp +mgd +pIS +kHP +ran +quR +sQF +ucJ +ksa +ksa +ksa +ksa +ksa +noh +ksa +wlX +ksa +myv +myv +myv +myv +myv +myv +myv +myv +myv +myv +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(33,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uho +akO +uiu +uiu +uiu +uiu +uiu +uiu +akO +uho +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uiu +kXx +pRn +weD +uho +uho +uho +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uho +uho +uho +gIA +pRn +tbO +uiu +uoo +mpi +uoo +uiu +shF +uiu +uoo +mpi +uoo +uiu +kXx +xxP +lcU +kfl +phb +pMc +xZt +ltM +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +wZF +cRp +jDX +vlq +afh +xMz +xMz +cRp +dpc +tdV +gsj +kni +quR +ken +ucJ +ksa +ksa +ksa +ksa +ksa +noh +ksa +wlX +ksa +xXP +ksa +ksa +xXP +ksa +ksa +xXP +ksa +ksa +xXP +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(34,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fPN +nGn +nGn +nGn +fPN +pun +pun +wcU +wcU +wcU +wcU +pun +pun +pun +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uho +qyd +uiu +njX +lBS +kqu +bHQ +uiu +qyd +uho +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uho +jGA +pRn +qRH +bHQ +uiu +uoo +ksa +ksa +ksa +dlC +ksa +ksa +ksa +uoo +uiu +njX +oeU +pRn +hTV +uho +ksa +uho +uiu +uho +eaV +uho +uiu +uho +ksa +uho +kXx +xxP +feq +cRp +cRp +cRp +cRp +cRp +cRp +cRp +cRp +cRp +cRp +cRp +cRp +cRp +cRp +cRp +cRp +cRp +wXA +cRp +cRp +cRp +cRp +cRp +cRp +cRp +nZj +cRp +cRp +ksa +ksa +ksa +ksa +ksa +noh +ksa +wlX +ksa +myv +myv +myv +myv +myv +myv +myv +myv +myv +myv +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(35,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +fEP +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fPN +whJ +bCt +lBu +fPN +vqP +urk +dPz +bMC +dyv +gLW +imV +uPa +pun +uho +uiu +uiu +uiu +uiu +uiu +uho +uho +aPe +uiu +eed +qgO +dHj +nwa +uiu +uhA +uho +uho +uiu +uiu +uiu +uiu +uiu +uho +uho +kXx +tUH +ryw +trZ +bYL +bYL +bYL +uiu +uiu +uiu +uiu +uiu +bYL +bYL +bYL +esT +tNG +tUH +tbO +uho +uiu +uho +mVX +uho +qOX +uho +fDb +uho +uiu +uho +vPe +xxP +tbO +cRp +qJc +hjd +wJA +owX +wJA +ePb +qVf +xfW +wJA +wJA +wJA +xfW +qVf +wJA +cWF +wJA +jdV +rSs +xMz +kde +cRp +bOH +xMz +dAR +xcx +bOH +hsC +xXP +xXP +xXP +xXP +xXP +noh +xXP +wlX +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xXP +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(36,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +uoo +ksa +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ksa +uoo +ksa +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fPN +whJ +rxs +hjc +fPN +fBd +wUn +dPz +bMC +xZB +xZG +dPz +mEg +pun +exU +bgK +bgK +bgK +wYC +bgK +rVz +fMd +qHC +oPJ +oeU +pHA +ivp +qRH +oPJ +qHC +fMd +fqY +bgK +wYC +bgK +bgK +bgK +bgK +ghp +wzr +tUH +dNu +qRH +oPJ +eCd +uBE +oPJ +oPJ +oPJ +oPJ +oPJ +hil +eCd +oPJ +oeU +dNu +tUH +uet +umz +bgK +tcZ +mzF +nJN +uMW +nJN +quV +iwZ +rFP +bgK +aqQ +lDy +ajG +cRp +rSs +pLl +rdt +rnO +rnO +rnO +jGs +jGs +jGs +gbM +jGs +jGs +jGs +jGs +jGs +jGs +jGs +jGs +jGs +jGs +iYs +jGs +jGs +jGs +fSg +pvy +hsC +ksa +ksa +ksa +ksa +ksa +noh +ksa +wlX +ksa +myv +myv +myv +myv +myv +myv +myv +myv +myv +myv +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(37,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +fEP +uoo +fXE +snl +snl +snl +snl +snl +snl +snl +snl +snl +snl +snl +snl +fXE +uoo +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fPN +kCF +pLu +vXb +fPN +bho +gRk +maX +nha +lYM +kkg +maX +lYe +fHS +bIb +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +lnE +xxP +xxP +xxP +ugj +xxP +vho +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +xxP +lZP +irc +irc +irc +hMD +irc +hNN +irc +irc +irc +irc +irc +irc +irc +irc +irc +irc +tvj +rcC +puc +fHI +jGs +jkF +nxG +djP +xMz +iXB +xMz +djP +xMz +xMz +xMz +djP +xMz +uut +xMz +xmp +iuN +uFU +xMz +tRg +cRp +lMG +hMw +xMz +cRl +pvy +hsC +ksa +ksa +ksa +ksa +ksa +noh +ksa +wlX +ksa +xXP +ksa +ksa +xXP +ksa +ksa +xXP +ksa +ksa +xXP +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(38,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +fXE +uoo +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +uoo +fXE +ksa +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fPN +vkh +coA +dKf +fPN +cRQ +dpZ +wLa +alv +cXK +cXK +cfv +xmK +pun +pdz +ndl +qnR +cUh +jUb +iGw +qnR +qnR +ndl +qnR +qnR +qnR +qnR +qnR +qnR +ndl +qnR +qnR +iGw +qnR +cUh +jUb +vRw +qnR +ghp +qnR +qnR +qnR +pDR +hen +xxP +xuO +pny +iHR +voE +vQg +pny +gHQ +wjA +vUa +sQv +sJJ +jxF +jxF +ghp +jxF +jxF +jxF +sJJ +lke +jxF +jxF +jxF +jxF +jxF +jxF +jgM +lTP +cRp +xMz +rdt +iQW +cRp +gCP +dTj +xIW +cRp +cJB +bOH +tRg +cRp +cRp +hsC +hsC +hsC +hsC +hsC +hsC +hsC +cRp +cRp +cRp +tRg +cRl +pvy +hsC +ksa +ksa +ksa +ksa +ksa +noh +ksa +wlX +ksa +myv +myv +myv +myv +myv +myv +myv +myv +myv +myv +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(39,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +uoo +fXE +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +fXE +ksa +uoo +uoo +uoo +xXP +xXP +uoo +xXP +uoo +cpz +cpz +cpz +cpz +nZL +fPN +vnP +fPN +fPN +tLs +mEg +lYe +jOc +mEg +nyL +ydv +pKx +fPN +fPN +fPN +fPN +cwQ +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +ibw +fPN +fPN +uho +uho +uho +uho +uho +uho +ngz +tAb +whI +uho +kCD +geT +lNx +uho +whI +miv +whI +cLs +cLs +cLs +cLs +cLs +ucP +ucP +ucP +ucP +ucP +ucP +ogY +ogY +ogY +ogY +ogY +uMz +ogY +cRp +cIV +pLl +obt +cRp +cRp +cRp +cRp +cRp +cRp +cRp +cRp +cRp +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cRp +sit +cRl +bOH +hsC +xXP +xXP +xXP +xXP +xXP +noh +xXP +wlX +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xHM +xXP +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(40,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +uoo +ksa +uoo +ksa +fXE +uoo +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +uoo +fXE +uoo +uoo +fXE +fXE +ahA +uoo +uoo +cpz +oAe +cpz +qXm +xSJ +tkE +nZL +aMo +iQy +hjI +fPN +mEg +mEg +lYe +iSI +mEg +bMC +sQf +pGu +fPN +vxd +wfE +sNZ +iHO +rSo +fPN +vxd +wRs +nbP +fPN +qPR +wfE +lGp +fPN +vxd +fBi +wRs +fPN +xkQ +uTq +iHO +fBi +fPN +gAI +qem +aqj +hsB +bbw +uho +oAK +xxP +qdw +vRV +vRV +vRV +vRV +vRV +cdz +wjA +xdT +cLs +gQr +jPm +vbK +mbN +ivb +rRb +ybk +cee +vcD +ucP +cSq +cvr +sNl +nBb +loL +eAS +sfz +cRp +cRp +wCn +cRp +cRp +eGm +gTH +gTH +xtQ +hzK +msF +xGG +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cRp +cRp +uJP +cRp +cRp +ksa +ksa +ksa +ksa +ksa +noh +ksa +wlX +ksa +myv +myv +myv +myv +myv +myv +myv +myv +myv +myv +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(41,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +mkV +snl +fXE +fXE +fXE +snl +snl +snl +snl +snl +snl +snl +snl +snl +snl +snl +snl +fXE +fXE +fXE +fXE +vYB +kRu +ahA +tBD +cRg +wdv +qKk +gzX +qAy +oRa +kbD +iHO +iHO +iHO +qgA +lYe +lYe +lYe +mEg +mEg +bMC +cla +lYB +fPN +qPR +iHO +iHO +iHO +iHO +aRM +iHO +iHO +iHO +aRM +iHO +iHO +iHO +aRM +iHO +iHO +iHO +aRM +iHO +iHO +iHO +fBi +fPN +xPw +qem +wFu +qzk +lZJ +qAk +xIz +xxP +jww +vRV +ngM +rSY +jFn +vRV +yhG +wjA +pWC +cLs +qQT +uBC +uBC +usv +dUt +qZn +csj +prU +sNm +ucP +ogY +ogY +cUz +fpM +xSM +ogY +ogY +gJY +fJx +eNW +gEi +oiB +jga +nxh +nxh +nxh +nxh +dOX +xGG +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cRp +tRg +cRl +pWE +cRp +ksa +ksa +ksa +ksa +ksa +noh +ksa +wlX +ksa +xXP +ksa +ksa +xXP +ksa +ksa +xXP +ksa +ksa +xXP +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(42,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +uoo +ksa +uoo +ksa +fXE +uoo +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +uoo +fXE +uoo +uoo +fXE +fXE +ahA +uoo +uoo +cpz +oAe +cpz +ogg +mCt +aQt +nZL +duQ +iHO +vxd +fPN +uof +qDp +kkb +dGT +cid +bMC +dyv +gLW +fPN +qPR +iHO +nbP +wfE +vxd +fPN +lGp +vxd +wfE +fPN +vxd +qPR +wRs +fPN +nbP +wRs +vxd +fPN +qVi +wfE +uBX +wfE +fPN +qem +qem +kiI +qem +qem +tJy +wbe +xxP +sNf +vRV +giZ +mgY +imH +vRV +jci +wjA +smC +uiW +egK +uBC +uBC +hYM +png +jlN +tvt +ske +oYs +ucP +vCB +bOS +blh +vMT +hxi +cpv +tkC +gJY +eYp +vaP +aim +nxh +nxh +nxh +tEB +gzQ +nxh +dOX +xGG +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +hsC +xMz +cRl +xMz +hsC +ksa +ksa +ksa +ksa +ksa +noh +ksa +wlX +ksa +noh +noh +noh +noh +noh +noh +noh +noh +noh +noh +noh +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(43,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +uoo +fXE +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +fXE +ksa +uoo +uoo +uoo +uoo +uoo +uoo +xXP +uoo +cpz +cpz +nZL +nZL +nZL +fPN +qru +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +cwQ +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +wfE +rSo +iHO +spv +swd +lLg +lLg +chH +lLg +lLg +fMt +eOt +xxP +gKP +fhw +ejt +ayh +rGN +sFv +rAT +wjA +mle +oHb +qQT +iFy +oMq +usv +pXG +kRe +tvt +ske +chD +ucP +oSM +api +fzB +iYF +aXJ +ogY +ogY +gJY +hXv +vaP +nxh +pin +pZc +nxh +gzQ +tEB +nxh +muz +gJY +gJY +gJY +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +hsC +xIX +cRl +rSs +hsC +ksa +ksa +ksa +ksa +ksa +xXP +xXP +wlX +xXP +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(44,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +fXE +uoo +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +uoo +fXE +ksa +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +fPN +tfS +gtN +npa +iHO +rSo +fPN +qPR +wfE +wfE +qPR +fPN +vxd +iCB +qPR +fPN +kCF +iHO +vxd +fPN +mxu +fdO +uLJ +loe +ngX +fPN +eyh +tMt +mNt +mNt +oNL +wvU +gHO +fPN +dhd +nbP +iHO +vkg +fPN +bRG +bbw +lmw +qem +qem +tJy +wbe +xxP +sNf +nEU +ufu +bEV +lCf +xNd +jci +wjA +mle +oHb +qQT +sui +wkK +qZj +ucP +vhN +tvt +ske +cfl +ucP +qUB +woB +mUM +hJi +wQE +cxp +jLR +jat +sAq +vaP +nxh +hPA +pZc +nxh +tEB +gzQ +aUO +nsc +cxk +sRU +cxk +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +hsC +xMz +cRl +xMz +hsC +ksa +ksa +ksa +ksa +ksa +xXP +xXP +wlX +xXP +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(45,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +fXE +snl +snl +snl +snl +snl +snl +snl +snl +snl +snl +snl +snl +fXE +uoo +fEP +ksa +sQS +ksa +ksa +ksa +ksa +ksa +fEP +ksa +nGn +rMn +iaB +lLW +iHO +iCB +fPN +rHG +nbP +qVi +wfE +fPN +wfE +rHG +wfE +fPN +wfE +iHO +rSo +fPN +vBQ +jKV +ijP +xVA +ykx +fPN +oNL +oNL +jiy +mNt +oNL +pAd +uXH +fPN +vxd +iHO +iHO +qVi +fPN +qem +qem +qem +qem +qem +qAk +xIz +xxP +xeZ +mcd +ams +bEV +lCf +cUe +wDM +wjA +dws +duH +xLN +gea +gea +hlD +udb +eae +fgW +umi +qxK +vOS +vjV +nMW +cVb +nMW +nMW +nMW +fVj +kgZ +bQX +pOB +rLs +rLs +rLs +oue +gzQ +tEB +hTx +fmb +hxy +mdC +uVf +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +hsC +tRg +cRl +nrh +hsC +ksa +ksa +ksa +ksa +ksa +xXP +wlX +wlX +wlX +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(46,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +uoo +ksa +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ieE +ksa +uoo +ksa +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +nGn +rMn +wfE +mlj +iHO +iHO +aRM +iHO +iHO +iHO +iHO +aRM +iHO +iHO +iHO +aRM +iHO +jef +jiS +wLw +iDf +daN +cfc +uPD +urt +fPN +giy +vXA +mNt +pAd +bKL +nai +uXH +fPN +vxd +iHO +wfE +jOZ +fPN +dTD +dTD +bkM +fAf +dMC +uho +rau +xxP +kfe +vRV +hPB +lQc +kUJ +vRV +dxq +wjA +mle +cLs +cjG +dlH +xrf +iAi +ucP +ikq +fVI +bMr +buR +ucP +lRp +hdS +dpy +sYV +dpy +asT +fSw +jat +eMh +qNW +nNM +jWQ +aCG +jTs +pHr +mjC +mjC +afv +gJY +xGG +gJY +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +hsC +xMz +cRl +wnd +hsC +xXP +xXP +xXP +xXP +xXP +xXP +wlX +fFV +wlX +xXP +xXP +xXP +xXP +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(47,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +fEP +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +fPN +dQh +wfE +vxd +iHO +fBi +fPN +vxd +qPR +iCB +nbP +fPN +nbP +fBi +fBi +fPN +qPR +iDb +qPR +fPN +mXr +fTT +jON +qzL +xVA +fPN +oNL +oNL +sVp +pAd +oNL +pAd +uXH +fPN +fPN +ibw +fPN +fPN +fPN +jmh +jmh +jmh +jmh +jmh +jmh +fGO +xxP +kvC +vRV +vRV +vRV +vRV +vRV +hLV +wjA +qhr +cLs +pCM +oND +rsn +rRd +ucP +sWP +rYM +gTn +lnp +bwg +iIh +iIh +mcn +trV +mcn +fvH +qhu +qhu +qhu +qhu +qhu +qhu +sTE +jTs +tEB +gzQ +wPX +fmb +hxy +mdC +uVf +ony +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +hsC +xIX +cRl +aCA +hsC +ksa +ksa +ksa +ksa +ksa +xXP +wlX +tMu +wlX +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(48,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fPN +fPN +fPN +fPN +fPN +fPN +ibw +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +wHD +llG +mQU +tom +oNL +eSX +uXH +fPN +hjI +iHO +fBi +fPN +bPy +xGo +hSz +eFe +cWn +wom +jmh +tnu +xxP +gxn +wkj +wkj +fon +wkj +wkj +oBo +wjA +ajG +bnl +bnl +bnl +bnl +bnl +bnl +bnl +lGD +bnl +bnl +ddy +kkq +prl +snm +bKO +oIc +fvH +vyC +iue +suW +boe +wAR +qhu +gUf +jTs +tEB +tEB +kza +tPs +pOx +gVK +pOx +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +hsC +xMz +cRl +xMz +hsC +ksa +ksa +ksa +ksa +ksa +xXP +uoo +lBO +xXP +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(49,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +fPN +dPU +wOS +qYY +fPN +wfE +iHO +nsB +fPN +klx +mTj +wZQ +wZQ +wZQ +wZQ +kQo +sSA +wZQ +wZQ +imb +kQo +wZQ +wZQ +wZQ +wZQ +wZQ +aJq +oNL +oNL +oNL +bsf +pAd +oNL +oNL +oNL +fPN +kCF +uBX +vxd +fPN +kNO +aKB +tIO +tIO +bMv +rud +jmh +nMm +xxP +xxP +xxP +xxP +bIZ +irc +irc +irc +tvj +sMy +msO +fUs +fUs +fUs +fUs +hLB +fUs +tTR +gai +rmn +ddy +cew +mug +nns +fET +eBR +fvH +oHG +pHx +pHx +pHx +xzC +xIL +nki +jTs +tEB +gzQ +nxh +blA +gJY +gJY +gJY +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +hsC +tQD +cRl +xIX +hsC +ksa +ksa +ksa +ksa +ksa +xXP +xXP +joE +uoo +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(50,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +nGn +pGM +aDR +yhT +byj +odN +iHO +iHO +qgA +qmK +fCT +fCT +fCT +fCT +fCT +fCT +fCT +fCT +fCT +fCT +fCT +fCT +fCT +fCT +fCT +fCT +qOB +oNL +noN +gBc +tCW +pAd +off +off +off +fPN +vKc +mYW +uCh +arj +goz +bKP +axZ +axZ +qEk +vzJ +jmh +rYz +fhd +gNn +aub +hBe +wjA +anh +dOn +whr +fhd +ufq +bnl +fyu +rFC +plt +tei +bnl +cLZ +tTR +cLZ +uKO +ddy +fmZ +oJB +mVD +fQY +mbE +fvH +prw +avz +tzZ +siM +haq +wcp +dAS +eTG +gzQ +tEB +nxh +raY +xGG +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +hsC +xIX +cRl +tRg +hsC +ksa +ksa +ksa +ksa +ksa +xXP +amD +yeu +amD +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +nAS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(51,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +fPN +vDJ +kKV +sjF +fPN +wnn +iHO +fhe +fPN +ghV +ldX +fHK +tSN +frx +jaQ +fHK +fHK +fHK +fHK +fHK +fHK +jaQ +frx +tSN +fHK +ldX +btf +oNL +oNL +oNL +fBQ +oWC +oWC +oWC +cBe +fPN +cwL +mYW +vXb +fPN +etC +aKB +tIO +tIO +bMv +iNK +jmh +jmh +jmh +jmh +jmh +iqD +mIj +iqD +pEY +pEY +pEY +pEY +bnl +bnl +bnl +bnl +bnl +bnl +jEi +tTR +gAb +uVJ +ddy +ddy +ddy +ddy +etp +ddy +ddy +cdN +pHx +jJF +pHx +pHx +xIL +nki +jTs +rEv +nxh +nxh +raY +xGG +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cRp +hGS +cRl +gCP +cRp +ksa +ksa +ksa +ksa +ksa +xXP +bhd +xSu +bhd +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(52,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fPN +fPN +fPN +fPN +fPN +fPN +ibw +fPN +fPN +xgf +cDu +xgf +jvu +mFS +mFS +mFS +dfr +mFS +mFS +dfr +mFS +mFS +mFS +jvu +xgf +cDu +xgf +oNL +nNO +bmp +val +gPS +cXN +oWC +wig +fPN +cwL +mYW +vxd +fPN +cMT +bKP +axZ +axZ +qEk +mrF +hCH +kVZ +mzp +gZP +ndi +kNg +jZY +erS +pEY +eVZ +sXx +fZO +cvn +iOV +ogR +mKZ +vBm +bnl +jEi +bsR +qqu +azE +bnl +rmn +rmn +tLu +fUs +jEi +bnl +qJD +fbw +qqU +xeM +aKM +qhu +gUf +jTs +ggp +iZd +vlU +tlg +xGG +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cRp +cRp +uJP +cRp +cRp +ksa +ksa +ksa +ksa +ksa +amD +amD +tlz +amD +amD +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(53,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +xXP +xXP +xXP +xXP +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +fPN +iac +sVK +nGW +xqr +dKf +fPN +klx +oSm +aJq +mFS +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +mFS +klx +oSm +aJq +oNL +oNL +oNL +oNL +oNL +oNL +mTp +oNL +fPN +fPN +wMu +fPN +fPN +xja +aKB +tIO +tIO +bMv +nDK +wZk +fnK +any +bVa +kTj +aKy +leA +erS +dCZ +emg +dSO +juc +juc +juc +qxQ +pig +pff +bnl +wgX +fUs +aeY +kLu +exO +kLu +kLu +kLu +kKf +jEi +bnl +qhu +tMU +tMU +tMU +qhu +qhu +utW +jTs +sdf +tpm +tpm +tpm +tpm +tpm +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cRp +cKF +cRl +xtD +cRp +cRp +cRp +ksa +ksa +ksa +amD +ycy +xSu +dmE +amD +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(54,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +xXP +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +nGn +wfE +edD +tcO +kgC +edD +fPN +slu +fCT +hUt +mFS +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +mFS +foP +fCT +fjo +hYZ +bQC +eBD +bQC +hYZ +bir +pEG +dGY +bZK +dGY +pEG +odm +kxo +ucO +lYa +ruN +xjO +uqS +ciA +uKT +qHo +tkP +wei +ndi +kNg +jZY +ieP +iEO +ciR +nJa +nJa +nJa +nJa +nJa +pig +oxO +bnl +jIv +ejE +uHf +uKO +bnl +plt +plt +cdP +tTR +vRX +bnl +qxu +sQz +smN +aGv +epO +ffH +jga +jTs +fEr +jXi +uXU +nDD +elW +nfv +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +hsC +fqI +cRl +xMz +xMz +tRg +hsC +ksa +ksa +ksa +amD +xVH +wqw +nZD +amD +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(55,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +xXP +xXP +xXP +ksa +ksa +xXP +xXP +ksa +ksa +xXP +xXP +ksa +ksa +ksa +fEP +ksa +nGn +hda +wfE +tcO +wfE +qoB +fPN +adk +fCT +xqC +mFS +kOr +kOr +jbH +kOr +kOr +kOr +kOr +kOr +kOr +kOr +mFS +svQ +fCT +jjz +hYZ +jYd +qUQ +cBc +hYZ +xJK +xrJ +wIG +wIG +pbv +xrJ +itN +kxo +ndi +rAl +ndi +jmh +ezf +ezf +xiC +ezf +ezf +ezf +ezf +beT +jZY +nZO +pEY +xCd +jRP +juc +kgn +kgn +nJa +tJE +pEY +bnl +bnl +bnl +bgf +bnl +bnl +bnl +bnl +uKO +bsR +kLu +kLO +bQX +rLs +rLs +rLs +rLs +rLs +rLs +iYk +wOe +mHA +iHv +aWR +bWS +tpm +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +hsC +rFQ +cRl +jBi +cRl +ehr +hsC +xXP +xXP +xXP +amD +eib +oVv +mej +amD +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uZR +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(56,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +uoo +uoo +fPN +vcW +rEd +tcO +iCB +hTN +fPN +oQn +fCT +aIp +mFS +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +mFS +lNW +fCT +aIp +hdC +fwn +qUQ +qUQ +lGI +ufl +xrJ +rdI +hFF +hEi +xrJ +qNB +rwA +hhK +smQ +hCj +sDz +gax +jlA +gLv +afR +enx +scF +dlj +iwn +jZY +pHj +pEY +pEY +utE +juc +kgn +kgn +nJa +wGE +pEY +kWu +pfJ +fLi +tEZ +bSc +eaL +kWu +bnl +rFC +fUs +gAb +bnl +dYv +mOT +uHs +iOT +exk +wcC +tKL +uWB +dUd +jXi +idF +fRi +wPb +nfv +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +hsC +gtT +xMz +xMz +cRl +tQD +hsC +ksa +ksa +ksa +xba +xba +ujN +xba +xba +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(57,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +xXP +xXP +xXP +xXP +xXP +xXP +xXP +xXP +xXP +xXP +xXP +ksa +ksa +uoo +ksa +fPN +fPN +fPN +ibw +fPN +fPN +fPN +nCB +qzQ +rIR +jvu +tnh +kOr +kOr +kOr +xih +kOr +kOr +kOr +kOr +hAc +jvu +tQS +qzQ +bMc +mOB +xVB +xVB +xVB +mQZ +pCI +xrJ +xrJ +jJk +xrJ +xrJ +oCd +xhs +ygZ +kos +ezY +sDz +scf +jlA +sQH +kKh +kKh +iXy +quZ +dgT +jZY +nQm +dyk +mWH +emg +juc +kgn +kgn +nJa +xqS +rCa +uGS +wNw +emg +ohF +pig +wKV +uGS +bnl +bnl +ohf +bnl +bnl +rDR +xJE +tVM +xJE +rDR +rDR +rCj +nYQ +rCj +tpm +tpm +tpm +tpm +tpm +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cRp +cRp +cRp +lMG +cRl +xIX +cRp +ksa +ksa +ksa +wEB +oWd +tuu +dle +wEB +ksa +ksa +xXP +ksa +uoo +ksa +ksa +wEB +wEB +saV +saV +saV +ksa +uoo +ksa +nAS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(58,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +uoo +uoo +fPN +xYt +wfE +iHO +wfE +vKc +fPN +xRs +fCT +aIp +mFS +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +mFS +lNW +fCT +aIp +drQ +qUQ +ksb +qUQ +lej +eDT +juk +tsw +pMB +tux +qTI +hpl +vFV +wfR +kos +epk +sDz +uey +jlA +sQH +sRt +jzq +skl +dlj +pzt +jZY +nQm +dyk +gLY +emg +juc +fzI +juc +nJa +xqS +rCa +jSO +qPn +emg +ohF +pig +rJk +jSO +bnl +wgX +fUs +jEi +bnl +emS +rkf +nOw +rkf +wqK +rDR +bHL +bjg +kzJ +drR +fvX +rCj +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cRp +cRp +uJP +cRp +cRp +saV +saV +saV +wEB +pam +mfv +rXQ +wEB +saV +saV +wEB +saV +wEB +saV +saV +wEB +sjk +hRA +mXe +saV +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(59,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +xXP +xXP +ksa +ksa +xXP +xXP +xXP +ksa +xXP +xXP +xXP +xXP +ksa +fEP +ksa +nGn +wfE +eJq +iHO +noO +iCB +fPN +idJ +fCT +hUt +mFS +kOr +kOr +kOr +kOr +kOr +kOr +kOr +jbH +kOr +kOr +mFS +svQ +fCT +xdJ +hYZ +xSV +ksb +pql +hYZ +xJK +juk +dru +fnN +fnN +qTI +pBz +kxo +nOK +kos +epk +sDz +wSQ +jlA +sQH +ejh +mgQ +xMb +ezf +wtn +jZY +nQm +dyk +kDb +emg +juc +juc +juc +nJa +xqS +rCa +knA +wKr +emg +ohF +pig +isR +knA +bnl +epc +fUs +rmn +bnl +jVP +anp +nOw +tnW +jVP +rDR +oVH +fxL +jmy +rWp +bCq +rCj +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cRp +qLd +cRl +tRg +cRp +vrf +nwz +cfP +wEB +nwz +tuu +nwz +jwW +nwz +nwz +vfY +nwz +lAT +eSd +nwz +xHP +nwz +vuH +cPI +saV +uoo +uZR +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(60,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +fEP +ksa +nGn +dae +wfE +iHO +iHO +qPR +fPN +slu +fCT +xqC +mFS +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +mFS +foP +fCT +fjo +hYZ +eJG +clg +rqa +hYZ +jTy +juk +tYl +ptq +twW +wEH +yfi +kxo +wfR +kos +hZp +sDz +vkz +jlA +sQH +xWv +eql +hEq +ezf +izg +jZY +nQm +dyk +ufA +emg +juc +kgn +kgn +nJa +xqS +rCa +uGS +wNw +emg +sJH +pig +wKV +uGS +bnl +gAb +fUs +rmn +bnl +rpA +xIP +nOw +tnW +jVP +rDR +flo +ojO +sec +jmy +bqN +rCj +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cRp +xMz +cRl +cRl +pqQ +tuu +tuu +tuu +iVI +tuu +tuu +vXG +wEB +saV +saV +wEB +saV +wEB +saV +saV +wEB +ycx +nwz +jgH +saV +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(61,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +xXP +xXP +xXP +xXP +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +uoo +uoo +fPN +lBu +lBu +wfE +iHO +qPR +fPN +ghV +ldX +btf +mFS +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +kOr +mFS +ghV +ldX +btf +kxo +kxo +kxo +kxo +kxo +dqb +juk +vZb +kxo +kxo +kxo +kxo +kxo +rEP +kos +uMT +sDz +tkR +agv +sQH +mKC +mgQ +bmq +ezf +rTn +jZY +bND +pEY +pEY +lsR +juc +kgn +kgn +nJa +wGE +pEY +aSR +guH +emg +ohF +pig +aBL +aSR +bnl +wgX +fUs +jEi +bnl +dVe +oUG +cEG +oUG +eSC +rDR +sUv +bZF +jmy +jmy +hAE +lRD +lRD +lRD +lRD +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cRp +rFQ +nkU +cJB +cRp +nwz +tuu +vrf +wEB +uov +byK +jgH +wEB +ksa +ksa +uoo +ksa +uoo +ksa +ksa +wEB +wEB +saV +saV +saV +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(62,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fPN +fPN +fPN +fPN +ibw +fPN +fPN +xgf +cDu +xgf +jvu +mFS +mFS +jvu +dfr +mFS +mFS +dfr +jvu +mFS +mFS +jvu +xgf +cDu +xgf +kxo +cbD +ybH +kkH +kxo +ufl +hoa +hpl +kxo +lLZ +hMn +hpL +kxo +feD +kos +epk +sDz +gNX +hje +sQH +wtt +vzN +fGl +dlj +pzt +jZY +nZO +pEY +vaR +uFv +juc +kgn +kgn +nJa +vom +pEY +gtA +wuS +sBx +ohF +xEA +fOZ +oTX +bnl +bnl +ohf +bnl +bnl +iqi +tVz +nOw +oUG +icZ +rDR +nfr +bZF +jmy +jmy +bQr +rCj +wKv +frC +rCj +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cRp +hsC +hsC +hsC +cRp +wEB +aJB +wEB +wEB +saV +saV +saV +wEB +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(63,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +rxc +nGn +oUr +nGn +uSp +iHO +hgi +fPN +klx +oSm +wZQ +kQo +umJ +qiw +jvu +jFv +kdp +xdM +gLw +jvu +slc +koP +kQo +wZQ +oSm +aJq +kxo +hkO +oWT +uZH +kWj +pYI +hoa +gLN +vlr +gmK +jyz +qik +kxo +aLZ +kos +daT +sDz +cbh +qmB +sQH +eHO +nJL +neo +jUD +foU +mCr +aAm +rwW +keu +toh +toh +toh +toh +toh +sDr +heI +keu +tGT +tGT +dZu +cUR +cUR +bwW +bnl +bOO +fUs +cLZ +bnl +lvI +ygE +oQr +aVt +loc +rDR +aLr +bZF +bZF +bZF +eNK +oBh +mxw +fbx +kGS +pgs +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +wEB +vrf +tuu +sbg +wEB +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(64,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +iUx +pTC +lho +nOZ +iHO +axF +kIy +lNW +fCT +fCT +fCT +fCT +bMc +lUT +lor +mrI +lor +lor +lUT +qmK +fCT +fCT +fCT +fCT +wGi +kxo +hTs +lEf +mvb +kxo +ufl +hoa +qNB +kxo +lVj +jbQ +iho +kxo +kNn +bdl +epk +sDz +bnL +wuk +gCA +fIz +bvv +vGb +dlj +pzt +jZY +erS +dCZ +emg +sjV +juc +juc +juc +jCl +pig +pEY +gHw +tar +xAQ +tQJ +ctk +pAW +pml +bnl +cLZ +fUs +bOO +bnl +vqK +oUG +nOw +sGm +wnQ +rDR +nOj +tKr +bZF +jmy +bNG +rCj +dOf +pQl +rCj +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +saV +nwz +tuu +lXL +saV +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(65,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +rxc +nGn +hPN +nGn +xkQ +ita +qkB +fPN +ghV +kfa +fHK +fHK +ldX +btf +jvu +wlT +maC +maC +fEm +jvu +ghV +inK +fHK +fHK +ldX +btf +kxo +kxo +kxo +kxo +kxo +eqS +hoa +dIG +kxo +kxo +kxo +kxo +kxo +bUn +kos +uMT +sDz +ezf +ezf +xiC +ezf +ezf +ezf +ezf +pzt +jZY +erS +pEY +oMG +yaL +yaL +yaL +yaL +oLq +xym +pEY +gwG +tar +sjV +fzI +uQP +ohF +wbw +bnl +wgX +fUs +tei +bnl +bnl +bnl +vlK +bnl +bnl +bnl +ncA +dLv +bZF +jmy +mZp +lRD +lRD +lRD +lRD +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +ksa +saV +gAH +tuu +jgH +saV +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(66,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fPN +fPN +fPN +fPN +qru +fPN +fPN +fPN +fPN +fPN +gCR +opr +gCR +oHl +oHl +oHl +oHl +oHl +oHl +oHl +oHl +oHl +gCR +xWm +gCR +kxo +fDg +pUT +hao +kxo +ufl +hoa +hpl +kxo +nJx +myr +kXN +kxo +wfR +kos +qcS +sDz +rNA +jQu +jQu +jQu +rgy +sDz +xud +pzt +jZY +erS +pEY +pEY +tGA +gLY +gIn +pEY +pEY +pEY +pEY +vVN +juc +juc +juc +juc +ohF +oMD +bnl +cLZ +fUs +cLZ +bnl +rmn +eXV +fUs +cLZ +jEi +bnl +nYd +vmV +bZF +jmy +bqN +rCj +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +ksa +ksa +saV +nwz +tuu +lVZ +saV +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(67,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +ksa +ksa +ksa +ksa +ksa +nGn +pBu +qRD +pBu +fPN +aKf +aKf +fPN +wTz +kzX +uUa +fFP +kJs +gmN +suM +tfb +oPp +qPS +uDm +fFP +uUa +kzX +xZj +kxo +sLn +vAH +puN +oqC +pYI +hoa +gLN +nJi +tzi +jEW +gOR +kxo +eeV +kos +daT +sDz +roS +jQu +jQu +jQu +atW +sDz +sqj +nBX +jZY +erS +rRm +jhr +wEt +wEt +wEt +kME +pEY +iix +pEY +uaq +qIC +sut +mkW +gEY +fPS +nfq +bnl +tei +fUs +bOO +bnl +qBy +cLZ +fUs +gAb +jEi +bnl +jcU +jmy +bZF +jmy +bqN +rCj +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +wEB +tcw +tuu +cuU +wEB +ksa +uoo +ksa +ksa +eZG +eZG +eZG +eZG +eZG +eZG +eZG +eZG +eZG +eZG +eZG +eZG +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(68,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xXP +ksa +xXP +ksa +xXP +ksa +fEP +ksa +ksa +ksa +xXP +xXP +nGn +mqN +oKS +xVA +fPN +fPN +fPN +fPN +tCM +xRO +xRO +fVY +lbC +lbC +lbC +lbC +rGL +xRO +xRO +xRO +xRO +xRO +kZf +kxo +fAq +cAm +uWn +kxo +ufl +hoa +hpl +kxo +jHT +jOr +bLX +kxo +xcP +kos +epk +mVa +nJk +dNr +nJk +nJk +nJk +dUc +rfl +tYb +jZY +jHn +rRm +ikU +wEt +gIe +wEt +iuG +xVa +xVa +xVa +xVa +xVa +xVa +xVa +pEY +uVl +pEY +bnl +bnl +ohf +bnl +bnl +rmn +tei +fUs +cLZ +jEi +bnl +ppL +fqk +nWB +kqQ +tET +rCj +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +wEB +wEB +aJB +wEB +wEB +ksa +uoo +ksa +ksa +eZG +oZv +ycH +xey +ycH +oZv +kNe +sgh +kFw +iUP +cOG +eZG +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(69,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +xXP +giM +giM +giM +giM +giM +ksa +fEP +fEP +fEP +xXP +xXP +ksa +nGn +xWa +jDz +pBu +fPN +aKf +aKf +fPN +jHN +xRO +pvu +bEF +qZo +ydo +qzZ +nYb +jHN +pvu +kGr +rtE +rtE +rtE +isM +kxo +kxo +kxo +kxo +kxo +gzC +hoa +iLe +kxo +kxo +kxo +kxo +kxo +nrX +kos +kbT +tvZ +ixw +reT +lLp +reT +ixw +tvZ +pEL +vpb +mCr +lBN +rRm +trv +wEt +blE +wEt +iuG +xVa +iJX +kCA +tQo +iKB +xBN +xVa +wZh +nKW +azP +bnl +gAb +fUs +jEi +bnl +bnl +bnl +luq +bnl +bnl +bnl +bnl +bnl +niF +bnl +bnl +bnl +wEB +wEB +wEB +wEB +saV +saV +saV +wEB +saV +saV +saV +wEB +wEB +saV +saV +saV +wEB +wEB +wEB +wfo +tuu +mhD +wEB +wEB +saV +wEB +uoo +eZG +ara +xKT +sVP +dYQ +mYY +aXn +xvT +efp +mqm +fMq +eZG +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(70,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +giM +qgq +mRx +qgq +giM +ksa +xXP +ksa +xXP +ksa +ksa +ksa +fPN +fPN +qru +fPN +fPN +fPN +fPN +fPN +ubE +xRO +gag +bEF +eqm +nGg +brd +aux +jHN +bCh +kGr +rtE +vqk +rtE +vZu +kxo +pxl +nIa +osY +kxo +eDT +hoa +hpl +kxo +dAB +wEv +vEp +kxo +xcP +kos +epk +mVa +nJk +nJk +wLv +wPM +nJk +mVa +rfl +tYb +jZY +erS +rRm +cRq +vww +hvk +iXU +hHH +xVa +hcK +awE +wev +pmv +bwJ +xVa +bcq +aEh +pGS +bnl +ohG +fUs +cdP +bnl +rSP +cLZ +fUs +tei +uKO +bnl +rFC +eXV +fUs +cLZ +wgX +bnl +biQ +cfP +tcw +wEB +eub +eub +eub +wEB +jVp +kxU +nwz +wEB +tZi +cfP +feW +cfP +cfP +wEB +vuH +feW +tuu +nwz +wfo +lzw +cuU +wEB +ksa +eZG +vjv +leD +jFx +xdR +vqV +nKU +iMB +baD +xLD +dFC +eZG +uoo +uZR +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(71,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +xXP +wZx +wZx +wZx +wZx +wZx +wZx +wZx +wZx +wZx +wZx +wZx +wZx +wZx +qgq +kOk +qgq +ybj +ybj +ybj +ybj +ybj +ksa +ksa +ksa +nGn +fBi +iHO +wfE +kCF +aUL +aUL +fPN +nHH +xRO +dwh +bEF +nAW +nPI +xKR +aux +jHN +jvO +kGr +rtE +rtE +rtE +gXm +kxo +tiN +apw +bGu +uuD +pYI +hoa +gLN +uWF +aNk +cub +liE +kxo +eeV +kos +bpV +sDz +gAX +jQu +oiO +jQu +mJa +sDz +fWt +kha +jZY +gdm +tpO +mPm +pWG +iay +pWG +vqJ +hoq +sWm +kfc +bia +kfc +oFP +hoq +sjw +nKV +vBA +aSO +kSL +kSL +fUs +eVz +fUs +fUs +fUs +fUs +fUs +eVz +fUs +fUs +fUs +fUs +fUs +eVz +tuu +tuu +tuu +kVi +tuu +tuu +tuu +kVi +tuu +tuu +tuu +fRq +xcd +rlk +rlk +qhp +tuu +iVI +tuu +tuu +jRe +tuu +tuu +tuu +tuu +wEB +uoo +eZG +ara +jZq +fMx +eFM +xas +aXn +qTs +lcL +mqm +icv +eZG +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(72,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +wZx +kxC +tcg +bXU +hee +iYZ +bXU +vMB +qap +bXU +jIr +nxD +bXU +oWq +mRx +qgq +cbB +uoF +iBo +hLe +ybj +ksa +xXP +xXP +nGn +rMn +iHO +iHO +iHO +iHO +iHO +xVj +hbX +xRO +pvu +bEF +oOX +rdQ +xXh +jcG +jHN +pvu +rtE +mWn +hRV +pfy +xlQ +kxo +nGG +ggR +eeM +kxo +kBh +sLo +wJW +kxo +iLp +nyH +vSc +kxo +mac +dFP +yiR +sDz +eIW +mmv +gLF +xNF +axc +sDz +kAS +pzt +jZY +erS +rRm +qXR +pWG +wEt +ocD +vkX +xVa +xLc +gHs +wev +sYt +wOD +xVa +mOc +dZF +xzZ +bnl +bOO +kSL +bOO +bnl +jEi +jEi +azE +bBP +bBP +bnl +rmn +jEi +mBX +jEi +rmn +bnl +nwz +tuu +cuU +wEB +nwz +nwz +nwz +wEB +cfP +feW +eub +wEB +iNG +xgg +evJ +rkK +bJW +wEB +kOW +plG +avD +sXe +kxU +vrf +tuu +wEB +ksa +eZG +oZv +pDN +tos +pDN +oZv +lxi +gKd +pyc +vJZ +jmB +eZG +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(73,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +xXP +wZx +rpd +xXc +bXU +bna +aMX +bXU +lCP +pBK +bXU +gbn +aSP +bXU +xAx +jou +rDd +lfm +bhf +bhf +lBB +ybj +xXP +xXP +ksa +nGn +dQh +wfE +vKc +eJq +iHO +vXb +fPN +tvs +rtE +rtE +xFj +uUa +uUa +uUa +uUa +qQf +rtE +rtE +tBI +oHl +oHl +oHl +kxo +kxo +kxo +kxo +kxo +szb +szb +szb +kxo +fPN +fPN +fPN +fPN +fPN +lwm +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +esS +jZY +erS +rRm +mIK +pWG +wEt +mBp +otK +xVa +laO +dPD +bGd +etV +hFW +xVa +pnC +qiT +kDx +bnl +jIv +kSL +rmn +bnl +bnl +bnl +bnl +bnl +bnl +bnl +bnl +bnl +bnl +bnl +bnl +bnl +wEB +hAe +wEB +wEB +wEB +wqv +wEB +wEB +wEB +mft +wEB +wEB +wEB +wEB +vGM +wEB +wEB +wEB +wEB +wEB +wEB +wEB +wEB +wEB +aXm +wEB +uoo +eZG +eZG +eZG +eZG +eZG +eZG +eZG +jZl +oWV +qgD +eZG +eZG +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(74,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +uoo +ksa +uoo +ksa +uoo +ksa +uoo +ksa +xXP +ksa +wZx +oaC +kVF +bXU +brx +eaa +bXU +hGd +rfT +bXU +cnP +vzd +bXU +qgq +jou +qgq +cbB +riF +uxF +mvF +ybj +ksa +ksa +ksa +fPN +fPN +fPN +fPN +fPN +qru +fPN +fPN +lBC +iRs +pXd +iXp +cgG +wmY +vss +cgG +iXp +pXd +iRs +peS +oHl +ksa +ksa +xXP +ksa +xXP +ksa +xXP +ksa +ksa +ksa +ksa +fPN +fhe +noO +oSr +pWi +hqv +uRq +sXl +uRq +uRq +vcC +vcC +vcC +iSa +mNq +dHc +bym +jHn +rRm +olQ +mPm +wEt +rRm +rRm +xVa +xVa +xVa +xVa +xVa +xVa +xVa +hdj +wlA +hdj +bnl +bnl +rTu +bnl +bnl +jEi +yce +yce +wgX +bnl +lSy +cLZ +jwP +bnl +cfP +jgH +uuZ +thf +hNX +cQY +wEB +aXB +nwz +cfP +wEB +thf +nwz +mxZ +alM +wEB +nwz +nQn +vrf +wEB +cfP +eub +tcw +tcw +vKt +xXk +wEB +tuu +wEB +ksa +ksa +xXP +ksa +ksa +xXP +ksa +eZG +nAM +oWV +uRe +eZG +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(75,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +vGC +vGC +vGC +vGC +wZx +ksa +uoo +ksa +ybj +giM +wZx +aRy +bXU +bXU +xow +bXU +bXU +eSL +bXU +bXU +ujZ +bXU +bXU +fTm +jou +vCn +cbB +cbB +cbB +cbB +ybj +ksa +ksa +ksa +xXP +ksa +ksa +nGn +ggV +iHO +vKc +fPN +fPN +fPN +fPN +fPN +fPN +fPN +oHl +oHl +oHl +oHl +oHl +oHl +oHl +ksa +ksa +xXP +ksa +xXP +ksa +xXP +ksa +ksa +ksa +ksa +fPN +fPN +fPN +fPN +iYK +nZL +nZL +nZL +nZL +nZL +nZL +nZL +nZL +nZL +nZL +kgv +rxt +hWV +rRm +mhA +mPm +wEt +rRm +lYj +eBn +vEB +oOl +dhZ +oLg +wWh +qBU +qBU +qXb +jiL +bnl +tsD +slx +dgd +bnl +jEi +cmW +cLZ +wgX +bnl +kQR +cLZ +vPR +bnl +alM +mxZ +nwz +nwz +hNX +nwz +jwW +nwz +nwz +nwz +jwW +nwz +nwz +nwz +nwz +jwW +nwz +evJ +evJ +xnE +evJ +jAw +fiC +uqn +dYg +kUB +wEB +tuu +wEB +wEB +uoo +vcG +vcG +vcG +vcG +vcG +eZG +eZG +mUA +eZG +eZG +vcG +vcG +rYA +vcG +vcG +vcG +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(76,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +uoo +uoo +uoo +uoo +uoo +uoo +ksa +ksa +ksa +ksa +fEP +ksa +vGC +ooS +rGz +dzW +wZx +cZs +cZs +cZs +ybj +mRx +ihP +xJb +vUA +ihP +xJb +qgq +onH +xJb +qgq +ggk +xJb +qgq +utG +qgq +jou +xKq +bXU +xfT +kWN +vVm +wZx +ksa +ksa +ksa +xXP +xXP +xXP +nGn +wfE +iHO +iHO +qgL +uBX +iHO +iHO +iHO +iHO +nGn +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +xXP +ksa +xXP +ksa +xXP +ksa +ksa +ksa +ksa +ksa +ksa +xXP +nGn +iYK +vtP +ksa +xXP +ksa +xXP +xXP +ksa +xXP +ksa +kpr +rWZ +pjD +erS +rRm +oIE +mPm +wEt +rRm +lyT +qos +wfJ +gaa +gaa +kyu +hjx +gQB +gMs +qwd +nUi +bnl +gFs +oox +mNd +luw +cLZ +yce +cLZ +cLZ +luw +yce +yce +yce +luw +nwz +hNX +hNX +hNX +hNX +nwz +wEB +cfP +biQ +iQd +wEB +cfP +tcw +tcw +cfP +wEB +tcw +tcw +eub +wEB +cuU +nwz +nwz +cuU +vuH +jgH +wEB +tuu +tcw +wEB +ksa +vcG +nlj +mWC +wTD +mWC +arN +qDz +uLZ +dAo +vcG +qTv +hfb +qcP +hfb +wOu +vcG +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(77,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +xXP +xXP +xXP +xXP +ksa +fEP +uoo +wZx +cYs +eLo +dot +bYZ +jou +rdn +jou +ugn +jou +aco +jou +jou +jou +jou +jou +tvX +jou +jou +jou +jou +jou +tsL +jou +tvX +lMT +wMO +tRU +jEY +daR +wZx +xXP +xXP +xXP +xXP +ksa +ksa +nGn +wfE +fhe +dae +fPN +dKf +vKc +wfE +fhe +iHO +nGn +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +xXP +ksa +xXP +ksa +xXP +ksa +ksa +ksa +ksa +ksa +ksa +xXP +nGn +eGT +vtP +uyP +poG +poG +poG +poG +poG +poG +bVI +kpr +rWZ +ley +erS +rRm +kbB +mPm +wGk +rRm +xml +aMD +wfJ +lIY +ozj +oLg +mmV +lUP +oEc +jIO +cOa +bnl +cTK +oox +uwJ +bnl +rmn +yce +vfE +rmn +bnl +sJM +cLZ +sJl +bnl +tcw +tuu +mxZ +jay +sbg +sbg +wEB +wEB +wqv +wEB +wEB +wEB +wEB +wEB +wEB +wEB +wEB +wEB +wEB +wEB +kEt +nwz +kEt +wEB +wEB +wEB +wEB +tuu +tcw +wEB +ksa +vcG +nlj +nfa +nfa +nfa +spr +gIR +alj +ioJ +vcG +xRh +oyi +oyi +roO +arP +vcG +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +niB +niB +niB +niB +niB +niB +niB +niB +niB +niB +niB +niB +niB +niB +niB +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(78,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +uoo +ksa +ksa +xXP +ksa +ksa +ksa +fEP +ksa +vGC +rbY +rbY +rOy +wZx +cZs +cZs +cZs +ybj +lhk +hXf +xJb +qgq +iFb +xJb +qgq +flr +xJb +qgq +jGt +xJb +knr +utG +qgq +jou +qgq +bXU +snd +aGa +iiC +wZx +ksa +ksa +ksa +ksa +ksa +ksa +fPN +nGn +nGn +nGn +fPN +fPN +fPN +fPN +fPN +iHO +nGn +xXP +xXP +xXP +xXP +xXP +xXP +nGn +nGn +nGn +nGn +fPN +fPN +fPN +fPN +fPN +ksa +ksa +ksa +ksa +ksa +xXP +nGn +eGT +vtP +ksa +poG +dim +rCZ +waa +sed +poG +ksa +kpr +rWZ +pjD +erS +rRm +puT +mPm +prb +rRm +xhN +nSy +wfJ +bGl +pCo +oLg +bwa +lUP +oFj +jIO +szd +bnl +bnl +nld +bnl +bnl +rmn +cLZ +cLZ +rmn +bnl +gap +cLZ +fEs +bnl +tcw +tuu +thf +wEB +wEB +wEB +wEB +thf +nwz +vrf +wEB +kYw +liQ +thf +cfP +wEB +mhD +nwz +eUB +wEB +vrf +nwz +eUB +wEB +kCZ +vrf +nwz +tuu +cuU +saV +uoo +vcG +nlj +njn +fOe +uJu +rSx +acX +hph +nqN +aiR +iOC +oyi +oyi +oyi +lfx +vcG +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(79,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +vGC +vGC +vGC +vGC +wZx +ksa +uoo +ksa +ybj +giM +wZx +gSu +bXU +bXU +kBA +bXU +bXU +pgB +bXU +bXU +ukT +bXU +bXU +acE +jou +qgq +dOS +dOS +dOS +dOS +oxa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +nGn +fBi +fNF +bAg +fPN +iHO +nGn +nGn +nGn +nGn +nGn +nGn +nGn +nGn +fhe +ydN +edD +dUu +rSo +iBz +hcB +fPN +nGn +nGn +nGn +nGn +nGn +nGn +fPN +eGT +vtP +xXP +poG +ujY +dTW +dTW +oMz +poG +dBd +kpr +fZK +pjD +erS +rRm +tnN +mPm +prb +rRm +oLg +oLg +oET +oLg +oLg +oLg +oWj +eAj +hoe +jIO +ipL +bnl +bOO +fUs +rFC +bnl +bnl +xZO +bnl +bnl +bnl +bnl +xZO +bnl +bnl +wEB +hAe +wEB +wEB +cNm +tcw +jay +nwz +cuU +qmd +wEB +jay +nwz +cwN +alM +jke +nwz +nwz +nwz +jke +nwz +cuU +nwz +aZe +nwz +feW +nwz +tuu +kVX +wEB +ksa +vcG +nlj +nfa +nfa +nfa +spr +fBY +alj +eOe +vcG +emI +oyi +oyi +oyi +arP +vcG +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +fOA +fOA +fOA +fOA +fOA +fOA +fOA +fOA +fOA +fOA +fOA +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(80,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +uoo +uoo +ksa +ksa +ksa +ksa +fEP +ksa +uoo +ksa +uoo +ksa +uoo +ksa +uoo +ksa +uoo +ksa +wZx +fwb +gey +bXU +fwb +nOp +bXU +fwb +fDt +bXU +fwb +wxS +bXU +qgq +jou +mVH +dOS +wsn +tDV +rCE +oxa +lws +lws +lws +ksa +ksa +ksa +ksa +ksa +xXP +xXP +nGn +wfE +wfE +fhe +shu +iHO +iHO +iHO +iHO +iHO +iHO +iHO +iHO +tqH +aKl +tcO +tcO +omw +iHO +tvK +qpx +cqF +qpx +qpx +qpx +qpx +qpx +qpx +puy +aIy +vtP +sMr +poG +vtJ +wKi +vbl +ekx +xRA +lsE +hSi +qLz +pjD +dYc +rRm +oZh +iFB +oZh +rRm +lkq +vLL +rHN +ehj +oyo +sHs +kJu +lUP +jMj +lUP +oKm +bnl +cdP +fUs +cLZ +bnl +uKO +yce +cdP +cLZ +vjs +bOO +cLZ +cmW +bnl +tcw +tuu +eub +wEB +nwz +nwz +alM +alM +nwz +nwz +jke +nwz +nwz +nwz +thf +wEB +jgH +nwz +cfP +wEB +hIb +jgH +jgH +wEB +eyp +tcw +cuU +tuu +kVX +wEB +ksa +vcG +nlj +kvY +oXb +pEy +arN +grW +jdA +uNa +vcG +skB +bVQ +ulO +myR +wfh +vcG +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +niB +niB +niB +niB +niB +niB +fdt +uoo +fdt +fOA +fOA +fOA +xpD +xpD +xpD +xpD +mmy +xpD +xpD +xpD +xpD +fOA +fOA +uoo +niB +uoo +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(81,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +uoo +uoo +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +uoo +wZx +hcq +bVs +bXU +hcq +gQi +bXU +hcq +iHe +bXU +hcq +xTT +bXU +sOa +jou +lMT +eGa +shm +kFK +sLa +pSA +nIG +nIG +nIG +pSA +xXP +fdt +ksa +ksa +ksa +ksa +nGn +fBi +fNF +qPR +fPN +iHO +nGn +nGn +nGn +nGn +nGn +nGn +nGn +nGn +wfb +fQI +ahi +jyE +aYn +iYK +dMb +fPN +nGn +nGn +nGn +nGn +nGn +nGn +fPN +spv +vtP +xXP +poG +ujY +xlo +xlo +niA +poG +dBd +kpr +rWZ +pjD +jHm +rRm +vNB +mPm +wEt +qCL +fZB +tLj +pXb +bHn +iFL +sHs +cMU +eNC +flR +pdr +ylS +bnl +gFs +onq +cLZ +luw +cLZ +cLZ +cLZ +gAb +cLZ +cLZ +cLZ +cLZ +luw +nwz +tuu +nwz +jwW +alM +nwz +cuU +nwz +nwz +alM +wEB +kEt +pYX +alM +okg +wEB +wEB +wEB +wEB +wEB +wEB +wEB +wEB +wEB +wEB +wEB +jay +tuu +wEB +wEB +wEB +xba +xba +xba +xba +xba +xba +vcG +eaC +vcG +vcG +vcG +vcG +vcG +vcG +vcG +vcG +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +uoo +ksa +ksa +ksa +uoo +xpD +xpD +xpD +xpD +aHT +aHT +aHT +aHT +aHT +aHT +aHT +xpD +xpD +xpD +xpD +uoo +ksa +ksa +niB +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(82,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +wZx +bsx +eBw +bXU +bsx +dbW +bXU +bsx +fFe +bXU +bsx +pZX +bXU +fTm +jou +qgq +dOS +pOH +gNS +rCE +pSA +lZR +evu +pzX +qcu +ksa +fdt +ksa +ksa +ksa +ksa +fPN +fPN +fPN +fPN +fPN +iHO +nGn +xXP +xXP +xXP +xXP +xXP +xXP +nGn +nGn +nGn +nGn +fPN +fPN +qUd +fPN +fPN +ksa +ksa +ksa +ksa +ksa +xXP +nGn +spv +vtP +ksa +poG +ceb +gYF +lUM +gWk +poG +ksa +kpr +rWZ +pjD +erS +rRm +apt +rIX +sUl +eQw +fZB +fZB +wui +vAZ +vAZ +cbZ +fTU +xcL +fay +bVu +vtc +hCe +rug +kKf +gAb +bnl +eTW +cLZ +bOO +vjs +cmW +cdP +cLZ +rmn +bnl +tcw +tuu +tcw +wEB +eub +eub +nwz +vuH +jgH +uuZ +wEB +aiS +nwz +nwz +wHW +wEB +vAP +wEB +ciO +xgx +udl +wEB +bzx +nwz +snL +wEB +nwz +tuu +wEB +ukZ +sEB +pIs +hln +wEB +hcx +hcx +xba +jKB +fuM +xLn +vcG +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +uoo +fOA +fOA +fOA +fOA +fOA +fOA +uoo +uoo +uoo +xpD +xpD +aHT +aHT +aHT +xpD +xpD +lwj +xpD +xpD +aHT +aHT +aHT +xpD +xpD +fOA +ksa +ksa +niB +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(83,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +wZx +bXU +bXU +bXU +bXU +bXU +bXU +bXU +bXU +bXU +bXU +bXU +bXU +aBX +xhP +aBX +dOS +dOS +dOS +dOS +pSA +aZn +bxZ +rws +pSA +xXP +fdt +ksa +ksa +ksa +ksa +fPN +kCF +xRl +epA +fPN +iHO +nGn +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +nGn +iYK +nGn +ksa +ksa +ksa +ksa +ksa +ksa +xXP +nGn +spv +vtP +uyP +poG +poG +poG +poG +poG +poG +bVI +kpr +rWZ +pjD +erS +rRm +enB +mPm +wEt +qCL +fZB +fZB +fZB +xsm +peO +sHs +jKE +ipC +nus +ipC +bDJ +bnl +jEi +tTR +jEi +bnl +bnl +xZO +bnl +bnl +bnl +bnl +xZO +bnl +bnl +wEB +hAe +wEB +wEB +wEB +wEB +wqv +wEB +wEB +wEB +wEB +wEB +wEB +wEB +wEB +wEB +wEB +wEB +cuU +icr +pAY +wEB +vac +eSd +kgS +wEB +nwz +wUr +wEB +iLb +vIQ +tzr +tsh +wEB +hcx +hcx +xba +fyZ +jdA +mVT +vcG +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +fOA +eTq +jVU +lwj +aHT +aHT +aHT +aHT +aHT +aHT +aHT +aHT +xpD +qEw +xpD +xpD +lwj +xpD +xpD +qEw +xpD +aHT +aHT +xpD +fOA +fOA +uoo +niB +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(84,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +fEP +ksa +aeM +joc +oKA +nGp +iKO +cnG +cCf +qgq +xDM +qgq +qgq +gYH +vUA +qgq +jou +qgq +umL +rDO +qgq +qgq +pSA +lGK +wsq +gKA +qcu +ksa +fdt +ksa +ksa +ksa +ksa +nGn +wfE +tLv +wfE +fPN +iHO +nGn +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +nGn +iYK +nGn +ksa +ksa +ksa +ksa +ksa +ksa +xXP +nGn +iHO +vtP +ksa +xXP +ksa +xXP +xXP +ksa +xXP +ksa +kpr +rWZ +pjD +fPs +rRm +cTz +czB +bmE +rRm +uHN +kfN +nJy +sHs +opU +sHs +hdj +hdj +fYg +hdj +hdj +bnl +bnl +pkn +bnl +bnl +rmn +cdP +cLZ +jEi +bnl +gAb +cLZ +uKO +bnl +aAQ +tuu +lnS +wEB +eub +eub +nwz +jtE +eub +wEB +kCZ +jay +tcw +wEB +tcw +tcw +eub +wEB +nwz +dIu +nwz +jwW +ghA +nwz +nwz +jwW +nwz +tuu +jwW +nwz +vIQ +hBG +vIQ +xba +xba +xba +xba +vcG +btH +vcG +vcG +cHh +cHh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +fOA +rHT +xpD +xpD +aHT +uoo +uoo +uoo +xpD +xpD +aHT +xpD +xpD +wnr +xpD +tdR +lMK +tdR +xpD +wnr +xpD +xpD +aHT +xpD +xpD +fOA +ksa +niB +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(85,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +ksa +uoo +ksa +uoo +uoo +ksa +fEP +uoo +aeM +nPx +mei +lIt +wgv +wgv +iMQ +jou +jou +jou +jou +jou +jou +jou +jou +lMT +lMT +lMT +lMT +dOa +pSA +jbA +eLA +jbA +pSA +xXP +fdt +ksa +ksa +ksa +ksa +nGn +gtP +bCK +qVi +tpk +iHO +nGn +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +nGn +iYK +nGn +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fPN +iHO +nZL +nZL +nZL +nZL +nZL +nZL +nZL +nZL +nZL +nZL +kgv +rxt +hWV +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +nfj +uKO +tTR +tei +cLZ +cLZ +gAb +cLZ +jEi +bnl +uKO +tei +eTW +bnl +nwz +tuu +mxZ +wEB +nwz +feW +nwz +nwz +nwz +jwW +nwz +cuU +nwz +wEB +cuU +nwz +nwz +wEB +cuU +nwz +nwz +wEB +fVU +nwz +oux +wEB +nwz +tuu +wEB +gdx +nwz +nwz +nwz +fvk +kKw +gct +eKr +hGH +tGq +jFP +rEf +hjP +cHh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +fOA +cLY +xpD +xpD +aHT +uoo +ksa +ksa +xpD +aHT +aHT +qEw +cVu +oEK +xpD +itV +cuo +sHw +xpD +oEK +cVu +qEw +aHT +aHT +xpD +fOA +ksa +niB +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(86,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +uoo +uoo +ksa +ksa +fEP +ksa +aeM +joc +amL +wgv +vJW +jHa +cCf +qgq +qgq +knr +wvb +qgq +qgq +grz +sjs +qgq +qgq +qgq +lMT +mVH +pSA +sLh +pWO +kJy +pSA +ksa +ksa +ksa +ksa +ksa +ksa +nGn +vxJ +hjc +jkE +fPN +iHO +nGn +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +nGn +iYK +nGn +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fPN +cCv +nEW +iHO +iHO +iHO +iHO +xgY +iHO +iHO +cCv +pDC +gyp +pjD +jHn +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +lUr +fUs +bsR +kfC +kLu +kLu +kLu +kLu +kLu +exO +kLu +cGh +kLu +exO +dZE +wHQ +nwz +jwW +nwz +bhw +jgH +chv +nwz +wEB +nwz +feW +vrf +wEB +cfP +nwz +cuU +wEB +wGe +ghA +cuU +wEB +orM +nwz +dbt +wEB +nwz +tuu +wEB +pbG +tNQ +nwz +hHs +xba +xba +cjI +oPA +oPA +kZD +oPA +etg +ugC +cHh +cHh +cHh +igm +igm +cHh +iCE +rxc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +fdt +noh +fdt +fdt +uoo +fOA +aHT +aHT +aHT +aHT +xpD +xpD +uoo +xpD +aHT +xpD +xpD +xpD +xpD +ald +xpD +uoo +xpD +ald +xpD +xpD +xpD +xpD +aHT +xpD +fOA +ksa +niB +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(87,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +fEP +uoo +jcF +cCf +cCf +chZ +cCf +cCf +cCf +eZP +eZP +mWi +xSs +xSs +xSs +mWi +mWi +eZP +eZP +qgq +lMT +qgq +pSA +jbA +bck +jbA +pSA +ksa +ksa +ksa +ksa +ksa +ksa +fPN +kCF +nEI +kCF +fPN +iHO +nGn +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +nGn +iYK +nGn +ksa +nTn +ksa +xXP +hHw +hHw +hHw +nZL +nZL +nZL +nZL +nZL +nZL +nZL +nZL +nZL +nZL +nZL +nZL +esS +pjD +fPs +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +bnl +vCE +cLZ +tTR +cLZ +cdP +dGu +tei +plt +bnl +uqM +jDq +uKO +bnl +nwz +rrq +tcw +wEB +nwz +nwz +cuU +nwz +nwz +wEB +wEB +wqv +wEB +wEB +wEB +bJd +wEB +wEB +wEB +wqv +wEB +wEB +wEB +wqv +wEB +wEB +cuU +pcF +wEB +wEB +wEB +yhg +wEB +wEB +xba +fGD +oPA +bff +kZD +oAT +oPA +dgz +igm +pht +igm +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +ksa +uoo +ksa +ksa +ksa +xpD +aHT +uwr +auf +cIL +nLK +xpD +ksa +xpD +aHT +xpD +xpD +qEw +itV +xpD +uoo +uoo +uoo +xpD +sHw +qEw +xpD +xpD +aHT +xpD +fOA +ksa +niB +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(88,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +fEP +ksa +jcF +mKE +vyJ +mEQ +vyJ +vez +cCf +ovc +urW +urW +urW +urW +urW +bdf +urW +urW +eZP +qgq +lMT +qgq +pSA +pOe +jNJ +iOi +pSA +pSA +pSA +pSA +pSA +pSA +nZL +fPN +fPN +fPN +fPN +fPN +iHO +nGn +ksa +ksa +ksa +ksa +ksa +ksa +ksa +bqK +ksa +ksa +ksa +nGn +iYK +nGn +ksa +ksa +ksa +hHw +hHw +oZV +mQA +tve +pji +bzS +iGm +uth +rzi +eWd +gcz +rlQ +ipd +wvd +gcz +rWZ +pjD +erS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +bnl +bnl +bnl +aJV +bnl +bnl +bnl +bnl +bnl +bnl +bnl +tOB +bnl +bnl +eub +rrq +tcw +wEB +hIb +cyt +nwz +cQY +olq +wEB +cuU +nwz +nwz +vrf +nwz +nwz +nwz +nwz +nwz +cuU +nwz +feW +nwz +nwz +nwz +nwz +nwz +tuu +wEB +thf +kPv +nwz +hxe +cUr +xba +swJ +oPA +aFt +gRr +oPA +oPA +oEN +kTz +kUm +gEQ +gMb +ksa +ksa +ksa +koF +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +noh +uoo +lwj +lwj +lwj +lwj +lwj +aHT +qgR +gAk +dfL +quQ +xpD +uoo +xpD +aHT +lwj +lwj +iDA +cuo +uoo +uoo +eZM +uoo +uoo +cuo +iDA +lwj +lwj +aHT +mOO +fOA +uoo +niB +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(89,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +jcF +cCf +lBH +mEQ +pXY +cCf +cCf +fMv +urW +cbn +aee +exG +aee +gCs +urW +lvl +mWi +qgq +lMT +qgq +pSA +cKv +eil +vBx +lrv +vjY +wUx +faw +uLK +uuh +nZL +rSo +eer +noO +iHO +iHO +iHO +nGn +ksa +ksa +rBi +vHb +rBi +ksa +rBi +rBM +rBi +ksa +ksa +nGn +iYK +nGn +ksa +ksa +ksa +hHw +dzl +tKp +cJf +orz +kgO +lDG +uNM +gWi +uNM +teq +wwO +bFF +foK +oLb +exf +aUs +pjD +rtq +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cui +vUq +dDZ +ihc +sQN +cui +gDV +vtD +tBq +hIE +sWx +fgD +wEB +wEB +bWE +wEB +wEB +wEB +wEB +wqv +wEB +wEB +wEB +nwz +byK +nwz +jay +pHd +jZe +nPl +nPl +nPl +qXp +qXp +nPl +nPl +jZe +nPl +nPl +nPl +dZE +ulW +sLl +lmm +cVw +itL +lmm +xsi +rlK +xgs +jlO +oPA +oPA +oPA +jpU +igm +cAy +igm +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +ksa +lwj +ksa +ksa +ksa +xpD +aHT +cxK +aFL +mMt +cOJ +xpD +ksa +xpD +aHT +xpD +xpD +qEw +sHw +xpD +uoo +uoo +uoo +xpD +itV +qEw +xpD +xpD +aHT +xpD +fOA +ksa +niB +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(90,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +uoo +ksa +ksa +ksa +uoo +ksa +uoo +uoo +ksa +ksa +ksa +ksa +ksa +fEP +ksa +jcF +mKE +vyJ +mEQ +vyJ +vez +cCf +ovc +urW +ttt +hjZ +hjZ +hjZ +pxB +urW +gUl +mWi +qgq +lMT +qgq +pSA +mvS +eil +jve +ent +eNV +auu +qKU +aIK +aIK +nZL +qPR +wfE +wfE +iHO +fhe +eJq +fPN +xXP +xXP +rBi +wnR +rBi +mpi +rBi +wnR +rBi +xXP +xXP +nGn +iYK +nGn +xXP +ksa +ksa +hHw +pKw +nIt +dMl +yjL +oqP +oqP +tYO +tYO +tYO +xNz +gcz +gcz +gcz +gcz +gcz +azm +pjD +erS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +gkP +qET +lWH +pzI +rin +cui +rvC +ePX +ePX +ePX +ePX +sux +wEB +vrf +cQl +hxe +wEB +gpq +sbg +wAE +feW +iNG +wEB +nwz +fqx +feW +cuU +xYn +wEB +wEB +bJd +wEB +wEB +wEB +wEB +wEB +bJd +wEB +wEB +wRe +nwz +wEB +urJ +nwz +nwz +nwz +kHk +xba +vHT +oPA +vFQ +oLh +oLh +oLh +fRr +cHh +cHh +cHh +igm +igm +cHh +iCE +rxc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +ksa +lwj +uoo +uoo +uoo +fOA +aHT +aHT +aHT +aHT +xpD +xpD +uoo +xpD +aHT +xpD +xpD +xpD +xpD +ald +xpD +uoo +xpD +ald +xpD +xpD +xpD +xpD +aHT +xpD +fOA +ksa +niB +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(91,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +ksa +uoo +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +jcF +cCf +nCu +mEQ +xCo +cCf +cCf +ooP +urW +ttt +hjZ +hjZ +hjZ +pxB +urW +urW +bGw +qgq +lMT +qgq +pSA +doH +sEr +pIw +lrv +hzc +uCi +wDy +xcW +qPL +nZL +qPR +wfE +fhe +iHO +nZL +nZL +nZL +fqe +fqe +rBi +bpj +rBi +fqe +rBi +hKM +rBi +nZL +fPN +fPN +aOZ +fPN +ksa +ksa +ksa +hHw +kkC +btp +sYe +ufV +cAR +tRj +uDB +hfF +sTW +cAR +jFo +xIp +dIO +rEe +jFo +gfn +pjD +fPs +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cui +dIJ +ggq +ggq +sFS +cui +twU +dZU +fVh +gYW +gYW +wiI +wEB +wWx +cQl +nwz +jwW +nwz +nwz +nwz +nwz +vrf +jwW +nwz +qSw +nwz +jay +xYn +wEB +sWg +nwz +vrf +wEB +hKf +hlL +oxY +nwz +ekU +wEB +wRe +cuU +wEB +okg +okg +cuU +mcG +orM +xba +aTB +oPA +tZH +aYs +rDD +lAU +eWs +cHh +rcy +cHh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +ksa +lwj +ksa +ksa +ksa +fOA +apJ +xpD +xpD +aHT +uoo +ksa +ksa +xpD +aHT +aHT +qEw +cVu +oEK +xpD +sHw +cuo +itV +xpD +oEK +cVu +qEw +aHT +aHT +xpD +fOA +ksa +niB +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(92,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +ksa +uoo +uoo +uoo +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +uoo +jcF +mKE +vyJ +mEQ +xhp +xhp +wQk +omI +bfn +nqm +nKo +xKS +nKo +qAo +lKu +lKu +fSj +ctc +lMT +vCn +pSA +oVp +sEr +vWb +pSA +pSA +pSA +pSA +pSA +pSA +nZL +fPN +fPN +oSr +iHO +nZL +udB +jPZ +aJZ +dKv +mmp +qLH +bwX +fqe +mnY +cou +rTA +nZL +eOj +wfE +iYK +nGn +ksa +ksa +ksa +hHw +otx +bvc +jya +sbz +oXi +nga +nga +nga +nga +nga +jFo +mrG +vUv +ali +jFo +fir +pjD +fxF +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cui +vwh +erC +pho +dpu +cui +mRp +gVV +ogl +gYW +gYW +lVb +wEB +dDE +cQl +kVX +wEB +wBF +jsB +vrf +nwz +kVX +wEB +vam +cuU +nwz +nwz +xYn +jwW +feW +nwz +nwz +jke +oxY +nwz +feW +tbI +dwB +wEB +wRe +xba +xba +xba +xba +xba +xba +xba +xba +iya +sZY +iRv +sZY +sZY +cHh +sZY +cHh +cHh +cHh +uoo +uoo +uoo +uoo +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +uoo +lwj +ksa +ksa +ksa +fOA +rHT +xpD +xpD +aHT +uoo +uoo +uoo +xpD +xpD +aHT +xpD +xpD +wGD +xpD +tdR +lMK +tdR +xpD +wGD +xpD +xpD +aHT +xpD +xpD +fOA +ksa +niB +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(93,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +fEP +fEP +ksa +uoo +ksa +uoo +ksa +jcF +cCf +lBH +mEQ +pXY +cCf +cCf +hvs +urW +qrD +hjZ +hjZ +hjZ +kjA +urW +urW +bGw +qgq +lMT +mVH +pSA +tvq +sEr +cXU +vVY +gxw +pSA +scD +xTP +oCn +nZL +xkQ +fhe +bvR +iHO +nZL +qeb +lLr +qsm +hZj +pem +qsm +jCP +rBi +szQ +gZZ +hNQ +nZL +wfb +wfE +cTq +nGn +ksa +ksa +ksa +hHw +iyL +tUV +oRC +tIF +leN +nga +jgW +saq +jgW +jwf +cBM +eKp +mws +six +szU +qLz +pjD +erS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cui +aKY +uuG +pho +ccs +cui +nnZ +sEf +gYW +gYW +gYW +pSn +wEB +wEB +bWE +wEB +wEB +wEB +wEB +wEB +wqv +wEB +wEB +wEB +wEB +wEB +jay +xYn +wEB +cuU +jay +kVX +wEB +hKf +cfP +eUB +bsX +jgH +wEB +wRe +xba +djD +aNz +mdZ +rFn +jhE +jhE +fxk +tHx +sNp +aoL +ndm +qHa +fxk +rjW +miM +fxk +wIO +ksa +uoo +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +lwj +ksa +ksa +ksa +fOA +cnu +jVU +lwj +aHT +aHT +aHT +aHT +aHT +aHT +aHT +aHT +xpD +qEw +xpD +xpD +lwj +xpD +xpD +qEw +xpD +aHT +aHT +xpD +fOA +fOA +uoo +niB +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(94,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +fEP +ksa +ksa +xta +xta +xta +xta +jcF +mKE +vyJ +mEQ +vyJ +vez +cCf +dqx +urW +qrD +hjZ +hjZ +hjZ +kjA +urW +aGU +mWi +qgq +lMT +qgq +pSA +wQr +nkb +oQl +rnN +mky +vIn +uHD +sey +fDe +nZL +pas +uCh +eJq +uBX +nZL +slq +nBD +vyY +yjh +wwN +nJS +gtp +cSJ +roc +doW +gtp +mra +eBl +eBl +iYK +nGn +ksa +ksa +ksa +nga +aUk +nIt +wVk +mEs +gzz +nga +bKm +ovY +fce +hTf +hMy +pdN +wSz +knt +jFo +bjn +pjD +oFm +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cui +cpX +gVf +pho +hWv +cui +cde +qjP +mIL +fJn +fJn +mTk +wEB +cfP +rrq +nwz +tcw +mhD +wEB +vrf +nwz +eub +wEB +vhx +sbg +vrf +nwz +xYn +xba +xba +xba +xba +xba +xba +xba +xba +xba +xba +xba +auG +xba +djD +djD +djD +lkR +jhE +jhE +fxk +bGX +yeq +lfo +pDB +hlp +vJc +jMb +tSE +huJ +lwj +lwj +lwj +lwj +lwj +lwj +lwj +lwj +lwj +lwj +lwj +lwj +lwj +lwj +lwj +lwj +lwj +lwj +uoo +uoo +uoo +fOA +fOA +fOA +fOA +fOA +fOA +uoo +uoo +uoo +xpD +xpD +aHT +aHT +aHT +xpD +xpD +lwj +xpD +xpD +aHT +aHT +aHT +xpD +xpD +fOA +ksa +ksa +niB +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(95,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +xta +xta +paw +plz +plz +cCf +cCf +cCf +chZ +cCf +cCf +cCf +fMv +urW +bdq +xeX +aqa +xeX +fTx +urW +lvl +mWi +qgq +lMT +kxd +pSA +qgX +jac +gJd +rxa +wOJ +pSA +hoX +sey +fDe +nZL +pas +xWi +uCh +mYW +nZL +gOh +wwN +wwN +wwN +wwN +qsm +jEX +rBi +cBa +qUf +iPQ +nZL +bvR +eJq +iYK +nGn +ksa +uoo +ksa +nga +cAR +hsJ +gtx +cKw +cAR +nga +aSa +yft +hIk +ort +adm +xrX +hOh +etW +jFo +iOO +vDO +iOO +ksa +ksa +ksa +ksa +ksa +vmq +vpV +vmq +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cui +cui +cui +cui +cui +cui +mHQ +xRn +mHQ +ltF +ltF +mHQ +wEB +eUK +vbI +fvh +nPl +nPl +wyL +nPl +nPl +nPl +wyL +nPl +nPl +nPl +nPl +wJa +xba +uFw +uFw +qMY +uAy +rJu +uAy +fbk +uFw +uFw +xba +wRe +xba +dbG +btl +btl +rFn +jhE +jhE +fxk +lYL +adw +fiA +fxk +fxk +fxk +fxk +fxk +fxk +iCE +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +ksa +aVH +ksa +ksa +uoo +ksa +ksa +ksa +aVH +ksa +ksa +ksa +uoo +ksa +uoo +ksa +uoo +ksa +ksa +ksa +uoo +xpD +xpD +xpD +xpD +aHT +aHT +aHT +aHT +aHT +aHT +aHT +xpD +xpD +xpD +xpD +uoo +ksa +ksa +niB +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(96,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +nnG +cet +sdP +jcC +air +vhu +xOf +xOf +tvc +cGM +wrA +vhu +dqx +urW +xtc +urW +urW +urW +qEC +urW +urW +eZP +aBX +odC +aBX +pSA +pSA +pSA +pSA +pSA +pSA +pSA +otB +sey +xXB +nZL +aNK +bvR +xaB +mYW +nZL +hkQ +eMR +ovU +ovU +rPQ +uHz +dfX +fqe +vLC +tFM +uNj +nZL +kQe +eoS +dIV +fPN +nGn +nGn +nGn +nZL +nZL +nZL +nZL +nZL +nZL +nZL +aAJ +sxo +pxY +cQA +xkh +pdN +uhe +uZG +hPx +jXh +gbD +lcS +qTz +oaJ +vui +aOj +eON +rAq +nwu +bXG +cOn +vui +vui +vui +vui +vui +vui +vui +pcU +qAf +eON +vui +xFe +vui +fXZ +vui +ifC +wae +vui +sQo +dsU +cXJ +dZE +dZE +qqz +tcw +cfP +wEB +cuU +lXL +vrf +wEB +vrf +feW +cfP +nwz +xYn +xba +jOm +vir +gvD +rbo +oIw +xsB +sSM +iuU +eKA +xba +wRe +xba +dbG +btl +btl +rFn +lOo +lOo +fxk +bGX +adw +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +vub +fdt +niB +niB +niB +niB +niB +niB +fdt +uoo +fdt +fOA +fOA +fOA +xpD +xpD +xpD +xpD +qpg +xpD +xpD +xpD +xpD +fOA +fOA +uoo +niB +uoo +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(97,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +nnG +fme +sdP +fIV +sdP +oUY +sdP +sdP +tvc +kqp +kIl +vhu +eZP +eZP +mWi +xSs +xSs +xSs +mWi +mWi +eZP +eZP +qgq +vCp +kxd +cqR +eUE +jsQ +ktt +vRp +eUE +cqR +tNE +sey +qVR +nZL +nZL +nZL +nZL +dMV +nZL +fqe +tiV +fqe +fqe +fqe +fqe +fqe +fqe +fqe +slS +fqe +nZL +aNK +cKx +nmm +vUS +aII +aII +aII +aII +aII +aII +aII +hBg +lFa +nZL +jgW +tbc +jgW +eaw +eGX +oyk +wql +uRK +jFo +hux +gbD +sRs +gbD +gbD +gbD +gbD +gbD +gbD +gbD +gbD +qgn +gbD +nTS +gbD +gbD +gbD +gbD +gbD +gbD +uwd +gbD +gbD +gbD +knI +gbD +gbD +gbD +gbD +gbD +leI +xuF +wEB +wEB +wEB +saV +saV +saV +wEB +saV +saV +saV +wEB +wEB +wEB +wEB +jay +wPT +xba +ina +bnP +jPt +rSc +uFw +rSc +cSm +pme +uEU +xba +afJ +xba +kVD +jvA +pan +uAg +mwn +mwn +fxk +mUZ +adw +fVA +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +fOA +fOA +fOA +fOA +fOA +fOA +fOA +fOA +fOA +fOA +fOA +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(98,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +fEP +ksa +nnG +diI +sdP +eJA +dFp +jAm +bJn +sdP +tvc +sdP +sdP +nnG +qgq +qgq +umL +qgq +qgq +rDO +qgq +xDM +qgq +xUO +rDO +lMT +qgq +wPR +aKU +aKU +aya +aKU +aKU +wPR +niu +sey +tMr +tcY +tzU +wLb +uIk +pCA +tcY +gfX +plK +gEw +jKd +bwt +kqh +jwD +ium +jGX +jVY +wOd +fPN +fPN +suX +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +fPN +qqJ +nZL +nZL +jFo +jFo +jFo +jFo +jFo +jFo +jFo +jFo +jFo +bgd +gbD +hjB +pte +qdE +qdE +ekL +wuH +qdE +qdE +qdE +cOn +qdE +adP +qdE +qdE +foE +jwc +iOJ +pUu +gBW +qdE +wuH +qdE +jIu +jIu +qdE +wuH +qdE +pIA +bzW +dCP +eNs +ksa +uoo +ksa +xXP +ksa +xXP +ksa +xXP +ksa +saV +uov +nwz +cuU +feW +xYn +xba +sPy +rSc +rSc +rSc +mIF +rSc +uFw +uFw +lYr +xba +afJ +xba +gDq +rFn +rFn +rFn +mih +lOo +fxk +bGX +qRc +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(99,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ksa +ksa +ksa +fEP +uoo +xta +cIv +oMi +gRM +wjv +urm +epW +unQ +goR +tvc +tvc +hrT +jou +jou +jou +jou +jou +lMT +lMT +lMT +lMT +ptH +lMT +wqY +lMT +wGh +qQg +qQg +opK +qQg +qQg +wGh +nUQ +hwr +jcf +xBB +pCA +aHm +scL +pCA +tcY +fyc +fsm +xnG +yfL +ksp +xvF +dzU +ium +mUT +qOl +xxI +dIW +jic +uYJ +ePQ +mUw +ecF +fPN +aXq +kHw +bZl +ciW +fPN +dwJ +nZL +rUf +hkn +rDG +gJU +oCA +srQ +wvg +xqW +xuu +cvS +qXN +gbD +hjB +cjW +tnt +fEX +fEX +tgq +nvj +wJK +kew +kew +kew +kew +kew +kew +kew +siE +hxY +rxT +hxY +siE +nPC +qXl +qXl +qXl +qXl +wsc +eNs +cWX +bzW +dvS +eNs +ksa +nxf +nxf +gcD +nxf +nxf +ksa +xXP +ksa +saV +gAH +nwz +nwz +nwz +xYn +xba +uYf +ujm +gPV +uFw +uFw +rSc +jBv +sWq +prs +xba +afJ +xba +fxk +pLU +pLU +fxk +fxk +fxk +fxk +nZg +qRc +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +niB +niB +niB +niB +niB +niB +niB +niB +niB +niB +niB +niB +niB +niB +niB +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(100,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +uoo +uoo +uoo +uoo +ksa +ksa +ksa +ksa +fEP +ksa +nnG +qbz +sdP +nGl +tZl +ejw +bJn +sdP +sdP +tvc +sdP +nnG +qgq +sjs +knr +nqD +jou +qgq +qgq +qgq +qgq +xUO +qgq +lMT +nqD +wPR +aKU +aKU +hvc +aKU +aKU +wPR +niu +qQg +tMr +tcY +wLb +oeC +ndQ +pCA +tcY +uyK +fsm +fVB +jKd +lGU +nnR +nFn +ium +mUT +qOl +xxI +dIW +gGu +nlU +iua +mUw +kDS +fPN +qxJ +pSW +ruH +dub +fPN +dwJ +nZL +oTL +wen +lhv +ppm +iBO +ppm +jFe +iuu +iuu +wzl +oKy +gbD +hjB +xLi +wAZ +nmw +qkl +ftk +qkl +oxS +kew +rPK +skJ +wFc +skJ +baC +rky +eGw +sNP +ouj +ydY +siE +hLv +iuJ +iuJ +jkD +iuJ +aav +eNs +kvX +qax +dCP +eNs +uoo +nxf +dRJ +kUP +nxw +nxf +xXP +xXP +xXP +saV +cuU +nwz +nwz +vrf +xYn +xba +bKR +dlY +kUV +vAm +uFw +aqW +euj +oNc +ovA +xba +afJ +xba +pqo +rMt +mJS +ssi +rMS +jGl +ceX +bGX +qRc +fiA +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(101,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ksa +ksa +ksa +fEP +ksa +nnG +fme +sdP +vSE +sdP +ngA +sdP +sdP +rAB +tvc +stB +vhu +ajn +ajn +ajn +lnc +ggo +lnc +ajn +ajn +ajn +ajn +fvn +vCp +qgq +cqR +uKf +uKf +ddT +sIG +uKf +cqR +puK +qQg +ivl +tcY +rTx +cHF +sIr +pCA +xBB +lPr +bYk +oiV +hDp +hDp +hDp +hDp +hDp +aIn +xpb +aUi +jfI +hlu +hlu +xhv +mUw +lAg +fPN +lrB +lrB +atv +wCb +idR +dwJ +nZL +fvt +wen +kRK +iuu +gkH +iuu +uuj +nVk +nVk +ugD +uSG +gbD +wXC +cjW +wAZ +nmw +fuf +dzH +bXB +qdV +arQ +skJ +qGt +qGt +qGt +gsI +kew +siE +epd +eia +siE +siE +dgD +xdw +xdw +lFc +lFc +lFc +lFc +oAa +bzW +hxV +eNs +ksa +nxf +keI +isa +ybU +nxf +ksa +xXP +ksa +saV +vrf +pHd +qmY +nPl +sZC +xba +uFw +uFw +qZw +ajT +ija +ajT +qZw +uFw +uFw +xba +afJ +xba +ycu +pxw +lZD +kNJ +kNJ +kNJ +ceX +bGX +qRc +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +uoo +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(102,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +nnG +ksZ +sdP +qTG +air +vhu +seS +seS +dNt +tvc +iFo +vhu +rdT +ltj +gAW +dxW +gEt +dxW +fzK +uvP +qQq +rhW +aBX +odC +aBX +vpG +vpG +vpG +vpG +vpG +vpG +vpG +hbW +qQg +uwf +tcY +wbK +mfu +dwz +hMJ +tcY +cXi +bYk +fVB +jKd +dLp +kqh +bod +ium +mUT +xpb +xxI +wpo +swY +chk +pVB +bpe +jUt +fPN +ebL +vCQ +aZc +eAp +fPN +dwJ +ouX +nVk +nVk +eUr +nVk +axH +nVk +nVk +rMc +oOB +wzl +vmf +gbD +hjB +cjW +wAZ +fHb +ftk +uiA +eJD +lOJ +arQ +skJ +voV +qmm +dEQ +baC +jRC +siE +exz +nCA +siE +mMv +rLP +xHL +ljt +kMW +tcJ +lCn +lFc +tpU +bzW +niG +sRZ +sRZ +nxf +gcD +sOm +gcD +nxf +sRZ +sRZ +hpM +wEB +wEB +ijn +wEB +wEB +wEB +xba +ajT +ajT +trS +trS +mse +trS +trS +trS +trS +xba +afJ +xba +bvL +pxw +lZD +kWy +lEp +wMs +ceX +bGX +qRc +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +aVH +aVH +aVH +uoo +uoo +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(103,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +xta +xta +wBu +plz +plz +oER +oER +oER +oER +dix +oER +oER +mij +lhg +rOQ +omV +gEt +rHR +dxW +dxW +jbP +rhW +qgq +lMT +qgq +kml +vXY +aTv +ukF +mLh +rUm +vpG +twl +qQg +jTa +ait +ait +ait +ait +ait +ait +gpy +bYk +luI +qPJ +ksp +xvF +dzU +ium +mUT +xpb +xxI +wpo +guX +qtW +ipH +vof +dor +fPN +fiB +pSW +pQm +rtP +fPN +dwJ +nZL +lsa +nVk +aSe +aBx +ijj +aBx +gyw +wen +tnk +vCT +ikX +gbD +hjB +cjW +wAZ +bFw +rkX +ftk +ssT +lOJ +arQ +seN +rbv +dsE +ePa +szW +iWL +siE +qAN +tuX +siE +gqq +tzm +umX +lwx +tzm +jSh +rTV +lFc +hFk +bzW +mxN +sRZ +plV +nPs +bRc +aiI +iTi +dkY +hQL +sRZ +dOM +xRi +uze +olX +vLf +kag +dBU +jWy +xxB +sMO +brU +sBS +jEd +sBS +shL +bRx +vLQ +xba +afJ +xba +pqo +pxw +lZD +dXL +fxk +fxk +fxk +bGX +qRc +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +aVH +ksa +uoo +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(104,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +ksa +xta +xta +xta +xta +tFK +vSd +vSd +vQY +dZe +kxu +oER +nDV +tLo +aiw +dxW +wAd +dxW +wzI +qDj +qQq +rhW +xgX +lMT +lMT +fmr +vFW +iFw +cbe +iFw +vFW +tPZ +sUf +qQg +qow +ait +dJA +qph +bBK +eaW +ait +xbP +bYk +fVB +jKd +lGU +ast +nFn +ium +mUT +xpb +aiy +dIW +dIW +dIW +dIW +dIW +dIW +fPN +fPN +fPN +fPN +fPN +fPN +dwJ +nZL +aJH +nVk +jSX +wWJ +unV +wWJ +hgg +aBx +prd +vCT +ikX +gbD +hjB +xLi +wAZ +fsd +uiA +eaf +baq +lOJ +arQ +skJ +dRd +cbY +vaO +baC +myJ +siE +siE +siE +siE +bxK +tzm +mqu +qdk +tyF +oJX +aZW +lFc +jKa +fpk +jKa +sRZ +fZN +sYv +sYv +xwq +sYv +sYv +jsd +sRZ +dBU +bGo +kag +kag +kag +kag +kag +jWy +jpQ +fjY +wKG +jdg +hkf +rrg +saY +pzP +cZl +xba +afJ +xba +eIJ +rOW +nst +rOV +fxk +hKz +qIg +gIY +fII +lrp +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +ksa +aVH +ksa +fdt +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(105,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +ksa +fEP +fEP +ksa +uoo +ksa +uoo +ksa +tFK +scR +yaX +ipY +dZe +fch +oER +tSx +tLo +fFi +dxW +vdj +fuS +fuS +fuS +acf +rhW +awX +hpB +awX +kml +eYX +acW +dfE +ilE +olp +vpG +twl +qQg +jTa +ait +lfd +pbF +avB +mFi +ait +utj +bYk +aFp +lVI +hDp +hDp +hDp +hDp +blR +xpb +vvy +lmX +wIU +qth +hGj +bMX +inF +hjG +iKf +ueL +cdA +ueL +fPN +dwJ +nZL +kOK +nVk +rfW +vki +hZS +liC +rTP +qPo +lhp +cvS +pyq +gbD +hjB +cjW +wAZ +uiA +tJM +eBj +fsd +lOJ +arQ +fVn +hEZ +otg +otO +baC +jVS +deB +eIj +sOV +lFc +itm +tzm +umX +lwx +fli +bbc +lyp +lFc +ePw +bzW +mxN +sRZ +xvN +ngb +cMq +rQz +qOh +geu +rhB +sRZ +aUW +bGo +dBU +kag +vLf +kag +vLf +jWy +avI +eNi +ryc +nBk +ppU +kSi +cIi +fnt +lfT +xba +afJ +xba +blv +gBF +ahn +blv +fxk +pTa +pxw +xJA +pxw +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fOA +ksa +aVH +ksa +fdt +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(106,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +uoo +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +uoo +rHA +vSd +vSd +xWj +iwL +uNU +oER +xMX +tLo +qFe +dxW +wAd +dxW +wzI +qDj +qQq +rhW +giM +giM +giM +vpG +evo +evo +dEG +evo +evo +vpG +lfi +qQg +uwf +ait +xqZ +iiQ +ezd +msS +ait +gcq +bYk +fVB +jKd +hLH +kqh +sAh +ium +mUT +xpb +vvy +lmX +wGT +xft +eUO +rdk +kxi +nzX +uXn +uXn +vWH +egM +sBO +oYl +nZL +wzl +xWu +wzl +cvS +wzl +vuA +vuA +vuA +vuA +vuA +cWy +gbD +hjB +cjW +wAZ +ftk +fHb +fuf +aNT +svV +kew +oWE +oaK +ldV +tUA +nML +lJC +pgu +pIF +khd +pTF +jmn +fdI +fdI +aoB +hte +fdI +fdI +rXH +cWi +aMw +mxN +sRZ +vzf +uiv +uGK +xxS +aVy +irn +mQM +sRZ +mHw +bGo +vLf +kag +kag +kag +tOd +jWy +teS +qdl +wzw +jdg +itM +ugZ +mHm +aOv +eyU +xba +afJ +xba +seu +pxw +nst +ody +ceX +pVi +pxw +pxw +pxw +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +fOA +uoo +aVH +uoo +fdt +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(107,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +uoo +uoo +ksa +uoo +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +rHA +nDq +nDq +mRL +iwL +uwZ +oER +eUc +tLo +qxd +dxW +wAd +wxY +dxW +dxW +dxW +rhW +ksa +xXP +ksa +vpG +ubp +lLm +rOF +qbg +aUn +vpG +twl +qQg +qVR +ait +bBR +vCs +pLV +oLJ +ait +qdZ +bYk +luI +hin +ksp +xvF +dzU +ium +uRy +xpb +vvy +lmX +asE +eUO +tbg +xle +tFs +hjG +gbS +fKX +tln +wuE +fPN +dwJ +nZL +cdu +nVk +wen +wen +sWt +vuA +nBn +lDM +euq +lHR +stD +gbD +hjB +cjW +wAZ +bXB +qZF +lOJ +snq +snq +kew +kew +kew +fMm +kew +kew +kew +kew +kew +kew +lFc +lFc +lFc +bJL +lFc +lFc +lFc +lFc +lFc +utw +gbD +mxN +sRZ +eMa +kjM +qrh +agK +iCv +uSI +uTb +sRZ +rQn +djX +kag +kag +vLf +vLf +uEi +jWy +tlO +tlO +tlO +tlO +tlO +tlO +tlO +aWm +tlO +xba +afJ +xba +aaB +msk +nst +nst +rBb +jkU +pxw +izU +pxw +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fOA +ksa +aVH +ksa +fdt +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(108,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +uoo +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +rHA +vSd +vSd +xWj +ipb +qNz +oER +xUs +tLo +pFc +dxW +fuS +dxW +hrL +qDj +qQq +rhW +ksa +xXP +ksa +vpG +nzn +nDy +nDy +bGJ +bGJ +lLj +vfX +qQg +qXW +iXP +jUm +hYj +hwv +jUm +jUm +kYJ +bYk +fVB +jKd +lGU +bar +nFn +ium +mUT +xpb +vvy +hjG +fUX +eUO +tbg +sDl +tNO +hjG +hjG +hjG +hjG +fPN +fPN +dwJ +nZL +kmX +eTY +lyX +uyU +djl +vuA +lLK +bHo +nuv +lHR +buK +gbD +rBj +cjW +wAZ +izu +rkX +lOJ +snq +pKj +rFO +bKW +cUD +jit +umO +eYm +dCd +dKm +xgm +baU +hei +twj +vKd +blm +lXN +lDX +ogT +kne +rlP +oKy +gbD +qvB +sRZ +kCQ +djT +xmy +wNv +hpu +jlX +rgn +sRZ +fTE +bGo +kag +vLf +wJP +vLf +kag +hpM +ckA +mEZ +tAf +uWr +tAf +bkB +qWZ +aTC +eWx +oJz +ycL +xba +iuQ +pxw +pxw +ivM +ceX +jqs +pxw +pxw +pxw +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fOA +ksa +aVH +ksa +fdt +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(109,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +rHA +yaX +yaX +gJK +vTX +mGg +oER +oER +mkI +oER +dKa +fuS +dHX +rhW +rhW +rhW +rhW +fEP +fEP +fEP +vpG +eoo +olp +oVC +hYU +mlt +vpG +twl +stx +cWL +nke +fsm +fsm +djF +djF +djF +djF +ouL +fFR +lVI +hDp +hDp +hDp +hDp +blR +xpb +lBZ +fJb +eUO +eUO +qid +qiC +iOl +oNs +tbg +tbg +hPT +fPN +cGR +dwJ +nZL +slt +ltB +aRB +aRB +lZv +vuA +lHR +lHR +jYg +lHR +snQ +gbD +pte +lAP +wAZ +ftk +kGs +lOJ +snq +wCe +uxh +cYh +efb +jit +gyt +kpu +mEy +meB +hpm +kkR +nEn +wou +lXN +blm +lXN +lDX +cNk +bWR +uWp +oKy +knI +dQR +sRZ +dDC +gFJ +pOj +lhN +cVe +vOQ +obA +sRZ +qTi +djX +gSr +ygS +gLs +vLf +kag +hpM +sWn +pyE +lls +hKX +lls +niO +hnS +mkG +nPq +xba +xba +xba +qpi +qpi +qpi +enU +enU +qCh +mJS +twQ +pxw +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +fOA +uoo +aVH +uoo +fdt +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(110,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +fEP +uoo +rHA +vSd +vSd +xWj +bMw +sJm +sJm +uCx +tsn +oER +wrx +qnN +sHk +rhW +ksa +xXP +ksa +ksa +xXP +ksa +vpG +okt +vcL +dli +jsw +eoc +vpG +ogH +cEi +lWp +iXP +uVP +ntM +oNx +ntM +ntM +nRm +tWx +fVB +jKd +qFF +kqh +kVG +ium +mUT +xpb +vvy +hjG +aNs +ahZ +tbg +pnG +uOf +hjG +lCg +hDN +rpu +fPN +wQG +dwJ +nZL +cvS +wzl +wzl +wzl +cvS +vuA +mxi +lHR +xUB +ojV +cwB +gbD +cjW +haO +bKb +sPC +fuf +lOJ +snq +kQi +ttl +nkf +gyv +jit +meB +haH +meN +dKm +ejP +tWP +aKQ +iEa +lXN +blm +rpe +lDX +hKq +shC +mZv +oKy +gbD +jmc +sRZ +lbJ +yhO +sPN +lCa +gtd +fVP +fxN +sRZ +hpM +iAn +hpM +hpM +hpM +hpM +hpM +hpM +vrm +lBg +tmI +iXl +nrN +gSL +mkG +mkG +hXU +enU +wjB +ocd +ika +nFw +iwa +rpT +kYR +jqs +pxw +pxw +pxw +fiA +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fOA +ksa +aVH +ksa +fdt +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(111,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +uoo +ksa +ksa +fEP +ksa +tFK +scR +yaX +pHz +bMw +sJm +sJm +sJm +dSd +oER +uBI +fuS +eog +rhW +uoo +uoo +uoo +fEP +xXP +xXP +vFa +vFa +vFa +vFa +vFa +vFa +vFa +vFa +vFa +vFa +vFa +crM +abc +crM +abc +crM +cRk +tWx +luI +hps +ksp +xvF +dzU +ium +mUT +xpb +vvy +hjG +rdb +rdb +rdb +hjG +hjG +hjG +hjG +hjG +hjG +fPN +fPN +aOZ +fPN +hOx +mbU +ndr +uVO +ihC +lHR +lHR +lHR +ivd +hjB +hjB +gbD +cjW +ivH +lyI +ftk +fHb +lOJ +snq +cnl +kLK +uYI +eTd +jit +gIg +oZX +mEy +bfb +iMs +kkR +iVC +viW +lXN +blm +nKf +lDX +lDX +lDX +lDX +ePw +gbD +gPa +sRZ +sRZ +sRZ +sRZ +ruC +sRZ +sRZ +sRZ +sRZ +jSu +jUk +xCk +tbp +cYN +wmn +wAm +asi +dly +lBg +uIi +fpF +qFt +jVm +opO +wRJ +lEv +enU +qnx +uII +dsX +gtL +qVH +nZl +kYR +itv +pxw +pxw +pxw +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fOA +ksa +aVH +ksa +fdt +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(112,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +ksa +fEP +ksa +tFK +vSd +vSd +xWj +bMw +jJt +gBr +gBr +qPN +tFK +gJM +gJM +gJM +rhW +ksa +xXP +ksa +fEP +ksa +xXP +vFa +krQ +tBp +nDu +erA +qzw +wEy +wbA +evD +kIA +vFa +nXP +hSy +cPX +eZq +crM +mkR +tWx +fVB +jKd +lGU +nzC +nFn +ium +mUT +xpb +bwI +vfg +jFF +jFF +jFF +jFF +ebp +rpB +jFF +jFF +jFF +bhj +qFu +jzk +pAk +kwV +jFF +jFF +jFF +jFF +xJJ +bPm +pRz +mpW +hjB +hjB +gbD +whh +hNM +udd +ftk +nul +lOJ +snq +kjH +cYh +uck +lDX +jit +lXN +lXN +lXN +lXN +lXN +yii +lXN +lXN +lXN +blm +lxc +hUQ +kQU +llW +hUQ +oKy +beP +rUY +eVF +iyE +tAf +kyX +moK +tAf +gIy +rUZ +pRL +tAf +qGy +tAf +nyW +mAO +jHl +eFX +qkv +xFo +lBg +iol +ceH +gRE +jVm +mkG +mkG +rEo +enU +eRr +nVC +kQz +oJd +ond +mdk +qRR +goC +pxw +pxw +pxw +rOv +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +fOA +ksa +aVH +ksa +fdt +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(113,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +fEP +uoo +tFK +tFK +tFK +rHA +rHA +rHA +tFK +tFK +tFK +tFK +ksa +uoo +ksa +uoo +ksa +xXP +ksa +fEP +ksa +xXP +jLu +qyB +dYI +fhs +uis +uis +uis +hrk +duF +gXZ +oCE +kMD +jNZ +jNZ +lCI +abc +cXi +tWx +rQO +biz +lFp +lFp +lFp +lFp +xfg +uan +iNY +grj +xpb +xpb +xpb +xpb +xpb +xpb +xpb +xpb +xpb +xpb +rsx +aWz +cpJ +eBU +xpb +xpb +xpb +xpb +xpb +gLM +pLb +dGM +gbD +gbD +nse +xLi +gLp +kEX +adK +ghN +lOJ +snq +jug +kwB +yjR +uLS +hWx +oFq +gOz +ipt +oFq +kyt +oFq +oFq +gOz +oFq +oFq +oFq +suU +rmB +gHE +nXt +xQr +iQR +tmP +gRv +cPZ +ddQ +ddQ +ddQ +oRc +ddQ +ddQ +rSO +ddQ +oBD +ddQ +qej +rSO +yeR +rSO +fPj +ddQ +vzQ +olc +qqy +baL +jty +phr +mkG +vML +enU +eHe +dsX +dsX +jdh +dsX +wOC +kYR +itv +dnW +aIi +pxw +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fOA +uoo +aVH +uoo +fdt +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(114,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +fEP +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +uoo +ksa +xXP +ksa +fEP +ksa +xXP +jLu +qIB +qbh +oRs +csZ +gGx +dAx +iuI +lZV +jZp +diY +pbc +skd +jNZ +vQD +abc +cXi +tWx +fVB +lFp +kmO +nUv +gMm +bTq +mUT +xpb +dTS +mXB +lrd +eBg +jUa +gXO +xNW +xNW +fLA +muG +dHx +qou +hYC +jzk +ckh +pCs +qMF +fLA +xNW +xNW +uTw +wtX +pRz +mpW +hjB +hjB +gbD +xZK +eIw +mMQ +ftk +eaf +lOJ +snq +bXL +cYh +hQZ +mar +sAM +lXN +lXN +lXN +jjs +lXN +lXN +lXN +lXN +lXN +tmj +lxc +hUQ +clh +sBT +hUQ +oKy +lEI +rUY +eVF +xfN +rxF +fyA +kdZ +lfg +fcr +fyA +fyA +fyA +cmt +fyA +nyW +qKG +sWU +aEs +jSM +fyA +tYz +uaf +rAO +uaf +fyA +tZe +fyA +bVW +enU +vDr +okq +mEl +xBX +mEl +aYM +kYR +rZy +pxw +pxw +pxw +rOv +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +fOA +ksa +aVH +ksa +fdt +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(115,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +xXP +xXP +fEP +xXP +xXP +jLu +kVk +oxt +klQ +peg +wIi +eMH +sKg +hcJ +ptM +leC +aml +kxH +cQe +ghs +cvK +rWE +tWx +xnG +pNK +vhd +xoP +vOq +hDs +hwe +xpb +mKW +orb +tHc +qOl +qOl +lNw +mZc +mZc +mZc +mZc +mZc +mZc +mZc +nIs +mZc +mZc +mZc +mZc +mZc +mZc +mZc +mZc +mZc +pIY +hjB +hjB +gbD +cjW +edP +mDe +ftk +fHb +lOJ +snq +tQF +nPL +hEC +lDX +lXN +dzP +oPX +oJJ +oda +dzP +fab +uiJ +wPH +lXN +gQT +xMY +lDX +lDX +lDX +lDX +xDr +bzW +ooJ +rRZ +rRZ +rRZ +rRZ +rRZ +fUV +gCT +kaD +wce +gKN +dMW +gKN +ufs +sMY +fxU +lxA +hsc +qvA +ufs +gKN +oqA +gKN +ufs +ufs +ufs +ufs +enU +cEN +gkG +cEN +enU +cEN +enU +enU +pWl +pxw +pxw +pxw +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fOA +ksa +aVH +ksa +fdt +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(116,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +fEP +ksa +xXP +jLu +aQy +egC +xnn +kIQ +gxN +tsP +oDW +kvh +bCT +jRr +pbc +tlp +rZs +jLS +abc +cXi +tWx +fVB +lFp +aen +wqy +xqM +bTq +mUT +xpb +cwK +orb +ukt +kAo +kAo +iJC +mZc +klX +ogk +kAV +pME +mZc +wEA +oxz +aTS +kAV +mZc +lTB +uBt +ruJ +mZc +rSy +mZc +dec +loy +xJY +gbD +cjW +jze +fEz +ftk +pCf +xlS +snq +mLN +cYh +dIE +sWE +lXN +roo +aoj +kQk +pSY +qqD +nBH +sXC +dKB +lXN +gQT +lXN +lXN +qEI +jgz +lDX +sIK +bzW +bSC +rRZ +chq +jYc +mZM +rRZ +mlJ +gCT +pUw +aJK +mvk +wbQ +rjj +ufs +ufs +jWT +gKN +jWT +ufs +ufs +dBH +knZ +qmw +ehB +aDs +iJl +jxN +ppP +tdG +vNz +iki +lXl +nrk +ozZ +ppP +cVR +pxw +pxw +pxw +fiA +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fOA +ksa +aVH +ksa +fdt +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(117,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +fEP +ksa +xXP +jLu +eKY +fwv +cYA +cYA +cYA +sFH +sFH +kWi +gXZ +oCE +gqF +jNZ +rZs +nJo +gmh +rZY +tWx +roe +lFp +poj +huy +poj +lFp +gZb +xpb +pPM +fld +aQG +lZS +xGN +bBE +mZc +oJR +cMA +wEA +wEA +mZc +kAV +oxz +wEA +wEA +mZc +jXu +wEA +jXu +mZc +mZc +mZc +lDO +mZc +kUA +gbD +oPl +rcS +wAZ +bXB +tJM +lOJ +snq +aCw +ayr +lKr +pVI +gdk +xDd +mvA +vTL +bsB +opG +acN +uiJ +acl +lXN +gQT +gQT +gQT +lXN +dOo +lDX +xAB +bzW +jQr +rRZ +oKY +qXs +gAf +hNo +iyt +gCT +maJ +iGG +wGQ +lPu +moS +kLd +ufs +kFE +vkF +gzD +ufs +xcl +jKh +bIY +cSw +mkE +cSw +cSw +aLm +bfT +eEP +vec +tzf +tzf +tzf +xrQ +bfT +uXN +wxf +wSn +pxw +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +fOA +uoo +aVH +uoo +fdt +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(118,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +fEP +ksa +xXP +vFa +jrB +vBh +nku +hRJ +iqq +pzW +lyw +cZI +vlf +vFa +gay +ahC +kUa +nom +crM +cXi +tWx +kzW +uib +oTE +toY +toY +evj +hwe +xpb +jMP +fld +pye +pZg +pZg +sbN +mZc +sPR +wEA +jhq +jub +beS +jub +kjx +nmf +wEA +gsz +wEA +cMA +pME +mZc +nmf +diA +wEA +mZc +kTE +gbD +wXC +cjW +wAZ +nGw +rkX +lOJ +snq +sqV +luP +fLf +rTS +rTS +rTS +rTS +rTS +rTS +rTS +hlK +eaS +gRZ +tpV +ePO +tal +gQT +lXN +pdB +lDX +oKy +mwc +bSC +rRZ +miL +miL +ooT +rRZ +iyt +gCT +uXQ +iGG +gja +wye +lxK +dlc +vQV +dTX +tLt +cTc +vQV +oip +hol +uxl +gKq +tvS +iGG +iGG +bzE +ppP +bFY +oiN +aCF +sWy +xWM +lSO +ppP +aSx +pxw +pxw +pxw +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fOA +ksa +aVH +ksa +fdt +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(119,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +ksa +uoo +ksa +ksa +ksa +uoo +uoo +uoo +ksa +ksa +ksa +ksa +ksa +fEP +xXP +uoo +xXP +xXP +vFa +vFa +vFa +vFa +vFa +vii +vVP +vFa +vFa +vFa +vFa +crM +abc +dyI +abc +crM +krU +jDc +etx +htc +fkD +nlr +fkD +htc +lig +xpb +vvy +iXS +qJv +oCG +oCG +jvi +mZc +ogk +wEA +oxz +ogk +mZc +wEA +nHY +wEA +wEA +mZc +ioq +wEA +wEA +gsz +wEA +wEA +kvW +mZc +igl +gbD +hjB +cjW +wAZ +ftk +vcA +lOJ +snq +snq +rTS +ylx +rTS +pDD +qDK +nBS +nUE +keT +rTS +hDl +hDl +hDl +hDl +hDl +oNk +nmu +lbL +oNk +oNk +utw +mwc +bSC +rRZ +rRZ +rRZ +rRZ +rRZ +iyt +gCT +xXV +jbg +iGG +fxh +mIf +xGO +ior +lbp +hol +xMC +ufs +kDd +iGG +uxl +qWb +qWb +qWb +qWb +mpY +vHf +nNs +voL +gNk +jKv +icT +pQc +vHf +ohm +pxw +izU +pxw +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fOA +ksa +aVH +ksa +fdt +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(120,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +mSP +iUB +meb +iUB +acc +ymi +vDw +tQM +iSg +gkK +kvw +mcY +flK +ell +rhY +yio +hhj +aGd +pEr +cXi +tWx +kzW +uib +qEv +edF +aof +aVB +hwe +fHX +vvy +tlW +opa +oCG +hkz +xbJ +mZc +klX +wEA +oxz +wEA +mZc +pME +sPR +kAV +rKU +mZc +xzK +wEA +wxP +mZc +fTi +wEA +kAV +mZc +qMU +gbD +hjB +cjW +wAZ +fsd +kGs +nHp +nfw +nHx +rTS +spJ +rCS +rCS +oDQ +mUJ +aUx +rCS +vBp +hDl +trg +cge +xZp +hDl +oRj +hNB +asp +drv +oNk +iKL +mwc +bSC +qCg +vAq +lqU +lHg +rRZ +iyt +gCT +pPq +iGG +iGG +saa +mIf +pty +ior +wni +hol +tUT +ufs +oHO +iGG +uxl +kfB +sAQ +xrY +wYA +mpY +vHf +iNx +sWy +wGq +jKv +oyN +pQc +vHf +ohm +pxw +pxw +pxw +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +fOA +uoo +aVH +uoo +fdt +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(121,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +uoo +ksa +uoo +uoo +ksa +ksa +ksa +uoo +ksa +ksa +fEP +ksa +aVH +meb +gti +meb +sBM +uol +uol +uRD +uol +wfF +kPm +mcY +que +sHr +cdi +sHr +mAr +tTx +rzM +pwT +tWx +vGY +gPd +lHi +lHi +lHi +lHi +iIj +eBg +vvy +pia +opa +oCG +oCG +lsQ +mZc +mZc +mZc +epF +mZc +mZc +mZc +mZc +mZc +mZc +mZc +mZc +xoI +mZc +mZc +mZc +tZr +mZc +mZc +xwg +gbD +hjB +cjW +wAZ +ftk +eBj +bXB +izu +lOJ +tdz +bok +gQO +gQO +qOQ +lvp +evr +evr +ilX +ljS +kRw +sFp +lez +hDl +qhZ +jkz +gZw +ett +oNk +oKy +mwc +bSC +qCg +oaZ +cIP +shv +rRZ +iyt +gCT +vZS +nbI +cfN +rTF +mpY +ior +ior +psz +hol +mpY +ufs +fpp +iGG +uxl +sSP +sSP +sSP +sSP +jmo +ppP +cFF +sWy +sWy +sWy +xWM +mXS +ppP +ohm +pxw +cmw +pxw +ihh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fOA +ksa +aVH +ksa +fdt +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(122,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +uoo +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +uoo +uoo +ksa +ksa +fEP +xXP +aVH +mGB +cPr +rhv +ihJ +xYr +xYr +ddu +ddu +wfF +nXA +dTx +rnV +isc +isc +isc +mAr +kKm +pEr +cXi +tWx +fVB +swR +gLS +jcd +aON +lHi +bsp +kWX +uAv +pjT +ouP +oCG +oCG +jmQ +mZc +rSy +mZc +oxz +wEA +sPR +mZc +vro +lTB +aOY +mZc +pME +wEA +pMU +mZc +fAQ +wEA +fqJ +mZc +ows +gbD +hjB +xLi +wAZ +fuf +eaf +uiA +baq +lOJ +tdz +sMN +apE +apE +jiu +syP +mMm +fIH +wkX +hDl +mPa +eYZ +cxW +hDl +gdB +oil +asp +tot +oNk +xEJ +pDZ +xEJ +qCg +vKr +axx +bFj +rRZ +iGj +gCT +gCT +gCT +gCT +pHy +otD +kXf +ufs +dlp +msH +lTv +ufs +dPP +iGG +uxl +nZu +iGG +iGG +iGG +ofs +aFZ +eqC +sWy +nsn +xWM +xWM +mbp +ppP +ykT +lWA +gAJ +cUV +lrp +mDv +pKc +tqT +iiE +bCy +mDv +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +ksa +aVH +ksa +fdt +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(123,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +fEP +ksa +aVH +meb +gti +meb +sBM +mVx +uol +gvK +uol +uol +kPm +mcY +lqh +sHr +oMj +sHr +mAr +kvZ +prj +cXi +tWx +luI +moo +gQA +tqP +eYI +lHi +jKd +jKd +hDp +fld +lat +pwp +pwp +xzm +mZc +mZc +mZc +jDy +wEA +wEA +mZc +cMA +wEA +wEA +mZc +klX +wEA +sPR +mZc +fAQ +wEA +pxU +mZc +xAc +gbD +hjB +cjW +wAZ +fHb +rkX +ftk +vfi +eaf +rTS +rFd +nTB +bSI +iej +ixc +gQO +gQO +eNn +hDl +emv +nPf +nPf +hDl +utO +wHi +pcC +bNK +oNk +prc +mwc +bSC +qCg +uHE +cIP +gwS +rRZ +iyt +paH +ulQ +paH +gCT +vCq +gCT +wCS +gCT +fVi +dYW +fVi +mLH +gJq +bFK +vTs +ukW +msH +qnm +jMs +vFe +ppP +wTb +sxX +imn +lNr +auL +cEQ +ppP +tZa +qzl +xuk +oyS +fBU +mDv +uGA +tqT +iiE +bCy +mDv +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +aVH +ksa +uoo +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(124,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +uoo +uoo +uoo +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +ksa +ksa +ksa +fEP +ksa +mSP +iUB +meb +iUB +kIR +prf +aYE +aYE +aYE +sDq +fPL +mcY +lqh +sHr +sHr +sHr +mAr +asC +prj +cXi +tWx +fVB +swR +kxq +kUp +kua +iVq +qJt +fnw +jKd +gFi +ovS +pwp +pwp +tef +xkV +mZc +rKU +oxz +kAV +ogk +gsz +wEA +ncd +wEA +gsz +wEA +wEA +wEA +gsz +cTL +wEA +wEA +mZc +bve +gbD +hjB +cjW +wAZ +ftk +luJ +fuf +ntG +lOJ +tdz +qfo +lRy +kOB +atm +evr +lHm +evr +mLW +hDl +bMS +mXX +sDk +hDl +oNH +kZM +xNS +xNS +oNk +oKy +mwc +ygO +blC +vwz +vhb +wlw +rRZ +iyt +fDD +mnx +fDD +rRZ +fDD +lJK +fDD +gCT +xtS +jnS +iBl +mLH +bsK +bsK +cLc +tYU +gBL +tYU +jaf +jaf +jaf +jaf +jaf +jaf +jaf +jaf +jaf +jaf +mDv +mDv +mDv +cMx +mDv +mDv +ujV +tqT +iiE +rTf +mDv +mDv +mDv +mDv +mDv +mDv +mDv +mDv +mDv +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +aVH +uoo +uoo +uoo +fdt +ksa +ksa +ksa +ksa +ksa +uoo +uoo +ksa +gln +ksa +ksa +ljY +ksa +ksa +gln +ksa +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(125,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ksa +fEP +xXP +uoo +xXP +xXP +mrP +mrP +mrP +xSA +xSA +mrP +mrP +lZs +lZs +rCh +dTK +dTK +dTK +mAr +lLk +prj +cXi +tWx +gnK +lHi +lHi +lHi +lHi +iVq +hhG +soj +jKd +ntE +jrr +pwp +bsg +fQq +dEE +mZc +pME +oxz +wEA +wEA +mZc +wEA +wEA +lTB +mZc +kNk +wEA +pME +mZc +nrl +nNQ +cTL +mZc +dMR +gbD +rBj +cjW +wAZ +ftk +ssT +ftk +uiA +lOJ +tdz +evr +evr +evr +evr +evr +evr +evr +dBA +hDl +uCB +mXX +nIA +nPf +ehP +tDk +tvC +tvC +oNk +oAa +mwc +phj +blC +gwS +feS +lgs +tpL +iyt +bqv +rPJ +rPJ +uaO +rPJ +eRs +fDD +gCT +xew +gIv +uJk +mLH +kYW +kYW +lLJ +rMN +cGB +gwW +jaf +qOG +paK +tRM +bGY +cCr +pfo +pfo +rhD +chs +mDv +bMM +pXp +jlE +jlE +jlE +jlE +jlE +fHc +wXR +wXR +wXR +wXR +wXR +wXR +wXR +wXR +cSQ +ivS +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +aVH +ksa +uoo +ksa +fdt +ksa +ksa +fdt +fdt +fdt +fdt +ksa +ksa +ujk +tWv +tWv +ujk +tWv +tWv +ujk +ksa +ksa +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(126,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xXP +mrP +pOC +rQs +mkx +uUq +bLO +mrP +uqt +hYk +mKa +rlB +kYB +ilT +mAr +qsG +pEr +mkR +tWx +oYp +bvp +jUm +hUW +pTK +vfV +vBL +vHc +jKd +iLj +gzy +iMx +nlD +gzy +ces +mZc +rKU +oxz +wEA +rKU +mZc +ncd +wEA +pME +mZc +nQD +wEA +voi +mZc +aYu +ajR +pxU +mZc +aeJ +gbD +hjB +xLi +wAZ +ftk +ftk +ftk +pDn +imr +rTS +ePf +cnH +kno +kZe +dmh +lup +ivi +gSs +hDl +kKi +vyt +eWq +hDl +tYE +emZ +fqj +fqj +oNk +sEm +mwc +phj +blC +wlw +nPp +ouI +rRZ +fDD +mnx +fDD +fDD +rRZ +pvb +stP +lXy +gCT +qGP +hdi +gvo +mLH +wLK +shc +ptZ +xUa +cGB +eZC +jaf +elU +kuC +qZC +bGY +wBY +pfo +pfo +pfo +chs +mDv +mDv +mDv +mDv +mDv +mDv +mDv +mDv +sXO +mDv +mDv +mDv +mDv +mDv +mDv +mDv +mDv +nrd +mDv +uoo +uoo +uoo +uoo +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ujk +ujk +gdw +utm +udm +kVb +xCa +ujk +ujk +ksa +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(127,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xXP +tcM +abT +mqW +heD +kCR +uUq +ygY +qdz +sHr +cdi +xzX +xzX +pvh +qlQ +ciG +pEr +khr +tWx +tWx +wYE +tWx +tWx +tWx +rMm +iGO +wCx +jKd +svN +hkm +clv +jKA +afl +otH +mZc +mZc +epF +mZc +mZc +mZc +mZc +xoI +mZc +mZc +mZc +xoI +mZc +mZc +mZc +mZc +mZc +mZc +hus +gbD +hjB +cjW +tnt +flc +flc +qxm +wRW +yiw +rTS +rTS +rTS +rTS +rTS +rTS +rTS +rTS +rTS +hDl +hDl +hDl +hDl +hDl +oNk +gmc +oNk +oNk +oNk +cWX +mYy +bSC +qCg +mUa +gcu +mOs +rRZ +ckL +paH +krY +fDD +rRZ +rRZ +ptg +rRZ +gCT +aPW +tbG +uYB +mLH +cTG +uyh +uCv +pBp +cGB +teM +jaf +ucG +ioi +vQE +btS +ope +pfo +pfo +pfo +pfo +bvJ +wgZ +rfB +opP +mRG +gmC +xgB +rwN +pfo +pfo +rhD +pfo +pfo +pfo +rhD +pfo +mDv +hfI +mDv +gzZ +gzZ +gzZ +gzZ +gzZ +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +ujk +ujk +wwS +pTV +pTV +pTV +pTV +pTV +wkO +ujk +ujk +qUo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(128,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +sQS +ksa +ksa +ksa +ksa +ksa +cMy +xXP +xXP +xXP +fEP +xXP +xXP +tcM +mhf +vPG +bYx +icu +dyU +kPj +hpy +iAS +iAS +iAS +dnE +dQJ +mJw +dAW +pEr +mMY +uML +uVP +bvp +nRm +byk +hqW +oYp +ttO +bTe +hDp +vUJ +rLK +tZU +ouk +sFb +jnc +mZc +kAV +oxz +wEA +kAV +mZc +rKU +wEA +sPR +mZc +sPR +wEA +wIn +mZc +nfz +cTL +wEA +mZc +tGD +gbD +hjB +oPl +mzq +mzq +sFl +sHR +mzq +mzq +mzq +cOn +fgC +pkv +iMN +xOV +mzq +tXM +rZB +mzq +cOn +mzq +qdL +mzq +mzq +dQg +gVQ +mzq +xOV +kOo +mwc +iym +pvL +pvL +pvL +pvL +rRZ +rRZ +rRZ +rRZ +ndh +rRZ +wKg +stP +wKg +gCT +gCT +gCT +gCT +gCT +bBQ +olH +woE +uLI +cGB +cgP +xlW +fop +rEO +wiC +wiC +iXg +nEx +uoX +nyT +bXv +bXv +bXv +bXv +bXv +bXv +bXv +bXv +bXv +pfo +pfo +pfo +pfo +pfo +pfo +pfo +pfo +gzZ +kPo +wCX +uWo +uWo +klo +juH +fAE +uoo +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +ksa +ksa +ksa +ksa +byC +ujk +tWv +ujk +tWv +ujk +loG +pTV +dQE +evx +wqx +evx +rnp +pTV +pTV +vym +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(129,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xXP +tcM +fSW +tCR +aAl +hve +soW +ygY +qdz +sHr +oMj +dTK +dTK +jch +mJw +gvF +pEr +kfT +eMb +kfT +kfT +tXa +byk +byk +byk +byk +kzW +wlm +vvX +pwp +opa +joH +eFj +bEa +pOt +uoE +nBV +qYf +wEA +gsz +wEA +wEA +wEA +gsz +wEA +wEA +wEA +oCJ +wEA +tJZ +dOt +mZc +bve +gbD +qet +gbD +gbD +gbD +gbD +gbD +gbD +gbD +gbD +ilg +ryN +gbD +kFM +gbD +gbD +hpC +hpC +hpC +ilg +hpC +gbD +hpC +gbD +gVB +fxG +fxG +fxG +lQO +bDt +tmQ +pvL +dnn +fjE +ngu +jZI +lWL +rRZ +wwI +fDD +mnx +fDD +stP +wov +rRZ +cDS +clk +fDD +rRZ +oqK +oqK +oqK +oqK +ycz +oqK +oqK +xUd +oCq +lGW +nAK +bXv +pfo +fwd +cLo +pfo +pfo +pfo +pfo +pfo +pfo +pfo +pfo +bXv +pfo +pfo +pfo +pfo +pfo +pfo +pfo +pfo +mdp +qQV +goP +iqP +iqP +vxg +uWJ +gzZ +fAE +gzZ +wIO +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +ksa +ksa +ksa +ksa +aVH +tet +pTV +cZU +pTV +tet +fXk +pTV +kUI +boF +cEz +rxl +ljl +pTV +pTV +vym +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(130,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xXP +mrP +mta +jOV +kFQ +hnu +aiG +mrP +kfI +wqm +yhW +taN +yjX +hIl +mJw +elu +pEr +vah +wbq +hqK +kfT +veX +ntM +iNM +ntM +fWD +ayq +hDp +mBL +ccL +eQO +mTW +duu +fYj +mZc +bsm +oJR +hvX +wEA +mZc +sPR +wEA +wEA +mZc +rKU +iJc +pME +mZc +nfz +wEA +wEA +mZc +dIF +fHA +fHA +fHA +nkv +fHA +fHA +prA +xNH +fHA +fHA +uJz +bIf +gbD +nXU +wmA +wXi +dFB +wXi +wXi +cOn +wXi +uDj +wXi +tjP +dRH +hjB +hjB +hjB +bzW +hjB +ihg +pvL +fni +gzT +aGj +scp +nwj +rRZ +mnx +fDD +fDD +fDD +fcY +jQQ +lrc +fDD +fDD +kvD +rRZ +huo +leq +qvX +tgG +cTJ +wWU +oqK +dtm +uTo +uTo +liN +uQQ +yjP +tnM +toD +yjP +bAX +yjP +yjP +yjP +yjP +yjP +yjP +tJu +yjP +yjP +yjP +yjP +yjP +yjP +yjP +wwQ +bmT +dFW +mEc +mEc +gBR +gBR +esU +tsd +xHf +lyC +bem +bem +bem +bem +bem +bem +bem +bem +bem +bem +bem +bem +bem +bem +bem +ahW +uha +rwH +uha +ahW +uha +pTV +oKw +dSI +iAb +aaA +ljl +pTV +uZz +ujk +wIO +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(131,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +fEP +xXP +xXP +mrP +mrP +mrP +mrP +mrP +mrP +mrP +pEr +lZs +pNZ +xzX +xzX +lvV +mJw +mYI +pEr +yjA +spo +gdg +cmI +cmI +cmI +dfS +cmI +cmI +cmI +cmI +rAA +tvh +xTF +woo +gLH +geB +mZc +kAV +wEA +hvX +oJR +mZc +mZc +xoI +mZc +mZc +mZc +bLy +bLy +bLy +bLy +bLy +bLy +bLy +gGh +wzL +wzL +wzL +tOJ +tOJ +tOJ +tOJ +tOJ +tOJ +tOJ +tOJ +rfU +hNp +rfU +oBH +nlh +ijl +ylB +oBH +oBH +oBH +nlh +nlh +oBH +ecX +jkt +ifb +xzN +bqA +maP +lng +pvL +dCA +jgV +aGj +dGg +kMh +rRZ +lwa +ckL +wwI +wKg +mnx +iyt +rRZ +wko +fDD +ijZ +rRZ +qvX +leq +eoL +tgG +cTJ +xdz +oqK +wzX +wzX +wzX +llH +bLz +llH +qKy +dgR +pfo +xzf +pfo +qUp +qUp +qUp +pfo +pfo +ewZ +uLT +pfo +pfo +pfo +pfo +pfo +pfo +ksu +gzZ +kwk +cgm +jDD +dsn +cgm +hgf +gzZ +fAE +gzZ +iCE +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +aVH +tet +pTV +dah +pTV +tet +jpN +pTV +kUI +rxl +bBO +boF +ljl +pTV +pTV +vym +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(132,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +prj +nvx +oFy +hho +hho +uSP +voQ +vbz +pEr +rID +siR +adT +cmI +nZo +kVn +jWA +vPr +eVT +iJp +wIv +wIv +wIv +wIv +mZc +mZc +mZc +mZc +mZc +vhY +hvX +kAV +mZc +cMA +wEA +ogk +evt +cQs +bLy +xaW +krD +fMj +hLt +ewG +rCx +vsG +aww +byR +tRX +dCw +vxD +gbH +qAZ +qJu +gmU +qQa +tOJ +ybb +wxL +lbf +oBH +ugS +lNK +hvm +naB +rgv +xCA +ugN +mup +fOV +bXc +hbj +rFk +rFk +qUS +sep +vcI +pvL +pvL +jvj +pvL +pvL +pvL +rRZ +rRZ +rRZ +rRZ +rRZ +rRZ +iGj +rRZ +rRZ +ndh +rRZ +rRZ +tgG +gvd +tgG +tgG +cTJ +cLU +gAM +hRt +ssL +qep +kHL +thA +ryX +lMb +vkL +xDl +xny +bGO +ccW +qNN +ccW +spG +pfo +pfo +pfo +pfo +pfo +pfo +pfo +pfo +pfo +gZC +bmT +swp +pgv +iLs +qMO +jyb +oqf +kvL +kiv +kiv +kiv +kiv +kiv +maz +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +byC +ujk +wzu +ujk +wzu +ujk +uRF +pTV +gGi +iIA +rjK +iIA +lay +pTV +pTV +vym +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(133,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +prj +gla +jaz +yic +ylE +pnU +fJh +xhW +pEr +pGV +blX +iGQ +cmI +iNd +jWA +iyI +vQt +sZN +orE +vQt +oDg +jPP +fTu +mZc +aXc +tmR +aXc +mZc +wEA +hvX +wEA +gsz +wEA +wEA +syW +cMA +kuz +bLy +gRc +hrp +dwS +gZV +xyN +iZM +mOg +nwM +nVs +avL +dCw +pZs +lXu +uXe +lXu +lXu +uVI +qeZ +cHJ +wxL +kel +oBH +xhg +lme +tXP +lyv +uJm +tcR +hYl +xHH +qPx +mvN +mPL +jLI +fGH +hih +nUs +emd +rIv +wja +jLf +wqM +lJU +mxn +fzJ +sKr +oAG +yiY +dxA +rRZ +iyt +rRZ +fDD +xmz +edc +rRZ +sPJ +wdB +mdw +tgG +cTJ +leq +oqK +hrH +ltg +hzA +fzi +dlI +bHT +xHp +yjc +aoc +cdI +pfo +pfo +pfo +ulR +rxo +pfo +pfo +pfo +oLT +pfo +pfo +pfo +pfo +pfo +gZC +jaf +jaf +jaf +jaf +jaf +jaf +jaf +jaf +jaf +gkZ +gkZ +gkZ +gkZ +tXu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +ksa +uoo +ksa +uoo +ksa +ujk +ujk +wcA +pTV +pTV +pTV +pTV +pTV +oZg +ujk +ujk +qUo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(134,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +rxc +vip +ljv +ebw +ebw +ljv +ljv +jvd +ljv +ljv +twi +cmI +pJz +cmI +cmI +cmI +cmI +cmI +fQJ +mXY +nOM +jcX +jcX +jcX +jcX +jcX +bgz +dqH +dct +nZW +nZW +nZW +dct +nZW +czt +wEA +mZc +xZd +tTk +beM +xgz +xZd +bLy +xzs +gqj +fMj +nyn +txx +tzk +vsG +cst +nVs +dJe +dCw +sYH +dsu +wMK +lXu +lXu +cEO +qeZ +cHJ +wxL +czJ +oBH +qFT +sgM +cfC +eaB +uJm +tcR +lOP +oKW +ylB +haD +kCL +jOI +kCL +oqN +wuj +dtT +rMK +kCL +eVV +kCL +eYU +dqg +omR +kxV +iII +mxn +mxn +rRZ +iyt +rRZ +edc +xrL +xmz +lrc +leq +leq +leq +sYb +cTJ +goI +uhz +xbz +iln +bHc +fpV +ble +euK +qrn +nlI +xgo +xny +bDY +fwt +nzT +fwt +mnW +pfo +pfo +pfo +pfo +pfo +pfo +pfo +pfo +pfo +cza +pap +yjP +yjP +yjP +rim +yjP +gwY +yjP +rim +yjP +wwQ +pfo +gkZ +tXu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +ksa +uoo +ksa +uoo +ksa +ksa +ujk +ujk +gdw +wVp +xNj +mrT +iwf +ujk +ujk +ksa +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(135,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ebw +ats +jzo +cmP +ljv +cCF +cmI +fvz +sZN +orE +vQt +vQt +wQQ +vQt +vQt +vzK +jcX +iyI +wQQ +vQt +fKo +kpE +fTu +mZc +wEA +wEA +nmf +mZc +kAV +kAV +sPR +bLy +bLy +bLy +bLy +bLy +bLy +bLy +gGh +gGh +gGh +gGh +gGh +gGh +gGh +ceT +nVs +rdG +dCw +oYD +lXu +aug +jLn +tvV +vSo +tOJ +cHJ +wxL +lbf +oBH +oTN +uJm +uJm +uJm +sZG +lqb +nUK +tlq +oBH +haD +ghk +vdQ +vdQ +mbF +eVV +eVV +eVV +eVV +eVV +eVV +eYU +dqg +vrT +tof +dpd +gow +vYZ +rRZ +iyt +lrc +fDD +vDm +sgY +rRZ +fDQ +leq +aDS +tgG +cTJ +leq +oqK +kQX +uXP +geR +eVB +wNL +ctz +wZv +pfo +pfo +vEP +pfo +oKE +oKE +oKE +pfo +pfo +pfo +pfo +pfo +pfo +pfo +pfo +pfo +pfo +iZB +pfo +pfo +pfo +pfo +pfo +pfo +pfo +pfo +pfo +pfo +gZC +pfo +gkZ +tXu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +ksa +fdt +fdt +fdt +fdt +ksa +ksa +ujk +wzu +wzu +ujk +wzu +wzu +ujk +ksa +ksa +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(136,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +kly +ksa +ksa +ksa +ieK +rVT +tIU +qyx +tIU +ebw +xCc +kpE +jcX +jcX +jcX +jcX +jcX +jcX +jcX +jcX +jcX +jcX +oKb +mZc +mZc +oLd +mZc +mZc +mZc +mZc +xoI +mZc +mZc +bLy +bLy +bLy +bLy +poQ +uvU +mwQ +bDz +uIl +wLm +pPz +qhD +hHJ +jYp +lvP +hmq +pPz +fzW +nVs +tTo +dCw +jZa +nkw +hPO +itE +nWT +tOJ +tOJ +pmr +wxL +jmS +oBH +hOn +cYG +cYG +pLn +wvi +bKE +uJm +uKj +xyc +oSg +hQe +hGZ +kUf +dRb +jzw +eri +nzR +oQv +mXb +eVV +eYU +mxn +bPo +wKW +tQm +tQm +tQm +rRZ +iyt +rRZ +fDD +ovO +fDD +rRZ +tgG +gvd +tgG +tgG +cTJ +leq +oqK +evd +crl +xId +crl +jBr +euK +sgT +pfo +pfo +ukC +wQa +wQa +wQa +wQa +wQa +wQa +wQa +wQa +wQa +slh +wQa +wQa +wQa +wQa +rwa +itB +itB +stI +vnO +vnO +vnO +ppj +pfo +pfo +pfo +gZC +pfo +gkZ +tXu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +ksa +ksa +ksa +ksa +uoo +uoo +ksa +xHx +ksa +ksa +jnp +ksa +ksa +xHx +ksa +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(137,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ebw +yen +muu +yen +ebw +mlN +vQt +vQt +rOt +vQt +vQt +orE +vwE +vQt +wQQ +oDg +gYl +ayu +mZc +vWa +oxz +kAV +mZc +lTB +wEA +cTL +sPR +hSr +bLy +sTi +sZR +qoF +jRs +lyr +lyr +uRJ +jGV +jNL +pPz +bDm +fde +xqg +aLo +mXA +pPz +fzW +nVs +dJe +pdc +oVo +oVo +iNT +qBR +oVo +qeZ +kkp +cHJ +wxL +lbf +oBH +rvv +fNr +lZk +oXO +lZk +jxr +qyk +uVQ +oBH +haD +oqN +wRl +ltG +xzb +xzb +xzb +ltG +dXR +gGL +nOF +emN +noJ +lTJ +lou +ukj +pQi +ogW +rRZ +iyt +rRZ +mnx +fDD +fDD +rRZ +dHn +leq +tcF +tgG +cTJ +tRz +oqK +rmx +dVk +kOi +tRs +oDU +euK +gHv +vnO +vnO +oma +wBy +vnO +vnO +vnO +joY +vnO +vnO +vnO +vnO +tEg +itB +vnO +vnO +vnO +wzM +pfo +iwk +nfR +txf +lMb +lMb +gje +qrv +pfo +pfo +imx +pfo +gkZ +tXu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +ksa +ksa +ksa +ksa +ksa +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(138,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +rxc +vip +ljv +ebw +ebw +ebw +hGm +ebw +hGm +ebw +aqf +aqf +aqf +wIv +aqf +aqf +aqf +wIv +wIv +wIv +wIv +wIv +wIv +mZc +jjm +oxz +wEA +jqH +wEA +axG +qmT +axG +axG +wju +eMc +eMc +ckO +uaB +nGs +ilH +xvZ +sZI +aWL +pPz +mak +rLX +wsE +mlK +oIf +pPz +att +ckP +pEA +mTT +nhr +dXW +iNT +wzV +wBG +oYv +nVy +bUT +wxL +bMy +oBH +jRM +mXg +oBH +nFM +ylB +oBH +oBH +oBH +oBH +kpt +oqN +oTy +ltG +bDR +vFB +iEZ +ltG +jmd +thk +nOF +fOz +mxn +pUP +xPK +xcB +xcB +xcB +rRZ +iyt +rRZ +rRZ +ndh +rRZ +rRZ +xnd +uaL +xVF +tgG +cTJ +leq +oqK +jCy +hkS +hJr +rHd +hWF +jjJ +uxM +rZO +fYX +gsA +lQK +psI +tUK +ufk +pZU +kgH +rab +ufk +ufk +qQp +deb +fBh +ufk +ufk +fpO +mrM +dhL +vDa +atO +ebS +kQx +jII +pjq +jjV +fjT +tnM +cFT +uHg +vot +aJU +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(139,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +mZc +oSo +oxz +oJR +mZc +lTB +mov +lTB +mov +xzK +bLy +sZR +sZR +qoF +hNi +mZO +bQA +tEK +lPX +pik +pPz +kpg +iHC +xPS +iHC +xbV +pPz +fzW +auK +dJe +pdc +hAo +cGj +ccZ +stR +nGz +qeZ +nVy +cHJ +wxL +lbf +aHD +bHE +kFI +tzy +eXv +nil +sUW +uJQ +plr +aHD +haD +oqN +oTy +xzb +xsf +kbA +fYL +xzb +ybl +fbU +nOF +eYU +dqg +cre +oeF +kyl +kyl +ewn +rRZ +iyt +rRZ +ckL +hkl +kGn +rRZ +duE +leq +leq +sYb +cTJ +cTJ +oqK +dhs +xMI +cYX +mzK +hPM +xsd +gYt +inT +jcB +caL +gYt +inT +jcB +ciT +gYt +ciT +tjI +vOT +mtH +jaf +aqP +jaf +hya +vOT +efs +gkZ +aQu +kvi +wrl +gkZ +lhD +kvi +wrl +gkZ +lhD +gkZ +gkZ +gkZ +tXu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(140,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +rxc +aVH +aVH +aVH +aVH +aVH +aVH +aVH +rxc +ksa +ksa +xXP +ksa +ksa +ksa +mZc +mZc +xHh +mZc +bLy +bLy +bLy +bLy +bLy +bLy +bLy +pWX +pWX +pWX +gxH +qoF +qoF +qoF +qrs +gxH +pPz +pPz +bcp +qSH +bcp +pPz +pPz +nAQ +auK +jAb +tOJ +tOJ +tOJ +tOJ +tOJ +tOJ +tOJ +lMl +cHJ +wxL +tOj +vFG +pbg +fyf +iCo +ijI +ijI +ijI +ijI +qpd +bKI +uSJ +oqN +vpY +eXy +aUS +pKq +eva +xzb +dXR +gGL +nOF +dIM +dqg +wia +lwy +uwx +rtz +ugy +rRZ +iyt +lrc +fDD +fDD +fDD +lrc +leq +leq +pau +tgG +leq +cTJ +oqK +xXP +xXP +cWI +xXP +rTM +xXP +nAR +xXP +rTM +ikp +qYS +uQk +rZN +uQk +qYS +uQk +rZN +uQk +sKX +gkZ +hGk +gkZ +anO +uoo +vKf +uoo +vKf +itW +knX +xXP +rTM +itW +knX +uoo +nSq +uoo +fyt +kiv +xiW +uoo +uoo +fdt +uoo +fdt +uoo +uoo +uoo +aVH +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(141,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +mjz +mjz +mjz +mjz +mjz +mjz +mjz +aVH +xXP +xXP +qZk +qZk +qZk +qZk +bLy +eJp +psO +gOA +bLy +nSh +vME +mrB +cus +qAa +njj +cMj +ech +emX +emX +emX +klm +emX +cPO +emX +rvf +emX +emX +dsd +emX +lEZ +emX +uMj +hVF +mAE +xVX +dkb +uOS +eED +nYx +xyD +mGI +mGI +ohw +wxL +nWt +fTr +mWJ +fyf +hfZ +xix +uyQ +uyQ +uyQ +jHI +hSc +ymc +ldF +vvg +ltG +uKB +hXj +kEq +ltG +vSr +qlb +kdQ +bqb +mxn +bpf +bJT +vER +nfm +wjf +rRZ +iyt +rRZ +eKT +fDD +ckL +rRZ +plg +uaL +miX +tgG +eoL +cTJ +oqK +xXP +wFB +bJR +fdT +pHI +wFB +dJc +fdT +pHI +wFB +dJc +fdT +pHI +wFB +dJc +fdT +pHI +wFB +jHh +jDp +uou +jDp +sKq +wFB +bll +fdT +qBV +wFB +rUQ +fdT +gnk +wFB +rUQ +fdT +gnk +wFB +tXu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(142,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +mjz +mjz +mjz +mjz +mjz +mjz +mjz +aVH +ksa +ksa +icx +skA +qpB +ePr +bLy +mQo +psO +fRT +bLy +bMs +cch +nVz +sSf +qUC +hwy +gKT +weS +weS +weS +weS +weS +weS +mfe +vdO +vdO +vdO +vdO +vdO +vdO +gTl +wrD +vdO +rEI +ibD +nVt +oIP +vPS +kUL +sJi +oIP +apT +vOP +cHJ +wxL +tOj +vFG +pbg +ijI +iFj +ijI +ijI +bJK +ijI +gSl +vHk +uSJ +oqN +jnY +dnR +dnR +dnR +dnR +xXd +xXd +xXd +gWG +xXd +xXd +xXd +rRZ +rRZ +jBZ +rRZ +rRZ +iGj +rRZ +rRZ +rRZ +rRZ +rRZ +rRZ +tgG +tgG +tgG +tgG +cTJ +bpD +xXP +wFB +mmX +lLP +meT +wFB +iRl +pgm +ufg +uSR +atN +cCp +wrB +wFB +tas +cyF +juj +wFB +tXu +gkZ +hGk +gkZ +uoo +wFB +gFm +owH +uki +wFB +sXy +nck +bbe +wFB +tWQ +hGE +rNd +wFB +tXu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(143,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +mjz +mjz +mjz +mjz +mjz +mjz +mjz +aVH +qZk +icx +qZk +hDE +hlP +sbB +bLy +gOA +psO +jwZ +bLy +bMs +nZk +sZt +mxo +hqm +njj +uLC +tjC +xEV +imU +xEV +grL +anq +iNi +anq +tiT +anq +anq +cxY +gwz +dKn +ukV +yjo +xxe +aSr +oPd +bYo +eqa +tLT +ezP +bYo +uHC +nVy +bUT +wxL +lbf +aHD +uNw +uEp +tjR +npo +uEp +cTT +skR +flu +aHD +haD +oqN +eYU +cud +uQr +eLx +hEk +gOS +iIr +hvW +ofl +nQM +avo +aHW +lOA +fDD +cQv +bQB +fDD +iyt +mnx +rRZ +boj +kGn +odR +rRZ +dnA +toN +fIO +tgG +cTJ +bpD +xXP +wFB +sYs +bGF +bGF +wFB +snh +vFg +dPd +wFB +nxU +meR +oPm +wFB +dFT +ril +gZH +wFB +fgv +kDG +vJk +kDG +maz +wFB +coh +vze +dZM +wFB +dYV +eKm +dSP +wFB +lJr +gxT +qJA +wFB +tXu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(144,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +mjz +mjz +mjz +mjz +mjz +mjz +mjz +aVH +aFe +bzX +rkF +hhs +ikm +hxS +ckD +fJl +ojQ +dRS +set +mMS +imJ +avR +poB +cll +njj +njj +dUx +bTf +ila +bTf +dUx +cHD +cHD +cHD +cHD +cHD +cHD +cHD +cst +hVF +dJe +dMO +dMO +dMO +fsE +fsE +fsE +fsE +fsE +fsE +fsE +kFc +cHJ +wxL +aBz +qOH +bxO +bxO +qOH +iLu +bxO +qOH +qOH +qOH +qOH +urh +oqN +eYU +cud +efV +lxS +lEU +lEU +ixC +hxt +jTi +wmF +wzK +xXd +rRZ +mIU +aOn +gzP +nak +xjb +eVL +bkV +eVL +qkk +eVL +bKq +rVw +rVw +rVw +nzx +nzH +bpD +xXP +wFB +bGF +bTK +bGF +wFB +dPd +vka +dPd +wFB +oPm +ijp +oPm +wFB +gZH +mCK +gZH +wFB +uoo +gkZ +hGk +gkZ +tXu +wFB +dZM +kzM +dZM +wFB +dSP +nKt +dSP +wFB +qJA +gmE +qJA +wFB +tXu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(145,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +mjz +mjz +mjz +mjz +mjz +mjz +mjz +aVH +qZk +icx +qZk +fck +lHF +jNm +bLy +gOA +psO +vcn +bLy +pCm +pCm +pCm +pCm +pCm +kRc +dTN +dUx +nhS +jWP +nWp +dUx +wwC +mRM +ixJ +kzf +ylb +iGp +min +cst +hVF +sVg +dMO +lIG +mpw +wFf +pgj +gqk +mZT +hxw +cnA +sAJ +nVy +cHJ +wxL +lbf +qOH +bDe +lYQ +dTZ +sce +eDk +ctF +orW +wsQ +qOH +aga +oqN +eYU +cud +yaT +tbt +nyU +uhv +uVb +tAk +rkE +ocg +hIW +kXq +rRZ +jdN +aLp +mnx +raq +fDD +jxM +rRZ +ckL +fDD +osp +rRZ +dnA +hLX +qvX +tgG +lrg +oqK +xXP +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +uoo +gkZ +hGk +gkZ +tXu +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +wFB +tXu +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(146,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ljY +qpF +ljY +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +mjz +mjz +mjz +mjz +mjz +mjz +mjz +aVH +ksa +ksa +icx +cQt +tqj +gAx +bLy +iea +psO +whv +bLy +ewM +wLR +wnl +wnl +wnl +wnl +wnl +dUx +fXF +hBp +oRb +dUx +rAY +nCp +fcm +vOB +btZ +bZt +min +cst +hVF +dJe +emk +qGq +mJB +hXt +iDt +hXt +hXt +mJB +eRV +gyN +nVy +bUT +wxL +kjv +qOH +yja +guA +rOg +fNe +rOg +rOg +rOg +gPu +bJZ +haD +oqN +rZH +xXd +xXd +xXd +xXd +xXd +xXd +xXd +xXd +xXd +diy +xXd +rRZ +rRZ +rRZ +rRZ +qLB +rRZ +rRZ +rRZ +rRZ +fDD +gCT +gCT +oqK +oqK +oqK +oqK +lrg +oqK +xXP +xXP +xXP +xXP +xXP +xXP +xXP +xXP +xXP +xXP +xXP +xXP +xXP +xXP +uoo +xXP +uoo +uoo +uoo +gkZ +hGk +gkZ +fgv +kiv +kiv +kiv +kiv +kiv +kiv +kiv +kiv +kiv +kiv +kiv +kiv +kiv +xiW +uoo +uoo +uoo +uoo +fdt +uoo +fdt +uoo +uoo +uoo +aVH +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(147,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +wRN +cXW +wRN +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +mjz +mjz +mjz +mjz +mjz +mjz +mjz +aVH +xXP +xXP +qZk +qZk +qZk +qZk +bLy +agf +psO +kTq +bLy +gtV +aVA +kIh +wnl +wnl +rhy +tNK +dUx +jEw +mVt +yjH +dUx +ttC +kaP +qvC +mkl +gSE +vSA +min +cst +qQz +uLo +aBj +mEf +cev +cev +cev +cev +cev +hXt +mzY +sAJ +cNc +neW +wxL +lbf +qOH +uEZ +dSr +qbc +maG +qbc +bXo +bXo +jAi +vfO +wyZ +xVM +eYU +bAD +rwR +qXG +reB +sVE +sKy +fAa +xGb +pSN +dwH +lCs +kpB +cQO +kRo +jbR +lIZ +xgu +ome +pxG +rRZ +iAG +gCT +rpa +vCZ +paI +drg +oqK +ydh +oqK +oqK +oqK +bpD +bpD +bpD +oqK +bpD +bpD +bpD +oqK +bpD +bpD +bpD +oqK +bpD +bpD +bpD +oqK +dgl +txI +xKp +txI +dgl +txI +txI +txI +txI +txI +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +fdt +fdt +fdt +oIb +wxU +oIb +fdt +fdt +fdt +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(148,1,1) = {" +ksa +ksa +ksa +ksa +ksa +uoo +uoo +cXW +wRN +bkH +wRN +cXW +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +rxc +aVH +aVH +aVH +aVH +aVH +aVH +aVH +rxc +ksa +ksa +xXP +ksa +ksa +ksa +mZc +mZc +qOR +mZc +bLy +rfS +rfS +rfS +rfS +rfS +rfS +jDg +dUx +rBF +hBp +nNH +dUx +gyo +nxH +tPP +fxI +aRd +qPP +vgG +ebD +xsX +dJe +emk +ggz +gKi +hXt +hXt +hXt +cev +gqK +uLQ +fsE +fsE +iQo +wxL +lbf +qOH +llR +bXw +dTG +dWs +ptt +vmo +ptt +iDj +bJZ +haD +btK +emN +rHn +sBs +pmt +obC +snz +gbh +vLV +xGb +utD +qVb +fte +kpB +fjH +aSg +xtL +tvl +qxl +udQ +eZR +rRZ +fDD +gCT +gSm +nqG +lFY +cDC +oqK +lrg +tgG +qLk +mLe +xSl +cJJ +kFV +tgG +twN +leq +xdz +tgG +oLy +mYC +leq +tgG +pjx +owd +qkC +cQT +pKS +cPo +iWX +nIb +bIu +sKd +mJo +xUG +ula +itA +jxl +jxl +aJU +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +ksa +uoo +ksa +uoo +xpD +uoo +ksa +uoo +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(149,1,1) = {" +ksa +ksa +ksa +ksa +uoo +byC +wRN +cXW +bzw +cLl +hsY +cXW +wRN +wIO +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +bZv +bZv +bZv +bZv +bLy +mhM +psO +ogZ +bLy +dop +dEu +qpY +mAR +wPK +rfS +dmw +dUx +aVO +goc +bvF +dUx +ygD +dnX +ahj +dAg +kiT +bhB +cHD +cst +hVF +dJe +dMO +sRA +rxH +ikD +oaQ +jFw +tqK +ikD +eWv +xSh +fsE +neW +wxL +lbf +qOH +nle +rzV +hvU +hBx +wYn +eQZ +lve +yaZ +qOH +haD +btK +eYU +qfa +irm +wTM +uIy +dzI +uGF +iKY +xGb +axv +qVb +piu +kpB +cse +fHm +rcJ +cHp +cCc +aDP +utV +rRZ +fDD +gCT +mTC +mpP +lFY +nrA +oqK +tJd +knY +hnr +hnB +kaL +qQH +rpz +knY +cEm +aaT +leq +fim +aBA +nqE +aBA +fim +leq +leq +ddr +oqK +xTe +fza +iWX +vuY +mNy +whM +nli +gKj +vjI +txI +mrl +txI +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +ksa +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +ksa +uoo +ksa +uoo +mgG +uoo +ksa +uoo +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(150,1,1) = {" +ksa +ksa +ksa +ksa +uoo +cXW +cXW +qCD +gtO +byi +mWa +ume +cXW +cXW +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +bZv +dwc +bZv +lkh +euP +oYi +bLy +gOA +psO +gOA +bLy +dop +mPg +goi +aIF +mcz +rfS +rfS +tcP +tcP +tcP +tcP +tcP +tcP +tcP +tcP +tcP +tcP +tcP +tcP +efo +hVF +wVm +dMO +emk +bsd +emk +dMO +dMO +bZN +dMO +dMO +fsE +fsE +btx +wxL +nxn +qOH +qOH +qOH +bJZ +tJO +bJZ +qOH +qOH +qOH +qOH +xsl +btK +cuE +fgN +irm +hMW +nsd +rEK +oPE +cit +xGb +utD +qVb +fte +kpB +cxl +aSg +xtL +gOK +niD +jQO +mAd +rRZ +fDD +gCT +exJ +gzt +fJd +caj +oqK +oqK +oqK +cGk +tXk +aXN +btB +eCO +tgG +gEs +cJu +aBA +tgG +leq +aBA +tRz +tgG +cTa +leq +vnp +oqK +aTl +ppS +fqV +eoJ +sGk +mwK +mwK +rPV +kZS +sfu +muI +txI +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +fJK +fJK +fJK +ksa +uoo +ksa +fdt +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(151,1,1) = {" +ksa +ksa +ksa +ksa +qpF +wRN +qsk +rqm +byi +fvW +byi +wND +rHQ +kKH +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +nWH +rIe +sYw +lMk +tgW +bbI +gCi +fJl +psO +fJl +bow +dPT +paO +ctt +dZV +vMf +jTS +qCQ +kYa +sjm +eMz +eGs +tBh +sjm +pKY +ykS +mxf +uVG +cQR +tcP +omL +hVF +dJe +dMO +rrv +fqQ +rrv +dMO +ndK +xAL +jbt +bVU +fJA +knl +neW +wxL +lbf +xAf +rjQ +hso +kbR +dtT +uQm +uQm +uQm +uQm +nuN +rMK +btK +eYU +bAD +eIh +hwk +reB +upz +xby +jFb +xGb +utD +qVb +iSM +kpB +pIJ +oTZ +tGl +jsa +lJH +wCp +wNz +rRZ +qPk +gCT +abo +gNM +mrW +pDl +nev +oTD +oqK +oqK +oqK +oqK +oqK +oqK +tgG +tgG +fbm +tgG +tgG +tgG +gvd +tgG +tgG +sZo +jMT +lGd +oqK +urb +mNF +uYe +jGm +ijG +rLH +eXJ +eXJ +pHW +xhI +vRl +dgl +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +uoo +uoo +uoo +uoo +uoo +rYe +rYe +rYe +rYe +rYe +rYe +rYe +tOn +tOn +fJK +fJK +fJK +fJK +fJK +tOn +ksa +ksa +fdt +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(152,1,1) = {" +ksa +ksa +ksa +ksa +uoo +cXW +cXW +eZf +okv +byi +xAj +fzM +cXW +cXW +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +bZv +dwc +voo +fHz +vTN +uuA +bLy +fGh +psO +jbM +bLy +iSe +lHt +kdH +vOj +vOj +rfS +rlE +qCQ +qCQ +bUF +qCQ +qCQ +qCQ +qCQ +qCQ +qCQ +qCQ +wbN +tcP +vbc +hVF +dJe +emk +fqQ +rrv +fqQ +dMO +abf +jzQ +jJq +qgz +vGf +mGI +bOJ +vbD +esr +sdL +lFz +mqX +sre +ghk +vdQ +vdQ +vdQ +vdQ +ejR +ejR +oAE +tVt +bAD +bAD +bAD +bAD +bAD +bAD +bAD +bAD +utD +qVb +hjU +kpB +kpB +kpB +kpB +prn +kpB +kpB +kpB +rRZ +dVx +gCT +tir +tir +tir +tir +tir +rmM +gDn +iMj +sxJ +uit +rbW +oqK +iKJ +vTT +lfI +lJD +tTs +tTs +tTs +tTs +lpn +tTs +iId +itU +ejy +eUa +jxd +rKd +hOc +iQE +iQE +kMH +txI +qps +txI +gAu +txI +txI +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +ksa +qmg +rYe +rYe +rYe +rYe +oRG +tKW +xnX +hey +rYe +rYe +fJK +fJK +fJK +fJK +uwv +fJK +fJK +fJK +fJK +ksa +ksa +fdt +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(153,1,1) = {" +ksa +ksa +ksa +ksa +uoo +byC +wRN +cXW +pgT +jCb +tTg +cXW +wRN +wIO +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +bZv +bZv +bZv +bZv +bLy +hNt +psO +xGH +bLy +lHt +lHt +efQ +oAk +xLy +rfS +ecf +qCQ +qCQ +vKo +qCQ +qCQ +qCQ +qCQ +vCc +qCQ +qCQ +xGy +wsy +fzW +hVF +dJe +dMO +fqQ +jYF +fqQ +dMO +yiI +sXd +byp +grI +fJA +fgw +neW +wxL +lbf +gXW +rjQ +vcv +lcX +jct +rlz +lcX +xsR +lcX +iko +lDZ +btK +wuj +rcz +gav +nxB +gav +gav +gav +gav +jQZ +nMx +qVb +dYx +joj +gav +xtu +gav +vqr +gav +qAj +gav +abG +cZu +dRR +tir +vRJ +iuR +sry +tir +sZe +mGb +sNb +lYg +mGb +iIn +oqK +wGN +nCa +uch +gRf +nLS +sZo +bsq +uch +sZo +gsl +leq +kXH +oqK +sTD +qgZ +fOn +gfI +uOj +cLR +kQK +lHd +ssz +mQF +uHo +ipj +txI +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +aVH +aVH +hKj +lLH +vQo +uPx +tyq +lqY +wTA +imt +jLL +xXN +rYe +fJK +fJK +fJK +fJK +ohg +fJK +fJK +fJK +fJK +fJK +ksa +ksa +fdt +fdt +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(154,1,1) = {" +ksa +ksa +ksa +ksa +ksa +uoo +uoo +cXW +wRN +soB +wRN +cXW +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +mZc +xoG +psO +vcn +bLy +rfS +rfS +rfS +rfS +rfS +rfS +hsg +bAO +qCQ +chG +fWm +fWm +fWm +fWm +fWm +fWm +fWm +ybA +guB +eJg +hVF +dOy +dMO +dMO +dMO +dMO +dMO +rkB +rkB +rkB +rkB +fJA +rCT +xBK +cAM +xBK +rCT +lWn +lWn +hff +iQM +lWn +lWn +lWn +lWn +lWn +rmU +oDi +hts +wXy +eMi +eMi +eMi +eMi +eMi +eMi +eMi +eMi +ijg +eMi +eMi +lfD +eMi +eMi +eMi +jAL +jAL +jAL +jAL +wOI +qbk +bma +wJr +rst +koO +hlw +eTo +eQm +tja +xiO +iXh +xeU +dhi +eac +qLR +eac +rgf +mpo +sZo +bsq +uch +tgG +nir +vHU +vHU +oqK +rHp +mcP +efB +qHq +enE +lZA +qgZ +bhI +nZX +san +pHw +trz +xgR +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +hzo +rYe +rpI +rYe +ivq +vHv +oju +iRQ +nxr +ycA +rYe +fJK +fJK +fJK +fJK +hll +fJK +fJK +fJK +fJK +fJK +fJK +ksa +ksa +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(155,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +wRN +cXW +wRN +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +vyg +lyP +psO +gOA +bLy +tyC +bpU +jjk +bQP +enT +bWl +bFv +qCQ +qCQ +otQ +qCQ +qCQ +qCQ +qCQ +ibc +qCQ +uox +sIJ +wsy +fzW +hVF +gSn +ean +fVX +mjR +rvW +npm +rDg +gqL +vDF +aqD +fIX +stU +cHJ +wxL +lbf +jKW +lWn +aBM +mXK +xIo +aZq +mrX +bnM +byP +lWn +hJs +btK +dee +sJW +rrD +rrD +rrD +loQ +rrD +iDE +rrD +dMq +lVu +bPv +nwB +seJ +loQ +rrD +rrD +uCp +gfA +rrD +uCp +uUV +iCW +tir +kYx +une +keo +tir +jlo +ude +sBq +onj +iJR +wbn +oqK +bbm +uch +mpo +nrr +wcZ +tgG +tgG +oqK +oqK +oqK +oqK +oqK +oqK +txI +txI +txI +txI +txI +txI +txI +txI +txI +txI +txI +txI +txI +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +byC +rZq +rZq +rZq +rZq +aqh +suH +suH +ffw +suH +suH +fJK +oQW +fVR +kMY +bJM +kMY +bGn +wLQ +nXR +fJK +fJK +uoo +uoo +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(156,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +jnp +qpF +jnp +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +xXP +xXP +xXP +vyg +gSG +cFU +dRS +oGe +rlF +eFV +sHl +tXj +tXj +cSz +iFN +qCQ +qCQ +qCQ +bdX +cnk +lHY +cGF +ctb +ctb +vEV +vbT +tcP +dPF +hVF +dJe +aMI +nPR +nIC +qUM +ssD +nKa +nKa +nKa +tBn +fIX +iTg +cHJ +wxL +lbf +vOm +hTS +oZP +mXK +kya +jQb +rTK +rTK +lVh +lWn +skE +btK +wIx +eav +dgy +dgy +dgy +dgy +dgy +eav +oCv +glB +oCv +ufn +vio +jJW +vio +ufn +vqb +wWt +nxF +piD +uJn +nBE +kzt +khD +tir +tir +tir +tir +kTy +mWp +hoJ +hoJ +hoJ +hoJ +oqK +tgG +tgG +tgG +iyc +tgG +tgG +uUC +khD +cpE +wEK +tOe +uJI +xhQ +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +wcH +wcH +rZq +kWZ +mkt +iWk +fXb +suH +gtY +fmJ +oal +suH +yhv +tqy +wfA +wfA +acL +wfA +wfA +xTb +qzR +fJK +fJK +fJK +ksa +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(157,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +vyg +bFZ +psO +lfw +bLy +rgN +oIJ +wFn +prE +pna +bWl +gMW +ufQ +duj +cKn +ejc +aVV +tNM +sCj +ifE +kzv +fIw +vEV +tcP +qZu +khZ +uLo +iJv +pzc +teQ +wTy +eoB +tUg +oZf +uWa +cgC +fIX +biI +neW +wxL +lbf +vOm +hTS +xRd +mXK +kya +aZq +rTK +rTK +pvN +lWn +nVN +lER +eYU +eav +aIk +kiw +wWf +kiw +exw +eav +jun +xgU +eJo +ufn +vjx +uUp +qyD +ufn +xyZ +jRZ +nxF +dCC +wTN +nBE +xva +khD +mRQ +ndE +boX +mbP +khP +ozh +iyG +evv +jkd +evv +svX +vSj +kFf +ngK +oBQ +xVL +vtT +jnb +khD +fSM +rCW +wPP +mtc +tQa +tWN +uoo +uoo +uoo +fex +uoo +uoo +uoo +fex +uoo +uoo +uoo +fex +uoo +uoo +uoo +fex +uoo +uoo +uoo +fex +uoo +uoo +uoo +fex +uoo +uoo +uoo +fex +uoo +xEe +cpH +gOE +gOn +gOn +wXE +vpA +suH +dNx +lyV +dIp +suH +ghg +hdQ +nMq +fJK +yia +fJK +fJK +okm +euX +nRj +fJK +fJK +uoo +uoo +oIb +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(158,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +xXP +fKj +fKj +fKj +fKj +cDv +wtF +wtF +wtF +wtF +xXP +xXP +xXP +mZc +pIH +psO +gOA +bLy +bLy +bWl +bWl +bWl +bWl +bWl +bEs +voq +htX +nIx +xtn +fgj +fgj +fgj +fgj +fgj +fgj +tcP +tcP +fzW +auK +dJe +dxk +dxk +dxk +dxk +dxk +dxk +dfy +uWa +aRJ +fIX +xkY +cHJ +wxL +lbf +iuK +hTS +iqR +mXK +sLK +aZq +aZq +tuk +aZq +lWn +fTg +btK +cuE +xMR +xcK +vTy +aTh +nvX +iIZ +eav +cDA +iGf +hVl +fZy +nHi +ocj +kNv +ufn +hsr +ssd +nxF +apA +cBH +nBE +sMe +khD +nzW +bpr +boX +kSX +eny +mWp +hoJ +eWa +lNp +jXr +cvj +eNx +jBF +xwT +oNi +jui +jui +aNM +uer +oxn +iye +bZG +psE +qvp +tKm +vyP +vyP +vyP +tKm +vyP +vyP +vyP +tKm +vyP +vyP +vyP +tKm +vyP +vyP +vyP +tKm +vyP +vyP +vyP +tKm +vyP +vyP +vyP +tKm +vyP +vyP +vyP +tKm +vyP +oVm +qWf +qsF +mmf +fAL +pyA +iZr +hvE +sLg +ruu +lst +clr +vPn +wcj +nKb +fJK +jWK +gpz +fJK +gYS +mIh +teE +fJK +fJK +iDN +xpD +wxU +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(159,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +ksa +xXP +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +xXP +ksa +fKj +qgu +imo +evf +cDv +mNW +rPn +mNW +wtF +ksa +ksa +ksa +vyg +lyP +psO +gOA +lca +cFG +xXP +jGJ +kmq +diJ +pZR +bNU +goA +cNi +rzG +lIQ +ntc +eQI +ntc +ctP +fhD +uUN +xXP +sPX +fzW +auK +dJe +dxk +vRi +wWv +tRE +gpt +sYI +fPr +uWa +daQ +uNz +nVy +mIl +wxL +lbf +vOm +hTS +ycB +mXK +xiA +daj +drJ +erV +fxy +lWn +xRT +kqn +ykJ +ddL +fYx +pxg +pOp +dHz +vVQ +eav +pkf +iGf +qNM +fZy +fgI +vvV +buz +ufn +bde +vMp +nxF +tco +xHA +nBE +dvd +khD +pFU +mUF +uHM +nuY +fJd +ugi +rfz +hoJ +hoJ +hoJ +khD +wFI +sdE +nBE +gnj +aRH +rcc +fdC +khD +ueo +ref +agx +oIF +xsa +sbI +uoo +uoo +uoo +xeH +oLY +uoo +uoo +nfc +uoo +uoo +uoo +nfc +uoo +uoo +uoo +nfc +uoo +uoo +uoo +nfc +uoo +uoo +uoo +nfc +uoo +uoo +uoo +nfc +uoo +dCt +kPa +mlb +eWG +fIl +fIl +wDR +suH +gGG +nyI +alf +suH +pSt +jAO +qLG +fJK +gim +fJK +fJK +okm +oAW +ivj +fJK +fJK +uoo +uoo +oIb +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(160,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xXP +ksa +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +hOU +sxx +gXk +cDv +sZV +mNW +sZV +wtF +ksa +ksa +ksa +vyg +gSG +psO +gOA +gOA +maL +xXP +jGJ +dPy +vDy +nhn +img +luX +jrv +rnx +xwx +xwK +bfz +iNZ +thT +wxo +uUN +xXP +sYk +fzW +auK +dJe +dxk +lLi +fOT +vkB +wOt +mog +eDN +uWa +hxv +jyS +nVy +cHJ +wxL +lbf +vOm +hTS +tLN +dWN +ydu +vPF +uwq +rjn +mHp +wup +eTx +oqN +cuE +xMR +bNL +xFY +xFY +enf +ieL +eav +sOp +iGf +tNo +fZy +ubz +vvV +buz +ufn +tHB +iDK +nxF +vgJ +thD +nBE +iPu +khD +tIp +eIP +boX +tzg +eny +mWp +hoJ +vtr +lNp +hBi +khD +nBE +nBE +nBE +lYp +nBE +nBE +yfn +khD +rCH +qfv +oha +uJI +xhQ +ksa +ksa +ksa +ksa +ksa +vRc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +wcH +wcH +rZq +gCF +pLS +vTc +wml +suH +nSF +gQK +uTH +suH +puZ +poU +aVR +aVR +bop +aVR +aVR +dnp +kuk +fJK +fJK +fJK +ksa +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(161,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +xXP +fKj +fHY +fKj +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +xxX +gXk +cDv +oMK +oMK +oMK +wtF +ksa +ksa +ksa +vyg +bFZ +psO +gOA +jeu +dNK +xXP +jGJ +kmq +lgB +uzn +dQx +uzn +xxr +mri +dnd +ntc +ntB +ntc +ebO +vJe +uUN +xXP +vdX +fzW +auK +dJe +dxk +flU +sQL +lpk +eoA +sYI +dej +tou +pJV +xGa +pOF +mIl +wxL +lbf +iaE +lWn +hqV +rtY +roF +ppx +mxr +phW +jgZ +lWn +cKk +xOe +tfG +eav +nNK +rcu +fYh +rcu +tUG +eav +aDA +gmD +tNo +fZy +iqm +oKM +bYf +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nSt +khD +rEJ +uDY +boX +lnw +ymb +ghH +exD +evv +jkd +evv +khD +lld +jOx +jOx +ins +gcH +nBE +cbj +khD +khD +xhQ +xhQ +xhQ +xhQ +uoo +uoo +uoo +uoo +uoo +vRc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +byC +rZq +rZq +rZq +rZq +oyp +suH +suH +ffw +suH +suH +fJK +hnH +gGI +cGc +qEB +cGc +alJ +pRb +nXR +fJK +fJK +uoo +uoo +uoo +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(162,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +ksa +xXP +ksa +ksa +ksa +ksa +ksa +cmn +nUZ +ajt +jto +vKs +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +knW +cDv +owu +pHn +owu +wtF +wtF +xXP +xXP +mZc +mZc +qOR +mZc +mZc +bLy +bLy +lzu +lzu +lzu +lzu +awI +lzu +tcP +wsy +tcP +fgj +fgj +fgj +fgj +fgj +fgj +oIP +oIP +fzW +auK +ptd +iaT +iaT +iaT +iaT +iaT +iaT +rNx +aSF +rNx +cve +cve +iQo +wxL +lbf +nBE +khD +khD +khD +rfY +khD +khD +khD +khD +khD +nBE +qnZ +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +pGz +dCc +ptX +ufn +mFY +gwa +xTh +nBE +nxW +nxW +wyS +urn +kBn +xcO +vBP +khD +khD +khD +khD +khD +khD +khD +khD +khD +khD +khD +khD +quP +czU +kIt +ins +lwL +nBE +jJr +jOx +nBE +rms +lKe +xpD +xpD +xpD +xpD +xpD +nuA +ksa +vRc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +pbE +iHT +dnV +hYY +uQg +rHa +kyY +pbE +fJK +fJK +fJK +fJK +nTp +fJK +fJK +fJK +fJK +fJK +fJK +ksa +ksa +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(163,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +ksa +fKj +fKj +fKj +fHY +fHY +fHY +fKj +fKj +feX +tdv +aaN +cDv +pwn +wSl +abS +wSl +pwn +arL +wSl +wSl +rIN +arL +ohk +wSl +abS +wSl +ohk +wtF +xsC +xsC +gKk +hIe +bIc +bii +wtF +ksa +ksa +vyg +uKy +psO +uui +puX +bLy +uPs +wNx +emX +emX +apU +lNO +emX +emX +emX +klm +qcU +emX +apU +emX +emX +lEZ +emX +emX +crV +auK +dJe +iaT +vvu +blQ +hBK +sVO +kuJ +wxl +sSc +vvQ +oBr +cve +bbO +wxL +mOH +nBE +qmb +mhc +vLk +mhc +nBE +rHt +grF +mhc +nBE +fZp +gNh +wID +nBE +cnU +byX +nep +mhc +woy +nBE +nBE +aJC +nBE +nBE +nBE +qFc +nBE +nBE +mhc +mhc +vLk +mhc +mhc +mhc +vBP +kIt +mhc +ydO +mhc +grF +nBE +mhc +vLk +grF +rHt +byX +nBE +mhc +qrH +mhc +ins +syI +iuo +aAF +jOx +mst +rms +xpD +xpD +xpD +xpD +xpD +xpD +nuA +ksa +vRc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +pbE +aBC +jht +dNX +usR +jBc +fsF +pbE +fJK +fJK +fJK +fJK +kJa +fJK +fJK +fJK +fJK +fJK +ksa +ksa +fdt +fdt +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(164,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +xXP +fKj +fKj +feX +feX +feX +hOU +feX +feX +feX +feX +ajt +mCg +cDv +dYt +dYt +gmo +dYt +dYt +dYt +dYt +dYt +dYt +dYt +dYt +dYt +gmo +dYt +dYt +wtF +dwq +bIc +bIc +dzj +bIc +hcu +wtF +ksa +ksa +vyg +gOA +psO +fJl +fJl +fRp +eJg +nVs +nVs +nVs +nVs +nVs +nVs +nVs +mZG +nVs +nVs +nVs +nVs +nVs +nVs +nVs +nVs +nVs +nVs +auK +dJe +iaT +tpr +sKj +bjY +sKj +lpm +sKj +gfK +sKj +sKj +lFJ +mIl +wxL +fEG +dHb +ins +ins +ins +ins +tzV +ins +ins +ins +arR +gNh +yly +gNh +arR +ins +ins +ins +aIN +ins +lvg +ins +ins +ins +ins +ins +ins +ins +lvg +ins +ins +ins +ins +ins +ins +eFs +kJA +kJA +kJA +kJA +kJA +tzV +kJA +kJA +kJA +kJA +kJA +tzV +kJA +pKQ +pKQ +fHo +tpC +nBE +nBE +cbj +nBE +tDa +tDa +tDa +tDa +dUm +dUm +xpD +nuA +ksa +vRc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +pbE +pbE +cfm +ycf +dhz +wHJ +pbE +pbE +fJK +fJK +fJK +fJK +sDi +fJK +fJK +fJK +fJK +ksa +ksa +fdt +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(165,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +ksa +fHY +feX +feX +cDv +cDv +cDv +cDv +cDv +cDv +cDv +fSG +cDv +cDv +dYt +dYt +kEN +tVD +tVD +tVD +tVD +uRW +dYt +dYt +dYt +tVD +lmK +dYt +dYt +wtF +gpi +wPA +rph +xTL +lNG +iuF +wtF +ksa +ksa +vyg +gOA +psO +vcn +gOA +bLy +xmm +cOH +nJK +oRg +sMk +sMk +sMk +caF +sMk +sMk +sMk +sMk +sMk +oRg +nJK +sLG +iMo +oym +ijM +wSN +iBE +iaT +wim +wfM +wfM +wfM +rGT +rGT +vTP +dKl +dKl +nVA +bOJ +wxL +pUp +nBE +rHt +mhc +ydO +grF +nBE +mhc +mhc +grF +nBE +lPf +jVd +hpY +nBE +byX +nep +mhc +mhc +tpC +nBE +rHt +lRi +tpC +vLk +nep +mhc +tpC +nBE +grF +mhc +mhc +grF +rHt +xcO +dbl +dbl +tpC +mhc +vLk +mhc +nBE +grF +mhc +tpC +mhc +grF +nBE +jLa +dbl +grF +tnQ +mhc +nBE +utT +nVa +say +nVa +nVa +nVa +nVa +mnl +dUm +dEL +nuA +uoo +vRc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +uoo +uoo +pbE +pbE +pbE +pbE +pbE +pbE +pbE +tOn +tOn +fJK +fJK +fJK +fJK +fJK +tOn +ksa +ksa +fdt +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(166,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +fHY +fHY +hOU +hOU +cDv +dYt +vfw +dYt +wtF +rgV +xCP +sfh +gzR +wtF +yiC +dYt +dYt +dYt +rpt +pBX +tVD +dYt +dYt +kQP +iJI +tVD +dYt +dYt +kPJ +wtF +nNV +rph +rph +dzj +bIc +aMh +wtF +ksa +ksa +vyg +gOA +psO +jbM +ybw +dWS +dWS +dWS +dWS +dWS +wGw +wGw +wGw +wGw +gQX +wGw +wGw +wGw +wGw +dWS +dWS +dWS +dWS +dWS +dWS +run +dWS +dWS +svg +hHy +oAC +hHy +bbl +hHy +hHy +hHy +hHy +lFJ +mIl +qkx +lTH +nBE +nBE +onZ +nBE +nBE +nBE +nBE +onZ +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +onZ +nBE +nBE +nBE +vrc +nBE +nBE +nBE +mOv +nBE +nBE +nBE +onZ +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +onZ +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +tnQ +rHt +nBE +qtQ +hTn +hTn +ffz +ffz +ffz +ffz +amZ +tDa +rWe +nuA +ksa +vRc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +ksa +ksa +ksa +uoo +ksa +uoo +ksa +fJK +fJK +fJK +ksa +uoo +ksa +fdt +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(167,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +xXP +fKj +feX +hOU +cDv +cDv +dYt +dYt +dYt +wtF +vUu +ntI +sfh +jKn +wtF +kLj +kLj +kLj +kLj +kLj +kLj +arJ +vaG +kLj +kLj +kLj +arJ +kLj +kLj +kLj +wtF +rJM +rph +bIc +fFr +doR +sEO +sEO +sEO +sEO +bLy +hYH +psO +qzh +cpO +jxy +ffx +iLB +tKX +dWS +pYv +uob +xyQ +fuh +ejK +cMv +krE +bzJ +irR +dWS +ffx +tzc +dhE +jxy +sKY +grB +dsR +dWS +vvu +blQ +emu +fYu +cjf +dIb +vmA +frS +dYe +cve +cNz +qkx +lTH +nBE +vDK +cVY +byX +nBE +cnU +mhc +sZi +tpC +mhc +nxW +nBE +nxW +mhc +tLM +nBE +fuc +mhc +mhc +nBE +nep +ins +aAL +nBE +rUL +mhc +nep +nBE +cnU +mhc +byX +kLf +wfI +nBE +vsb +nBE +qqi +nIN +aXg +fJv +tqd +nBE +jwt +ftr +dEH +nBE +cnX +mhc +mhc +nBE +tnQ +tfN +nBE +mjA +ffz +hTn +ffz +ksM +uBL +fkC +amZ +tDa +xpD +nuA +ksa +vRc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +fdt +ksa +uoo +ksa +uoo +hKs +uoo +ksa +uoo +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(168,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +fHY +aEc +hOU +cDv +dYt +dYt +dYt +vLI +dIY +vUu +qpO +sfh +eTt +gOv +deQ +deQ +deQ +vmu +deQ +deQ +kVq +deQ +deQ +deQ +deQ +tgl +deQ +deQ +deQ +gOv +bIc +gAj +eTt +fFr +cTs +sEO +gTp +eDg +tsi +bLy +lnm +kQj +aRz +vrG +jxy +qHp +sKY +bUg +dWS +dWS +dWS +dWS +dWS +dWS +dWS +dWS +dWS +dWS +dWS +iLB +iLB +iLB +jxy +kWT +grB +iLB +dWS +dWS +dWS +dWS +dWS +dWS +dWS +dWS +dWS +dWS +dWS +eWw +qkx +cyB +nBE +mhc +mhc +sZi +tFb +mhc +mhc +sgJ +dsf +mhc +rHt +tFb +mhc +mhc +mhc +tFb +mhc +kIt +mhc +tFb +mhc +liM +mhc +tFb +woy +tpC +mhc +tFb +mhc +mhc +mhc +mhc +mhc +nBE +nBE +nBE +vJw +dgS +kDm +lNF +dgS +vsB +czU +czU +mhc +rrG +mhc +woy +bIt +nBE +tnQ +lhd +esk +bRg +rsR +cCP +cuK +qGs +qGs +kzi +mxy +tDa +xpD +nuA +ksa +vRc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +ksa +uoo +ksa +uoo +xpD +uoo +ksa +uoo +ksa +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(169,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +xXP +fHY +eVi +jhj +cDv +hRe +dYt +wpO +uAP +nYl +cYM +rEL +kRS +aAM +bXQ +xRJ +fnI +xRJ +xRJ +fnI +xRJ +xRJ +fnI +xRJ +xRJ +fnI +xRJ +xRJ +fnI +xRJ +peN +qjq +qjq +rYV +hyd +nJb +vhh +sos +cot +aEg +kNH +mvc +saI +dQL +dQL +aGG +wic +wjU +iLB +jxy +nNJ +iLB +xXC +jxy +bUg +iLB +bUg +iLB +lKO +jxy +iLB +sKY +iLB +jxy +iLB +pqw +wiD +kiu +wiD +wiD +wiD +wiD +wiD +wiD +wiD +wiD +szY +lJA +gAC +nuS +lTH +nBE +wSt +dsf +cnU +nBE +cnU +mhc +mhc +qFP +mhc +rHt +nBE +uru +kpJ +urn +nBE +aAL +dbl +dbl +nBE +raC +ins +nep +nBE +mhc +nep +raC +nBE +cnU +mhc +byX +wfI +kLf +nBE +vsb +nBE +hpW +hQP +pbf +hkj +kxp +nBE +aaX +czU +dEH +nBE +cnX +mhc +mhc +nBE +ndM +mhc +cbj +ivt +ffz +ffz +ffz +qGs +qGs +kzi +btg +tDa +xpD +nuA +uoo +vRc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fdt +fdt +fdt +fdt +oIb +wxU +oIb +fdt +fdt +fdt +fdt +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(170,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +fHY +vTl +hOU +cDv +dYt +dYt +dYt +dYt +dBo +lsX +iqb +feY +lNG +gOv +jWq +jWq +jWq +iUz +jWq +jWq +vbB +jWq +jWq +jWq +jWq +gTL +jWq +jWq +jWq +gOv +bIc +gAj +lNG +fFr +lns +sEO +wgM +iaL +liB +bLy +aRz +aRz +aRz +aRz +jxy +nNJ +mnA +wic +cPj +wic +wic +wic +cPj +wic +wic +waF +wic +wic +cPj +wic +wic +wic +cPj +wiD +eqJ +iLB +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +pNi +nte +cem +nBE +nBE +onZ +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +vrc +nBE +nBE +nBE +onZ +nBE +nBE +nBE +onZ +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nrJ +nBE +nBE +nBE +nBE +nBE +nBE +ndM +mhc +tEm +wGg +cuK +xct +fUU +qGs +qGs +kzi +btg +tDa +xpD +nuA +ksa +vRc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(171,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +xXP +fKj +feX +hOU +cDv +cDv +dYt +dYt +dYt +wtF +vUu +rDX +mIP +jZt +wtF +jLQ +kLj +kLj +kLj +kLj +kLj +arJ +vaG +kLj +kLj +kLj +arJ +kLj +kLj +nax +wtF +bIc +ifN +jXV +fFr +hqM +sEO +sEO +sEO +sEO +bLy +aIr +fZT +kpn +bNi +jxy +xXC +ffx +oed +jxy +iLB +sKY +oed +jxy +iLB +oxX +umd +iLB +bUg +jxy +bUg +iLB +tKX +jxy +ffx +xyi +ffx +jxy +tWR +fiS +bPd +bPd +bPd +bPd +jhJ +lWJ +bPd +pmV +lLd +nte +lTH +nBE +rcp +hat +hat +bIk +nBE +uvm +yeg +sHP +lyR +kYU +bQY +kjD +dzR +jKu +jKu +jKu +jRY +oVA +nBE +nep +ins +rUL +nBE +sZj +jOx +nep +nBE +bjf +nQN +vmh +nBE +vmh +kHg +bjf +nBE +bCg +nBE +qBz +nBE +fLO +nBE +oNF +vkc +lut +nBE +dbl +rQv +rQv +nBE +ndM +mhc +tEm +etn +ffz +ffz +ffz +iAU +lLG +gli +uNS +tDa +xpD +nuA +ksa +vRc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(172,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +fHY +fHY +hOU +hOU +cDv +dYt +cEx +dYt +wtF +rgV +qOc +xTL +bHS +wtF +qNL +dYt +dYt +dYt +cOo +iwr +tVD +dYt +dYt +iwO +wgR +tVD +dYt +dYt +uKL +wtF +wDY +ifN +ifN +dzj +bIc +wrt +wtF +ksa +ksa +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +ipF +jxy +jxy +jxy +jxy +lLh +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +gIG +gIG +bPd +bPd +bPd +iWw +iWw +iWw +gWL +pmV +lLd +nte +jCx +nBE +fAn +mDR +dgP +tpC +nBE +kdy +mtN +jvt +lpc +yfG +bQY +kHh +vpL +azW +azW +azW +fep +chy +nBE +mhc +ins +tpC +nBE +raC +vLk +sZi +nBE +sAN +kJo +fbT +nBE +qqC +ipp +sAN +nBE +dPO +nBE +fdb +nBE +kkt +nBE +dbl +qrH +czU +dqt +czU +czU +czU +tbo +ndM +mhc +tEm +etn +ffz +ffz +ffz +ffz +ffz +ffz +dYS +tDa +xpD +nuA +ksa +vRc +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(173,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +ksa +fHY +feX +feX +cDv +cDv +cDv +cDv +cDv +cDv +cDv +jhk +cDv +cDv +dYt +dYt +dnc +tVD +tVD +tVD +tVD +jGx +dYt +dYt +dYt +tVD +vse +dYt +dYt +wtF +rnm +bIc +ifN +qds +eTt +wgd +wtF +ksa +ksa +jxy +niU +iLB +xXC +jxy +cFj +enc +uWY +moy +jxy +erQ +iLB +soc +nnv +kWT +iLB +umd +ybe +bAh +jxy +cMB +wsT +fgE +hMB +kpP +oij +iXR +sfC +gIG +gIG +gIG +pVZ +wIr +ovt +wIr +pVZ +wIr +pmV +lLd +nte +lTH +nBE +cKS +iqM +biu +pzL +nBE +uFH +mtN +ovo +nhL +nAc +bQY +gkM +vpL +chg +det +sAH +fep +lvR +nBE +aAL +hbb +mhc +tbo +mhc +jOx +raC +nBE +imG +mhc +mhc +sxS +mhc +mhc +sxi +nBE +mhc +kIt +aXg +mhc +jDj +nBE +rtJ +gmT +iSr +nBE +cnU +mhc +aAL +nBE +ndM +mhc +cbj +etn +ffz +ffz +ffz +ffz +aLO +uiS +hgw +dUm +xpD +nuA +uoo +xfv +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(174,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +xXP +fKj +fKj +feX +feX +feX +hOU +feX +feX +feX +feX +iIy +uio +cDv +dYt +dYt +gmo +dYt +dYt +dYt +dYt +dYt +dYt +dYt +dYt +dYt +gmo +dYt +dYt +wtF +rpP +bIc +bIc +dzj +bIc +cZL +wtF +ksa +ksa +xWh +bUg +iLB +xXC +jxy +uZj +ulm +ulm +fxu +jxy +crI +iLB +soc +nnv +iLB +iLB +umd +iLB +vZd +jxy +nsA +bva +sqZ +rcG +jVE +bva +sfC +sfC +ben +oTd +gIG +iTo +qud +pKO +qud +iTo +oQE +lCw +lLd +ewB +lTH +nBE +cnU +klr +nBE +nBE +nBE +vBE +oWu +vBE +vBE +vBE +bQY +kjD +cua +iUt +psF +dmm +xob +nCY +nBE +kIt +ins +mhc +nBE +sZi +ydO +nep +nBE +qqC +mhc +fbT +nBE +sAN +nQN +fbT +nBE +uKp +czU +czU +vkc +czU +tNd +czU +lNF +mhc +nBE +nBE +tOb +nBE +nBE +ecg +hpU +ukk +qvM +qdj +qdj +qdj +ffz +nKn +nBE +nBE +nBE +xpD +nuA +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(175,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +ksa +fKj +fKj +fKj +fHY +fHY +fHY +fKj +fKj +kQq +dmt +rGH +cDv +oak +rHD +tSd +rHD +oak +gLB +rHD +tSd +rHD +gLB +mhS +rHD +tSd +rHD +mhS +wtF +bIc +bIc +auF +auW +pGP +bYD +wtF +ksa +ksa +xWh +iRy +gxx +iLB +jet +enc +ulm +ulm +vMt +gXK +iLB +aOz +iLB +bTN +iLB +kJI +eGM +wiD +wic +tRo +czu +ovM +ovM +neG +bva +nIW +sfC +tWR +gIG +vkj +gIG +gIG +vBG +qOu +gIG +gIG +gIG +lCw +lLd +ewB +lTH +nBE +nBE +nBE +nBE +sjy +fwT +ccp +upb +ccp +fwT +ryl +bQY +shx +bQY +tvQ +eyN +tvQ +bQY +shx +nBE +mhc +ins +nep +nBE +raC +jOx +sZj +nBE +myj +tpC +myj +nBE +sUx +ipp +myj +nBE +hfh +tQl +tpC +vje +nTa +nBE +qWn +eiO +kjO +nBE +mhc +woy +mhc +nBE +ndM +fei +nBE +vrW +dbS +kFu +cix +dbS +huH +nBE +vsb +nBE +xpD +nuA +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(176,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +ksa +xXP +ksa +ksa +ksa +ksa +ksa +ksa +fHY +kQq +dmt +hOU +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +uIQ +cDv +owu +poD +owu +wtF +wtF +xXP +xXP +xWh +iLB +rAk +iLB +jxy +vmC +ulm +ulm +fqH +jxy +iLB +iLB +iLB +nnv +nNJ +iLB +iLB +nNJ +ruh +jxy +pHX +ucv +bva +rov +ovM +ovM +gZc +qDZ +qDZ +ocy +qDZ +qDZ +qra +qDZ +efW +gIG +gIG +lCw +lLd +xFr +lTH +qnE +kbE +gvb +ayi +sjy +ccp +iRe +upb +iRe +ccp +ryl +lAc +uVC +vNq +lAZ +crt +lAZ +vNq +rOR +nBE +nBE +hCP +nBE +nBE +nBE +twS +nBE +nBE +nBE +rKX +nBE +nBE +nBE +gJJ +nBE +nBE +nBE +nBE +vaW +nBE +nBE +nBE +nBE +nBE +nBE +nBE +pch +aVI +vRh +nBE +ndM +mhc +nBE +hEy +gEh +nvr +uLE +urZ +rBa +nBE +nBE +nBE +xpD +nuA +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(177,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +xXP +fKj +fHY +fKj +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +hOU +qss +hOU +cDv +pyH +eAg +hsp +wtF +ksa +ksa +ksa +jxy +tzc +aQC +bAh +jxy +nft +vMt +enc +rXM +jxy +sWF +pOz +cNp +nnv +niU +tKX +tKX +uyw +ruh +jxy +flJ +ucv +xIH +rhs +bva +gYL +sfC +qAz +knz +vkj +gIG +gIG +drH +qDZ +gIG +gIG +gIG +lCw +lLd +xFr +lTH +baI +psg +ayi +ayi +sjy +ccp +iRe +upb +iRe +ccp +ryl +lAc +omZ +lAZ +owN +wzb +vqc +lAZ +rOR +nBE +qva +pRD +xVi +nBE +spb +mhc +nep +nBE +pCb +mhc +bcw +ppN +bcw +bcw +gxP +nBE +ess +hPf +qcT +nDn +tzs +nBE +nue +nue +nue +nBE +nBE +nBE +nBE +nBE +ndM +mhc +nBE +lKt +kwT +okW +qrN +vpe +mFR +nBE +vsb +nBE +xpD +nuA +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(178,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xXP +ksa +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +fKj +hOU +hOU +hOU +cDv +dgH +wML +pTE +wtF +ksa +ksa +ksa +jxy +jxy +dBr +jxy +jxy +jxy +ipF +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +gSA +jxy +sfC +tJF +sfC +sfC +edQ +sfC +sfC +sfC +knz +oTd +gIG +xEj +wIr +chW +wIr +xEj +xNb +lCw +lLd +xFr +lTH +baI +koo +ayi +ayi +ayi +hsT +ayi +uaC +ayi +nMn +ayi +aUr +lAZ +nxm +gJO +deF +adc +qui +fiq +nBE +kWI +kxR +pND +nBE +aAL +woy +sAY +nBE +aAL +mhc +jOi +hdl +aPy +mhc +tpC +nBE +wkM +mhc +sOh +tpC +mhc +nBE +hpY +mhc +oMB +nBE +cnU +mhc +nxW +nBE +ndM +rHt +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +xpD +nuA +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(179,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +ksa +xXP +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +xXP +ksa +fKj +nnE +vqd +ilM +cDv +jdJ +kIn +aky +wtF +ksa +ksa +ksa +jxy +bqd +vjj +nta +jxy +uZf +iLB +iLB +pBc +bDa +jxy +mld +oed +veJ +gJI +frv +jxy +tbY +oof +jxy +oga +ucv +kie +sfC +pDJ +jWN +rjf +ucr +knz +gIG +gIG +iLG +qud +kqw +qud +iLG +qud +pmV +lLd +xFr +yaj +baI +vEu +ayi +uaC +uaC +uaC +uaC +uaC +uaC +uaC +uaC +vqo +jpg +jpg +fpY +uAL +dDp +jpg +jpg +iYH +kiM +kxR +kiM +hCN +kxR +taA +kxR +rng +cNN +rxk +xOy +xOy +xOy +bUS +cNN +fLJ +nhq +kiM +sWO +kiM +gHS +kXL +kxR +taA +jli +fro +ins +ins +ins +iWu +ndM +ins +ins +ins +uyr +uyr +uyr +syI +ewE +iuo +fwB +mst +xpD +nuA +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(180,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +xXP +fKj +fKj +fKj +fKj +cDv +wtF +wtF +wtF +wtF +xXP +xXP +xXP +jxy +cdE +ogd +smr +jxy +cye +jSC +bWq +jSC +jSC +sLP +jSC +jSC +jSC +iRq +iLB +gXK +fRx +ruh +wYc +ucv +ucv +qgx +sfC +sfC +sfC +sfC +sfC +knz +gIG +bPd +bPd +bPd +lIF +xFJ +xFJ +grO +pmV +wEs +xFr +sfj +baI +nLC +ayi +uaC +jwu +ccp +jwu +ccp +xgl +bIQ +kSU +lAc +sLz +lAZ +xEM +ttr +wfg +lAZ +mSO +nBE +lQB +kxR +iNS +nBE +ess +sAY +kIt +nBE +mhc +lRi +rJz +juU +noM +bcw +nJc +nBE +ess +tpC +mhc +mhc +woy +nBE +jUC +hpY +hpY +nBE +mhc +uGk +mhc +nBE +owt +xcO +mhc +ins +mhc +xcO +hGa +xuN +oMB +nBE +jJr +nBE +xpD +nuA +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(181,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +xXP +ksa +ksa +ksa +jxy +doA +bqH +qIN +jxy +fXd +tpn +jYv +anM +iuT +jxy +xlk +jNa +iLB +exj +vsU +jxy +nNJ +ruh +jxy +aUh +fMC +eNN +sfC +cSx +cSY +cSx +sms +wSC +qWj +bxE +bPd +bPd +lIF +bTT +sbL +bPd +pmV +lLd +xFr +lTH +qnE +eQN +ayi +uaC +jwu +ccp +jwu +ccp +xgl +bIQ +kSU +lAc +oax +npz +bMe +tcH +vbi +vTz +qYN +nBE +pZa +kxR +naG +nBE +sAN +tpC +sAN +nBE +mhc +cNN +bcw +yaQ +mhc +pCb +nep +nBE +xbH +sAY +mhc +eLl +jzd +nBE +aAL +mhc +grF +nBE +nBE +xSv +nBE +nBE +owt +nBE +nBE +vYg +nBE +nBE +jOx +tpC +xcO +nBE +cbj +nBE +xpD +nuA +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(182,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +xXP +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +ipF +jxy +jxy +jxy +jxy +osE +jxy +jxy +sfC +sfC +sfC +cSx +oHe +cSx +sms +sms +pmV +pmV +rYk +lCw +hFU +pmV +pmV +pmV +pmV +sjp +xFr +nBQ +qnE +qnE +vuz +uaC +ccp +ccp +ccp +ccp +bvm +bIQ +twO +gji +gji +gji +gji +nBE +nBE +nBE +nBE +nBE +nBE +wgn +nBE +nBE +nBE +nBE +nBE +nBE +nBE +pmQ +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +mRD +nBE +nBE +nBE +nBE +ulf +nBE +nBE +iYW +rMV +mhc +nBE +ruW +nBE +byX +ins +byX +nBE +jOx +mhc +hbt +cbj +ksa +ksa +ksa +ksa +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(183,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +jxy +wri +oed +ybe +jxy +bAF +dcA +daY +daY +daY +jxy +sKo +tvo +vUf +gOs +iLB +dUM +jyf +jxy +iLB +ruh +vZd +jxy +bix +uLz +wXz +vXz +vXz +vXz +gGX +sms +mjw +rEE +bPd +gHr +lIF +tVY +pVJ +lCw +azn +pGN +xFr +xYE +ohV +baI +ayi +uaC +wCD +ofJ +raO +tIw +gji +rer +gji +gji +jCY +aYa +iHk +nBE +dbl +mhc +byX +nBE +grF +lRi +dbl +nBE +hpY +baP +hpY +mhc +mFK +tbn +pyW +xuN +mhc +dVZ +mhc +nBE +xpF +aRH +xWS +gHc +pFJ +nBE +xbH +mhc +xbH +nBE +dsf +nDw +mhc +frw +bdg +hBR +tAK +prY +mhc +tbo +mhc +woy +fCw +cbj +xpD +uoo +xXP +xXP +xXP +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(184,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xWh +iLB +ruh +ruh +muy +mGu +kod +iFK +kjC +tAr +muy +ruh +ruh +kPL +vfK +ruh +ruh +ruh +aij +ruh +ruh +ruh +ezZ +pgh +pgh +eUW +eUW +eUW +eUW +mfd +sms +sOo +bPd +bPd +bPd +lIF +bPd +bPd +lCw +lLd +wdR +xFr +wdR +yaj +baI +ayi +uaC +ccp +ccp +ccp +ccp +lGt +vyZ +gUp +gji +uir +qaG +suE +nBE +dbl +mhc +mhc +tbo +mhc +lRi +dbl +nBE +woy +via +miz +usg +iGh +iZD +tZd +woy +mhc +mvh +mhc +nBE +mTR +wMo +wMo +wMo +wMo +nBE +xbH +mhc +iOG +nBE +mhc +mhc +dsf +nBE +mhc +nBE +mhc +ndM +byX +nBE +ydO +mhc +dCB +cbj +ksa +ksa +ksa +ksa +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(185,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +fEP +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +xXP +xWh +iRy +ruh +iLB +jxy +vMC +daY +nZa +gRa +daY +jxy +wpZ +iLB +jyf +gOs +tKX +iLB +oed +jxy +ffx +iLB +sKY +jxy +iqQ +pgh +pgh +pgh +pgh +pgh +pgh +vKu +lIF +lIF +lIF +lIF +lIF +lIF +lIF +flM +oOy +wxL +xFr +qYz +fEJ +cJi +ayi +uaC +ayi +ayi +nMn +ccp +jJz +bQk +cdl +gji +bxx +rhE +nmY +nBE +dbl +mhc +grF +nBE +byX +lRi +grF +nBE +fsH +lPf +nep +woy +lPf +lnu +usg +nep +hpY +hpY +mhc +wsv +mhc +wMo +mBa +lrm +vpn +nBE +sAY +mhc +mhc +nBE +nBE +xSv +nBE +nBE +kIt +nBE +nBE +pyZ +nBE +nBE +jwC +nep +xcO +nBE +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(186,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +uoo +ksa +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +ksa +uoo +ksa +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xWh +iLB +ruh +bnz +jxy +jxy +jxy +trQ +jxy +jxy +jxy +jxy +ipF +jxy +jxy +jxy +xvY +jxy +jxy +jxy +xvY +jxy +jxy +fnH +pgh +gJi +sWX +bXP +eUW +eUW +xYi +gHr +bPd +mbo +vzy +nrz +bPd +wZI +pmV +qcA +wdR +jCA +wdR +cID +qnE +yda +uaC +uaC +oSp +fCb +upb +kwG +krH +gSz +kOa +vOV +vOV +nsk +nBE +nBE +rot +nBE +nBE +nBE +wgn +nBE +nBE +nep +iGh +mhc +nBE +nBE +gNh +nBE +nBE +tZd +foq +hpY +nBE +jOi +wMo +mBa +tPw +plH +nBE +jbY +mhc +pjs +nBE +dbl +mhc +byX +nBE +mhc +nBE +dbl +ndM +tpC +nBE +mhc +jOx +oXS +cbj +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(187,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +oAN +icE +icE +icE +icE +icE +icE +icE +icE +icE +icE +icE +icE +oAN +uoo +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +jxy +bAh +ruh +oed +jxy +eOJ +ngl +cIJ +nub +gOs +jxy +vFI +iLB +tzc +jxy +iWI +iLB +wii +jxy +ybe +iLB +ybe +jxy +lbK +xUZ +eUW +eUW +eUW +eUW +eUW +fDG +bPd +bPd +bPd +bPd +bPd +bPd +bPd +qFf +tJS +gsh +obc +fFd +dcz +raN +svK +uaC +ayi +ayi +tOY +ccp +ydz +dio +dBO +gji +qaG +abC +ejv +nBE +byX +mhc +dbl +nBE +grF +lRi +byX +nBE +woy +hpY +mhc +nBE +hpY +gNh +hpY +nBE +aly +hpY +mhc +nBE +boP +oVL +mBa +tlA +vpn +nBE +nue +sAY +sFf +nBE +byX +mhc +mhc +frw +mhc +tbo +mhc +ndM +mhc +tbo +mhc +mhc +gqX +cbj +xXP +xXP +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(188,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +oAN +uoo +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +uoo +oAN +ksa +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +jxy +jxy +dyL +jxy +jxy +fXj +tvo +cIJ +aOz +gxY +jxy +iLB +iLB +lKO +jxy +iLB +uFo +iLB +jxy +iLB +iLB +iLB +jxy +fjx +xUZ +eUW +eUW +eUW +eUW +czD +sms +bpB +bPd +bPd +bPd +bPd +bPd +bPd +lCw +lLd +wdR +xFr +wdR +yaj +baI +ayi +ayi +ccp +ccp +ccp +ccp +dvO +cgb +wDg +gji +kBL +hKA +ukY +nBE +grF +mhc +dbl +nBE +dbl +lRi +mhc +xCt +nep +aly +mhc +tZd +tZd +dsV +hpY +tZd +mhc +hpY +mhc +khD +khD +khD +khD +khD +khD +nBE +nBE +nBE +nBE +nBE +dbl +mhc +tpC +nBE +tpC +nBE +mhc +ndM +kBn +nBE +nep +jOx +dCB +cbj +ksa +ksa +ksa +ksa +fEP +fEP +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +uoo +ksa +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(189,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +uoo +oAN +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +oAN +ksa +uoo +uoo +aVH +uoo +uoo +uoo +uoo +uoo +kjj +kjj +kjj +kjj +dWS +uKb +ruh +bUg +jxy +soc +rWt +ruh +pHK +aOz +jxy +qtL +iLB +iLB +jxy +oed +cYz +oed +jxy +tzc +gOs +dhE +jxy +jIp +xUZ +eUW +jLl +qGx +qlI +wGm +sms +gHr +xcb +gJb +ure +lOM +mOP +gHr +lCw +ujt +wlG +xFr +mCc +hDJ +baI +ayi +qha +wCD +iVj +raO +tIw +gji +kEl +kqr +gji +fii +lvd +sNK +nBE +byX +mhc +dbl +nBE +dbl +lRi +grF +nBE +mhc +aly +tZd +nBE +fsH +gNh +hpY +nBE +lPf +usg +mhc +khD +fft +tKG +aOU +qxD +khD +nxW +mhc +cQj +grF +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +pyZ +nBE +nBE +nBE +nBE +nBE +nBE +ksa +ksa +ksa +ksa +fEP +ksa +ksa +cXs +cXs +cXs +cXs +cXs +uoo +uoo +uoo +cXs +cXs +cXs +cXs +cXs +ksa +ksa +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(190,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +uoo +ksa +uoo +ksa +oAN +uoo +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +uoo +oAN +uoo +uoo +oAN +oAN +sWc +uoo +uoo +kjj +jse +kjj +vGz +tNL +fSX +dWS +xak +ruh +tvo +jxy +jxy +wSk +pZC +wSk +jxy +jxy +jxy +ipF +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +xYi +snk +xYi +sms +sms +lKY +lKY +lKY +lKY +lKY +lKY +lKY +lKY +lKY +lKY +lKY +lKY +pwm +fQt +pwm +lKY +lKY +lKY +lKY +lKY +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +rot +nBE +nBE +nBE +wgn +nBE +nBE +tZd +lPf +lPf +nBE +nBE +gNh +nBE +nBE +pRe +mhc +mhc +khD +hpY +sZi +hpY +hpY +khD +dbl +mhc +grF +mhc +nZd +dbl +nBE +dbl +dKQ +nbm +mhc +tpC +ndM +grF +cbj +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +uoo +tWX +tWX +tWX +tWX +tWX +tWX +cau +tWX +tWX +tWX +tWX +tWX +tWX +uoo +uoo +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(191,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +xHX +icE +oAN +oAN +oAN +icE +icE +icE +icE +icE +icE +icE +icE +icE +icE +icE +icE +oAN +oAN +oAN +oAN +nKr +ker +sWc +bcQ +mHO +tfF +rWH +tfF +jjD +dOx +amE +ruh +ruh +qtL +jxy +pTI +nbF +bYW +yeV +uAu +jxy +bUg +iLB +bUg +jxy +aMJ +aMJ +bTg +aMJ +aMJ +sms +enD +gyK +eUW +xUZ +eUW +jdb +bBA +lKY +wfT +sRJ +rOu +sRJ +bpI +lKY +tnK +egs +nyc +flt +xVW +vXO +eBF +iap +igL +rPX +dDd +eaE +pQy +nBE +mhc +lld +lld +nBE +nxW +mhc +grF +mhc +grF +nBE +mhc +mhc +tpC +nBE +dbl +lRi +nxW +nBE +tZd +usg +aly +nep +iGh +hbb +dHd +mhc +gVo +woy +mhc +dxH +dsf +xVV +yjI +hpY +khD +wtN +wzz +sZi +mhc +mhc +mhc +aDe +mhc +rgY +wQO +wQO +wQO +eGI +mhc +cbj +xXP +xXP +xXP +xXP +ksa +ksa +ksa +fEP +fEP +ksa +ksa +cXs +cXs +cXs +cXs +cXs +uoo +cau +uoo +cXs +cXs +cXs +cXs +cXs +ksa +ksa +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(192,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +uoo +ksa +uoo +ksa +oAN +uoo +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +uoo +oAN +uoo +uoo +oAN +oAN +sWc +uoo +uoo +kjj +jse +kjj +rgi +fSi +rTm +dWS +gNB +bcF +hsf +jxy +bxy +lzT +usd +nbF +vxs +jxy +lKO +iLB +bAh +jxy +aMJ +aMJ +aMJ +aMJ +och +sms +eUW +eUW +eUW +xUZ +eUW +eUW +eUW +lKY +sVt +gLh +gLh +gLh +tsN +wfQ +dEK +bms +bms +bms +bms +bms +puO +lBq +lBq +lBq +lBq +lBq +fQS +fcR +kJA +kJA +kJA +fkT +kJA +kJA +kJA +kJA +wQO +fkT +wQO +wQO +wQO +fkT +wQO +fRU +xcO +nBE +tZd +fRW +woy +usg +hpY +obV +fsH +hpY +tto +via +mhc +khD +hpY +hpY +sZi +tZd +khD +cQj +kIt +mhc +grF +sZi +mhc +nBE +dzV +ndM +mhc +grF +mhc +mhc +tvk +cbj +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +ksa +ksa +uoo +ksa +ksa +ksa +uoo +ksa +cau +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(193,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +uoo +oAN +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +oAN +ksa +uoo +uoo +uoo +xXP +xXP +xXP +xXP +xXP +kjj +kjj +kjj +kjj +dWS +lKO +iLB +qiM +jxy +sfm +lzT +kDe +kMR +yeV +jxy +bUg +iLB +ybe +jxy +iUg +gSY +aXI +xEu +eCu +pcp +xUZ +xUZ +xUZ +uNE +fJY +gcx +lsC +lKY +osP +nLl +loR +hqN +cDP +cSv +dxP +bms +mbx +mbx +mzR +hkg +grG +hkg +cDF +mbx +mbx +bms +vdT +nBE +jwC +mhc +jLa +nBE +dbl +dbl +xcO +ins +mhc +nBE +dbl +xcO +dbl +nBE +tpC +vBP +mhc +nBE +miz +bgm +dHd +xuN +iIF +gNh +lpR +woy +hpY +itK +mhc +khD +bOg +cwb +qxD +qxD +khD +cJO +mhc +byX +xcO +grF +dbl +nBE +nBE +jkJ +nBE +nBE +nxW +pRd +wfI +nBE +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +cau +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(194,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +oAN +uoo +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +uoo +oAN +ksa +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +jxy +jxy +sWa +jxy +jxy +bEL +bEL +ddB +kjP +asu +jxy +iLB +iLB +ybe +jxy +aMJ +aMJ +aMJ +aMJ +aMJ +sms +vsk +lsC +eUW +bXP +eUW +gcx +gcx +lKY +qBi +gLh +gLh +gLh +tsN +wfQ +dEK +bms +oZb +mbx +rDj +gRo +tYj +gjB +bQL +mbx +unj +bms +uzN +khD +khD +khD +khD +khD +khD +khD +nBE +hCP +nBE +nBE +nBE +nBE +nBE +nBE +nBE +jkJ +nBE +nBE +nBE +nBE +nBE +nBE +nBE +pmQ +nBE +nBE +nBE +nBE +nBE +khD +khD +khD +khD +khD +khD +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nep +ndM +xuN +khD +khD +khD +khD +khD +xXP +xXP +xXP +xXP +xXP +xXP +xXP +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +uoo +ksa +cau +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +fEP +ndy +noh +noh +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(195,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +fEP +uoo +oAN +icE +icE +icE +icE +icE +icE +icE +icE +icE +icE +icE +icE +oAN +uoo +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xWh +oed +iLB +ybe +jxy +rRt +oDn +pZV +nbF +yeV +jxy +tzc +iLB +bAh +jxy +aMJ +aMJ +bkD +aMJ +aMJ +sms +gcx +gcx +hLW +eUW +lkV +lsC +gcx +lKY +sue +jjx +umP +jjx +nKP +lKY +ioZ +bms +mbx +mbx +rDj +keg +ahd +kZN +eSQ +mbx +mbx +bms +hUS +kLr +hJb +oyG +ksl +oyG +hJb +khD +tpC +ins +tpC +nBE +dbl +byX +dbl +nBE +mhc +vBP +grF +nBE +grF +grF +nBE +hkR +jVQ +gNh +cUp +aSJ +nBE +vJI +mhc +grF +mhc +tpC +grF +nBE +grF +mhc +grF +nBE +dbl +byX +dbl +nBE +aAL +ndM +trh +khD +koC +qgd +vNr +seP +qHu +seP +uoo +uoo +cau +cau +bDS +uoo +xXP +cXs +cXs +cXs +cXs +cXs +uoo +uoo +uoo +cau +uoo +uoo +uoo +cXs +cXs +cXs +cXs +cXs +uoo +uoo +ksa +xXP +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(196,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +uoo +ksa +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +qpw +ksa +uoo +ksa +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +xXP +xWh +iLB +iLB +iLB +jxy +xzw +nbF +qed +wFZ +vxs +jxy +jxy +ipF +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +dXd +dXd +sms +bvd +sms +dXd +dXd +xvI +xvI +xvI +xvI +xvI +xvI +xvI +pHL +bms +mbx +mbx +rDj +nPz +gRo +kxM +eSQ +mbx +mbx +bms +xzd +kLr +fge +beQ +tGW +tGW +sXL +yjJ +czU +onk +czU +dqt +czU +czU +mhc +tbo +mhc +eFs +kJA +fkT +kJA +kJA +qzx +wmi +cPV +njN +njN +njN +qzx +wQO +wQO +wQO +wQO +wQO +wQO +qzx +kJA +wQO +wQO +qzx +wQO +wQO +wQO +qzx +wQO +eGI +ins +sfI +anP +hOt +vdf +oaN +vdf +eyt +qwx +bDS +nZy +nia +bDS +cau +tWX +tWX +tWX +tWX +tWX +tWX +tWX +cau +cau +cau +cau +cau +tWX +tWX +tWX +tWX +tWX +tWX +tWX +cau +qwx +muB +xXP +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(197,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +ksa +uoo +ksa +fEP +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xWh +bAh +eSr +oed +jxy +rDA +xJR +rRl +inn +iVh +jxy +oed +iLB +ybe +jxy +nNJ +iLB +iLB +iLB +iLB +jxy +ksa +ksa +sms +mqZ +sms +ksa +ksa +xvI +kiC +uum +bDu +nlg +pvF +xvI +gvO +bms +mbx +mbx +rDj +dCT +mvr +keg +eSQ +mbx +mbx +bms +vdT +xMO +uhG +qVX +iAo +qVX +nhT +khD +jwC +ins +nep +nBE +dbl +hur +lld +nBE +dbl +hbt +tpC +nBE +mhc +tpC +nBE +rbH +hpY +dSU +vzc +dDn +nBE +grF +tpC +mhc +grF +mhc +mhc +nBE +ueH +mhc +grF +nBE +mhc +kIt +mhc +nBE +nRV +rcf +oOS +khD +lLb +gGY +ddK +seP +qHu +seP +uoo +uoo +cau +cau +bDS +uoo +xXP +cXs +cXs +cXs +cXs +cXs +uoo +uoo +uoo +cau +uoo +uoo +uoo +cXs +cXs +cXs +cXs +cXs +uoo +uoo +ksa +xXP +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(198,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +jxy +jxy +sWa +jxy +jxy +jxy +jxy +jxy +jxy +jxy +jxy +ldz +iLB +bUg +jxy +iLB +tum +tum +tum +iLB +jxy +xXP +xXP +sms +uoH +sms +xXP +xXP +xvI +aIe +hVK +mht +hVK +inB +aSW +dEK +bms +mbx +mbx +rDj +rGu +bXS +jPq +eSQ +mbx +mbx +bms +oWG +kNw +adB +hUA +qRn +qVX +mpQ +khD +nBE +reH +nBE +nBE +nBE +nBE +nBE +nBE +cbj +cbj +cbj +nBE +nBE +nBE +nBE +nBE +cbj +pYF +cbj +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +twS +nBE +nBE +nBE +twS +nBE +nBE +tpC +xrz +nep +khD +seP +seP +seP +seP +uoo +uoo +uoo +uoo +uoo +xXP +xXP +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +uoo +ksa +cau +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +fEP +ndy +noh +noh +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(199,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +cyp +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xWh +ybe +iLB +ybe +jxy +ybe +ybe +oed +bAh +bAh +jxy +iLB +iLB +iLB +qkw +iLB +bTm +bTm +bTm +nNJ +jxy +ksa +ksa +uoo +ksa +uoo +ksa +ksa +xvI +cug +nFR +hHd +nFK +oMx +mrv +lcI +bms +ttD +mbx +rDj +pLK +dFq +sRp +eSQ +mbx +nMG +mAB +vdT +xMO +uhG +qVX +alP +qVX +tyG +iLZ +wXG +jhf +cgs +rLe +rxR +wqd +mai +tNr +tNr +tNr +tNr +tNr +bOr +bOr +bOr +nBE +jOx +fwB +jOx +nBE +bOr +bOr +bOr +bOr +bOr +bOr +bOr +nBE +dhq +fec +hSP +nBE +byX +byX +byX +nBE +nBE +aSD +nBE +nBE +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +cau +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +uoo +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(200,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +xXP +xWh +iLB +iLB +iLB +pxp +iLB +iLB +iLB +iLB +iLB +pxp +iLB +iLB +iLB +jxy +iLB +vox +vox +vox +iLB +jxy +ksa +ksa +uoo +ksa +uoo +ksa +ksa +xvI +ogK +mEH +uxx +htF +bTZ +aSW +dEK +mbx +mbx +mbx +gxh +lus +lus +lus +oRx +mbx +mbx +mbx +cCi +kLr +rtd +fZX +gPM +fZX +qMh +iLZ +lrF +sHG +sHG +sHG +tsv +fZD +mai +tNr +tNr +tNr +tNr +bOr +bOr +bOr +bOr +nBE +cbj +lKk +cbj +nBE +bOr +bOr +bOr +bOr +bOr +bOr +bOr +nBE +sea +mhc +uPg +nBE +lTk +byX +byX +nBE +mhc +mrU +nep +cbj +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +ksa +ksa +uoo +ksa +ksa +ksa +uoo +ksa +cau +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(201,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +xWh +ybe +ybe +iLB +jxy +oxX +iUf +fVV +cEn +lKO +jxy +lKO +tzc +bAh +jxy +iLB +iLB +nNJ +iLB +iLB +jxy +ksa +ksa +uoo +ksa +uoo +ksa +ksa +xvI +kkz +dgK +gXL +cJN +ttK +xvI +aIZ +csE +tGK +csE +naK +deW +dfV +wKE +pNS +csE +tGK +csE +dLL +kLr +fDB +vvM +mzn +vvM +fDB +iLZ +cCy +cCy +fZD +jAA +fZD +gWE +mai +tNr +tNr +tNr +tNr +bOr +bOr +bOr +bOr +bOr +fKO +tNr +fKO +bOr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +nBE +hKC +xhY +xaD +nBE +byX +byX +byX +nBE +bfx +mrU +aJJ +cbj +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +ksa +ksa +cXs +cXs +cXs +cXs +cXs +uoo +cau +uoo +cXs +cXs +cXs +cXs +cXs +ksa +ksa +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(202,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +jxy +xWh +xWh +xWh +jxy +jxy +xWh +xWh +xWh +jxy +jxy +xWh +xWh +xWh +jxy +jxy +xWh +xWh +xWh +jxy +jxy +fEP +fEP +uoo +ksa +uoo +fEP +fEP +xvI +wjW +wjW +xvI +wjW +wjW +xvI +lKY +hEL +lKY +svo +lKY +ncq +aSC +iom +lKY +svo +lKY +svo +lKY +kLr +kLr +xMO +xMO +xMO +kLr +iLZ +uBk +cCy +xgj +sYi +xgj +mai +xgj +tNr +tNr +tNr +tNr +tNr +bOr +bOr +bOr +tNr +tNr +tNr +tNr +tNr +tNr +bOr +bOr +bOr +bOr +bOr +bOr +nBE +btm +tzN +xaD +nBE +nBE +twS +nBE +nBE +uru +mrU +aAL +cbj +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +uoo +uoo +tWX +tWX +tWX +tWX +tWX +tWX +cau +tWX +tWX +tWX +tWX +tWX +tWX +uoo +uoo +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(203,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +xXP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +uoo +ksa +ksa +ksa +wfQ +cJW +wfQ +baO +lKY +wfQ +wfQ +wfQ +lKY +vQw +wfQ +cJW +wfQ +ksa +ksa +ksa +uoo +ksa +ksa +xgj +vCI +vCI +xgj +nIh +mai +uoo +uoo +tNr +tNr +tNr +tNr +tNr +tNr +bOr +bOr +tNr +tNr +tNr +tNr +tNr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +nBE +pxx +adC +lZu +nBE +iqS +sZi +byX +nBE +nBE +arU +nBE +nBE +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +ksa +ksa +cXs +cXs +cXs +cXs +cXs +uoo +uoo +uoo +cXs +cXs +cXs +cXs +cXs +ksa +ksa +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(204,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +ksa +ksa +fEP +fEP +fEP +ksa +ksa +fEP +fEP +fEP +ksa +ksa +fEP +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +ksa +lKY +dVT +lKY +hct +lKY +uoo +uoo +uoo +lKY +hct +lKY +hct +lKY +ksa +ksa +fEP +fEP +fEP +ksa +xgj +mai +mai +xgj +nRE +xgj +ksa +ksa +ksa +ksa +tNr +tNr +tNr +tNr +bOr +tNr +tNr +tNr +tNr +tNr +tNr +tNr +tNr +bOr +bOr +bOr +bOr +bOr +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +nBE +dDF +fPp +cnU +cbj +ksa +ndy +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +uoo +ksa +ksa +ksa +uoo +ksa +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(205,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +axN +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +tNr +tNr +tNr +tNr +tNr +ksa +ksa +tNr +tNr +tNr +tNr +tNr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +nBE +hCz +kMC +lld +cbj +uoo +noh +uoo +uoo +uoo +uoo +ksa +ksa +ksa +ksa +ksa +ksa +ksa +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +fEP +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(206,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +nAS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +tNr +tNr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +nBE +bfQ +eDD +dbl +cbj +ksa +noh +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(207,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +tNr +tNr +tNr +tNr +tNr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +nBE +cbj +cbj +cbj +nBE +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(208,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +tNr +tNr +tNr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +tNr +tNr +tNr +tNr +tNr +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(209,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +nLE +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +tNr +tNr +bOr +bOr +tNr +tNr +tNr +tNr +tNr +tNr +tNr +tNr +tNr +tNr +tNr +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(210,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +nLE +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +tNr +tNr +tNr +tNr +ksa +ksa +tNr +tNr +tNr +tNr +ksa +tNr +tNr +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(211,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +tNr +tNr +tNr +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(212,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +tNr +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(213,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(214,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(215,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(216,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +nAS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(217,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(218,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(219,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(220,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(221,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(222,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(223,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(224,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(225,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(226,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(227,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(228,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(229,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(230,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(231,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(232,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(233,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +sQS +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(234,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(235,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(236,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(237,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(238,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(239,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(240,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(241,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(242,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(243,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(244,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(245,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(246,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(247,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(248,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +nLE +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(249,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(250,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(251,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(252,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(253,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(254,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} +(255,1,1) = {" +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +ksa +"} diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 022343e7dca0..29a07339b6ba 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -94,7 +94,7 @@ /turf/open/floor/plating, /area/station/maintenance/central) "abq" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 1 }, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ @@ -235,8 +235,12 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/stone, /area/station/science/xenobiology) "acG" = ( /obj/structure/table/reinforced, @@ -774,7 +778,7 @@ /obj/machinery/status_display/supply{ pixel_x = -32 }, -/obj/structure/table/reinforced, +/obj/structure/table, /obj/item/paper_bin, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 @@ -918,7 +922,7 @@ /turf/open/floor/plating, /area/station/maintenance/disposal) "alx" = ( -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /obj/effect/turf_decal/tile/blue{ dir = 1 }, @@ -2428,11 +2432,11 @@ /turf/open/floor/iron/dark, /area/station/security/execution/education) "aAU" = ( -/obj/structure/table/reinforced, +/obj/structure/table, /obj/item/flashlight/lamp, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "aBi" = ( /obj/item/kirbyplants/random, /obj/machinery/light/directional/south, @@ -2627,6 +2631,13 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"aDe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/stone, +/area/station/science/xenobiology) "aDg" = ( /obj/effect/turf_decal/delivery, /obj/structure/closet/crate{ @@ -2644,14 +2655,13 @@ /turf/open/floor/iron, /area/station/hallway/secondary/entry) "aDR" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/button/door{ - id = "xeno4"; - name = "Containment Control"; - req_access = list("xenobiology") +/obj/machinery/corral_corner{ + mapping_id = "1" }, -/turf/open/floor/iron, +/obj/machinery/slime_pen_controller{ + mapping_id = "1" + }, +/turf/open/floor/engine, /area/station/science/xenobiology) "aDZ" = ( /obj/machinery/door/firedoor, @@ -3177,7 +3187,7 @@ /area/space/nearstation) "aJE" = ( /turf/closed/wall, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "aJG" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/carpet/green, @@ -3645,10 +3655,6 @@ /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 4 }, -/obj/machinery/keycard_auth/directional/east{ - pixel_x = 40; - pixel_y = -8 - }, /obj/machinery/button/door/directional/east{ id = "qmspace"; name = "Space Shutters Control"; @@ -3660,7 +3666,7 @@ pixel_y = 6 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "aPq" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -4629,7 +4635,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "bdI" = ( /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 1 @@ -4876,21 +4882,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron, /area/station/security/checkpoint/escape) -"bgH" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Creature Pen"; - req_access = list("research") - }, -/obj/machinery/door/poddoor/preopen{ - id = "xeno2"; - name = "Creature Cell #2" - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "bgK" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, @@ -5478,17 +5469,6 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron, /area/station/command/gateway) -"bnd" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/button/door{ - id = "xeno3"; - name = "Containment Control"; - req_access = list("xenobiology") - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "bnt" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -7232,21 +7212,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"bIh" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Creature Pen"; - req_access = list("research") - }, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xeno4"; - name = "Creature Cell #4" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "bIk" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -8605,7 +8570,7 @@ /obj/structure/railing{ dir = 4 }, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "bWT" = ( /obj/effect/decal/cleanable/dirt, @@ -8666,18 +8631,6 @@ }, /turf/open/floor/carpet/blue, /area/station/commons/dorms) -"bXL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "bXX" = ( /obj/structure/bookcase/random/fiction, /obj/effect/turf_decal/siding/wood{ @@ -10228,7 +10181,7 @@ /area/station/engineering/atmos/hfr_room) "crb" = ( /obj/structure/window/reinforced/spawner/directional/south, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "crd" = ( /obj/effect/decal/cleanable/dirt, @@ -10382,18 +10335,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"csY" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Xenobiology - Cell 8"; - name = "xenobiology camera"; - network = list("ss13","xeno","rd") - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "ctw" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=engi1"; @@ -10418,11 +10359,6 @@ /obj/effect/turf_decal/trimline/purple, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"ctW" = ( -/obj/structure/cable, -/mob/living/simple_animal/slime, -/turf/open/floor/circuit/green, -/area/station/science/xenobiology) "cug" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -10896,7 +10832,7 @@ /obj/item/clipboard, /obj/item/toy/figure/qm, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "cAH" = ( /obj/machinery/status_display/evac/directional/east, /obj/machinery/camera/directional/east{ @@ -10935,7 +10871,7 @@ /obj/structure/cable, /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "cBd" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -11439,15 +11375,6 @@ /obj/effect/landmark/navigate_destination/incinerator, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"cGA" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xeno6"; - name = "Creature Cell #6" - }, -/turf/open/floor/plating, -/area/station/science/xenobiology) "cGJ" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -12171,7 +12098,7 @@ dir = 8 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "cQr" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 1 @@ -12552,7 +12479,7 @@ /area/station/ai_monitored/security/armory) "cVt" = ( /obj/structure/railing, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "cVx" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -12725,6 +12652,10 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) "cYh" = ( @@ -12965,15 +12896,6 @@ }, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) -"dbo" = ( -/obj/effect/landmark/event_spawn, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron/white/textured, -/area/station/science/xenobiology) "dbw" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -13159,9 +13081,8 @@ /turf/open/floor/iron, /area/station/security/checkpoint/escape) "ddW" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners, -/turf/open/floor/iron/dark, +/obj/machinery/camera/directional/west, +/turf/open/floor/engine, /area/station/science/xenobiology) "dea" = ( /obj/structure/table, @@ -13239,11 +13160,11 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/machinery/door/airlock/command{ - name = "Quartermaster's Office" +/obj/machinery/door/airlock/mining{ + name = "Quatermaster's Office" }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "deD" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -13341,7 +13262,7 @@ /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "dfX" = ( /obj/effect/turf_decal/tile/brown{ dir = 8 @@ -13412,7 +13333,7 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "dgH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -14367,15 +14288,13 @@ /turf/open/floor/iron, /area/station/science/circuits) "duq" = ( -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "1"; dir = 1 }, -/turf/open/floor/iron/dark, +/obj/machinery/light/floor/has_bulb, +/mob/living/basic/slime, +/turf/open/floor/engine, /area/station/science/xenobiology) "dux" = ( /obj/structure/table, @@ -14715,11 +14634,8 @@ /area/station/security/brig) "dxU" = ( /obj/structure/cable, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron/white/textured, +/obj/machinery/duct, +/turf/open/floor/glass/reinforced, /area/station/science/xenobiology) "dxV" = ( /obj/effect/decal/cleanable/dirt, @@ -15096,7 +15012,7 @@ /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "dEk" = ( -/obj/machinery/modular_computer/console/preset/research{ +/obj/machinery/modular_computer/preset/research{ dir = 1 }, /obj/structure/cable, @@ -15658,18 +15574,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /turf/open/floor/iron, /area/station/engineering/break_room) -"dLh" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Xenobiology - Cell 3"; - name = "xenobiology camera"; - network = list("ss13","xeno","rd") - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "dLq" = ( /obj/machinery/porta_turret/ai, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -16561,7 +16465,7 @@ /turf/open/floor/iron, /area/station/maintenance/port) "dXs" = ( -/obj/structure/table/reinforced, +/obj/structure/table, /obj/effect/decal/cleanable/dirt, /obj/item/flashlight/lamp, /obj/effect/turf_decal/tile/purple/half/contrasted{ @@ -16846,11 +16750,13 @@ /area/station/service/kitchen) "eaO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, +/obj/structure/cable, +/turf/open/floor/stone, /area/station/science/xenobiology) "eaQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17566,7 +17472,7 @@ pixel_y = 30 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "eke" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction/yjunction{ @@ -17963,7 +17869,7 @@ /turf/open/floor/iron/cafeteria, /area/station/service/cafeteria) "epF" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 1 }, /obj/effect/turf_decal/tile/purple{ @@ -18211,10 +18117,12 @@ /turf/open/floor/iron, /area/station/cargo/sorting) "esm" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners, -/turf/open/floor/iron/dark, +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "4" + }, +/obj/machinery/light/floor/has_bulb, +/mob/living/basic/slime, +/turf/open/floor/engine, /area/station/science/xenobiology) "eso" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning, @@ -18517,6 +18425,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"evj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/stone, +/area/station/science/xenobiology) "evp" = ( /obj/machinery/computer/records/medical{ dir = 8 @@ -18843,7 +18758,7 @@ /obj/structure/sign/painting/library_private{ pixel_y = -32 }, -/obj/machinery/modular_computer/console/preset/curator{ +/obj/machinery/modular_computer/preset/curator{ dir = 1 }, /obj/effect/turf_decal/bot_white, @@ -19250,7 +19165,7 @@ "eGr" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/light/directional/east, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "eGs" = ( /obj/structure/chair/office{ @@ -19276,7 +19191,7 @@ /obj/machinery/airalarm/directional/south, /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "eGO" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -20756,7 +20671,7 @@ "eYr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/modular_computer/console/preset/civilian, +/obj/machinery/modular_computer/preset/civilian, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -20912,7 +20827,7 @@ dir = 4 }, /obj/structure/window/reinforced/spawner/directional/east, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "fam" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22626,6 +22541,8 @@ }, /obj/item/storage/box/petridish, /obj/effect/turf_decal/siding/purple, +/obj/item/vacuum_pack, +/obj/item/vacuum_pack, /turf/open/floor/iron, /area/station/science/xenobiology) "fva" = ( @@ -22978,6 +22895,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) "fzv" = ( @@ -23013,7 +22933,7 @@ "fzD" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/railing, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "fzF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23366,13 +23286,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/space, /area/space/nearstation) -"fFf" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/obj/machinery/photocopier, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "fFi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -23684,6 +23597,8 @@ name = "xenobiology camera"; network = list("ss13","xeno","rd") }, +/obj/item/disk/vacuum_upgrade/biomass, +/obj/item/disk/vacuum_upgrade/biomass, /turf/open/floor/iron, /area/station/science/xenobiology) "fIY" = ( @@ -23760,11 +23675,11 @@ }, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/machinery/door/airlock/command{ - name = "Quartermaster's Office" +/obj/machinery/door/airlock/mining{ + name = "Quatermaster's Office" }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "fKH" = ( /obj/effect/turf_decal/tile/red/anticorner/contrasted, /obj/structure/chair/comfy/black{ @@ -23917,9 +23832,7 @@ /turf/open/floor/iron/dark, /area/station/service/chapel/funeral) "fMl" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/engine, /area/station/science/xenobiology) "fMn" = ( /obj/effect/turf_decal/tile/neutral{ @@ -24041,22 +23954,11 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/iron/dark, /area/station/security/office) -"fNY" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xeno3"; - name = "Creature Cell #3" - }, -/turf/open/floor/plating, -/area/station/science/xenobiology) "fOp" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 +/obj/machinery/corral_corner{ + mapping_id = "3" }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, +/turf/open/floor/engine, /area/station/science/xenobiology) "fOw" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -24948,6 +24850,13 @@ /obj/structure/sink/directional/south, /turf/open/floor/iron/dark, /area/station/science/genetics) +"fZo" = ( +/obj/machinery/corral_corner{ + mapping_id = "3" + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/science/xenobiology) "fZp" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/blue/filled/warning{ @@ -25071,21 +24980,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"gbj" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Creature Pen"; - req_access = list("research") - }, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xeno3"; - name = "Creature Cell #3" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "gbo" = ( /obj/machinery/airalarm/directional/south, /obj/structure/table/wood, @@ -25631,15 +25525,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/eva/abandoned) -"ghQ" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "xeno1"; - name = "Creature Cell #1" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/science/xenobiology) "ghU" = ( /obj/structure/rack, /obj/item/book/manual/wiki/engineering_hacking{ @@ -25842,9 +25727,9 @@ /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 8 }, -/obj/machinery/pdapainter/supply, +/obj/machinery/photocopier, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "gkT" = ( /obj/machinery/light/small/directional/south, /obj/structure/reagent_dispensers/fueltank, @@ -25933,7 +25818,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "gmr" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -26894,6 +26779,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"gvX" = ( +/obj/machinery/duct, +/turf/open/floor/engine, +/area/station/science/xenobiology) "gwd" = ( /obj/machinery/washing_machine, /obj/effect/turf_decal/tile/dark_blue/fourcorners, @@ -27108,7 +26997,7 @@ /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) "gzz" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/structure/cable, @@ -27484,16 +27373,6 @@ /obj/structure/displaycase_chassis, /turf/open/floor/wood/large, /area/station/service/library/abandoned) -"gDU" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/poddoor/preopen{ - id = "xeno7"; - name = "Creature Cell #7" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/science/xenobiology) "gDV" = ( /turf/closed/wall, /area/station/service/library/lounge) @@ -27549,16 +27428,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"gED" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/poddoor/preopen{ - id = "xeno1"; - name = "Creature Cell #1" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/science/xenobiology) "gEF" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -28039,7 +27908,7 @@ /turf/open/floor/iron/large, /area/station/commons/locker) "gKu" = ( -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "gKA" = ( /obj/structure/cable, @@ -29129,15 +28998,6 @@ }, /turf/open/space/basic, /area/space) -"gZx" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xeno8"; - name = "Creature Cell #8" - }, -/turf/open/floor/plating, -/area/station/science/xenobiology) "gZz" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -29202,7 +29062,7 @@ name = "Quartermaster's Fax Machine" }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "haw" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -29613,7 +29473,7 @@ }, /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "hfV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30343,7 +30203,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "hoQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/green/corner{ @@ -31500,14 +31360,6 @@ /obj/effect/mapping_helpers/airlock/access/all/service/kitchen, /turf/open/floor/iron/freezer, /area/station/service/kitchen/coldroom) -"hFS" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron/white/textured, -/area/station/science/xenobiology) "hFZ" = ( /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/syringe/antiviral, @@ -32026,7 +31878,6 @@ name = "xenobiology camera"; network = list("ss13","xeno","rd") }, -/obj/structure/chair/office/light, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /obj/machinery/newscaster/directional/east, /turf/open/floor/iron, @@ -32689,7 +32540,7 @@ }, /obj/item/radio/intercom/directional/east, /obj/structure/cable, -/obj/machinery/modular_computer/console/preset/engineering{ +/obj/machinery/modular_computer/preset/engineering{ dir = 1 }, /turf/open/floor/iron/dark, @@ -33905,7 +33756,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, +/obj/structure/table, /obj/item/clothing/gloves/cargo_gauntlet{ pixel_y = 6 }, @@ -34123,7 +33974,7 @@ }, /obj/machinery/suit_storage_unit/industrial/loader, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "ilG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34543,6 +34394,13 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/engineering/storage) +"irh" = ( +/obj/machinery/corral_corner{ + mapping_id = "2" + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/science/xenobiology) "irl" = ( /turf/closed/wall/r_wall, /area/station/service/lawoffice) @@ -35350,7 +35208,7 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/nestbox, /mob/living/basic/chicken, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "iBf" = ( /obj/structure/cable, @@ -35878,7 +35736,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "iIk" = ( /obj/effect/decal/cleanable/blood/old, /obj/structure/cable, @@ -36081,6 +35939,10 @@ "iLr" = ( /turf/closed/wall, /area/station/service/theater/abandoned) +"iLv" = ( +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/science/xenobiology) "iLB" = ( /obj/structure/sign/directions/evac{ pixel_y = -8 @@ -36848,22 +36710,7 @@ dir = 8 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) -"iWX" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Creature Pen"; - req_access = list("research") - }, -/obj/machinery/door/poddoor/preopen{ - id = "xeno1"; - name = "Creature Cell #1" - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) +/area/station/cargo/quartermaster) "iXc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38310,7 +38157,7 @@ dir = 8 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "jmA" = ( /obj/machinery/newscaster/directional/north, /obj/item/kirbyplants/random, @@ -38891,16 +38738,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"juv" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/poddoor/preopen{ - id = "xeno4"; - name = "Creature Cell #4" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/science/xenobiology) "juC" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -39534,7 +39371,7 @@ /area/station/cargo/miningoffice) "jBR" = ( /obj/structure/cable, -/obj/machinery/modular_computer/console/preset/command, +/obj/machinery/modular_computer/preset/command, /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 1 }, @@ -40280,17 +40117,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay) -"jKZ" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "xeno7"; - name = "Containment Control"; - req_access = list("xenobiology") - }, -/obj/machinery/light/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron, -/area/station/science/xenobiology) "jLa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/green{ @@ -40477,15 +40303,13 @@ /turf/open/floor/iron, /area/station/hallway/primary/fore) "jNn" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "xeno8"; - name = "Containment Control"; - req_access = list("xenobiology") +/obj/machinery/corral_corner{ + mapping_id = "3" }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, +/obj/machinery/slime_pen_controller{ + mapping_id = "3" + }, +/turf/open/floor/engine, /area/station/science/xenobiology) "jNx" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -41180,7 +41004,7 @@ "jVg" = ( /obj/machinery/airalarm/directional/north, /obj/structure/window/reinforced/spawner/directional/east, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "jVx" = ( /obj/machinery/computer/crew{ @@ -41262,7 +41086,7 @@ "jWq" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/directional/north, -/obj/structure/table/reinforced, +/obj/structure/table, /obj/item/storage/box/lights/mixed, /obj/machinery/airalarm/directional/north, /obj/item/stock_parts/cell/high/empty, @@ -41586,7 +41410,7 @@ /area/station/ai_monitored/turret_protected/aisat_interior) "kaw" = ( /obj/structure/window/reinforced/spawner/directional/north, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "kax" = ( /obj/structure/chair/office/light{ @@ -42681,7 +42505,7 @@ /obj/structure/railing{ dir = 8 }, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "kmE" = ( /obj/machinery/door/poddoor/incinerator_atmos_aux, @@ -42924,7 +42748,7 @@ name = "Privacy Shutters" }, /turf/open/floor/plating, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "krs" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -43739,15 +43563,6 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/maintenance/fore) -"kBO" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "xeno2"; - name = "Creature Cell #2" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/science/xenobiology) "kBR" = ( /obj/machinery/door/window{ dir = 8; @@ -43798,7 +43613,7 @@ /area/station/maintenance/port) "kCq" = ( /obj/structure/cable, -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 4 }, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -44451,7 +44266,7 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 }, -/obj/machinery/modular_computer/console/preset/cargochat/science{ +/obj/machinery/modular_computer/preset/cargochat/science{ dir = 4 }, /obj/effect/turf_decal/bot/left, @@ -44769,7 +44584,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "kOy" = ( /obj/vehicle/sealed/mecha/working/ripley/cargo, /turf/open/floor/iron/recharge_floor, @@ -44902,7 +44717,7 @@ /turf/open/floor/iron, /area/station/service/hydroponics) "kQV" = ( -/obj/machinery/modular_computer/console/preset/cargochat/service, +/obj/machinery/modular_computer/preset/cargochat/service, /obj/effect/turf_decal/bot, /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/checker, @@ -45012,13 +44827,13 @@ "kSi" = ( /obj/structure/nestbox, /obj/machinery/light/directional/west, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "kSk" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/modular_computer/console/preset/cargochat/cargo, +/obj/machinery/modular_computer/preset/cargochat/cargo, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 }, @@ -45052,14 +44867,6 @@ "kSu" = ( /turf/closed/wall, /area/station/command/teleporter) -"kSA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/science/xenobiology) "kSB" = ( /obj/machinery/portable_atmospherics/canister, /obj/machinery/light/small/directional/west, @@ -45217,7 +45024,7 @@ /turf/open/floor/iron, /area/station/cargo/sorting) "kVe" = ( -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/hos) "kVo" = ( @@ -45309,13 +45116,6 @@ /obj/structure/sign/poster/contraband/random/directional/south, /turf/open/floor/plating, /area/station/service/kitchen/abandoned) -"kWi" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "kWv" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45510,16 +45310,6 @@ "kYn" = ( /turf/open/floor/iron/dark, /area/station/service/abandoned_gambling_den/gaming) -"kYq" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/poddoor/preopen{ - id = "xeno5"; - name = "Creature Cell #5" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/science/xenobiology) "kYu" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral{ @@ -45676,6 +45466,14 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/checkpoint/escape) +"laX" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Xeniobiology - Xenobiology Computers"; + name = "xenobiology camera"; + network = list("ss13","xeno","rd") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "lbi" = ( /obj/structure/lattice/catwalk, /obj/structure/transit_tube/curved/flipped{ @@ -45854,9 +45652,11 @@ /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/captain) "lcK" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "lcO" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -46105,7 +45905,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/table/reinforced, +/obj/structure/table, /obj/item/storage/toolbox/mechanical, /obj/item/storage/belt/utility, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -46473,7 +46273,7 @@ name = "Privacy Shutters" }, /turf/open/floor/plating, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "ljT" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -49264,7 +49064,7 @@ pixel_y = -6 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "lRY" = ( /obj/structure/cable, /obj/machinery/power/energy_accumulator/grounding_rod/anchored, @@ -49667,13 +49467,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/safe) -"lYw" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "lYJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -49848,13 +49641,10 @@ /turf/open/floor/iron, /area/station/medical/pathology) "mca" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, +/turf/open/floor/stone, /area/station/science/xenobiology) "mck" = ( /obj/structure/chair/office, @@ -50083,12 +49873,12 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table/reinforced, +/obj/structure/table, /obj/item/folder/yellow, /obj/item/stamp/qm, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "meW" = ( /obj/machinery/light/small/directional/south, /obj/effect/turf_decal/tile/green, @@ -51364,6 +51154,7 @@ dir = 8 }, /obj/effect/landmark/start/hangover, +/obj/machinery/slime_extract_requestor, /turf/open/floor/iron/white, /area/station/science/lobby) "muW" = ( @@ -51852,7 +51643,7 @@ "mBG" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/nestbox, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "mBQ" = ( /obj/effect/decal/cleanable/dirt, @@ -52042,7 +51833,7 @@ /area/station/security/courtroom) "mDz" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table/reinforced, +/obj/structure/table, /obj/item/clothing/shoes/wheelys/rollerskates, /obj/item/clothing/shoes/wheelys/rollerskates{ pixel_y = 5 @@ -53525,8 +53316,8 @@ /turf/open/floor/grass, /area/station/medical/psychology) "mVe" = ( -/obj/machinery/processor/slime, /obj/effect/turf_decal/bot_red, +/obj/machinery/plumbing/ooze_compressor, /turf/open/floor/iron/dark, /area/station/science/xenobiology) "mVi" = ( @@ -53631,16 +53422,6 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/supermatter) -"mWy" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/poddoor/preopen{ - id = "xeno2"; - name = "Creature Cell #2" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/science/xenobiology) "mWB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -53655,9 +53436,8 @@ /area/station/service/library) "mWE" = ( /obj/structure/table/wood, -/obj/structure/cassette_rack{ - pixel_x = -5; - pixel_y = 12 +/obj/structure/cassette_rack/prefilled{ + pixel_y = 8 }, /turf/open/floor/iron/vaporwave, /area/station/service/library/printer) @@ -53844,16 +53624,6 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/port) -"mZd" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Creature Pen"; - req_access = list("research") - }, -/obj/structure/cable, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/science/xenobiology) "mZj" = ( /obj/machinery/atmospherics/components/trinary/mixer{ color = "#FFFF00"; @@ -54027,17 +53797,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/warden) -"nbo" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/button/door{ - id = "xeno2"; - name = "Containment Control"; - req_access = list("xenobiology") - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "nbv" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -54150,15 +53909,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/dark/textured_large, /area/station/engineering/atmos/storage/gas) -"ncJ" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xeno4"; - name = "Creature Cell #4" - }, -/turf/open/floor/plating, -/area/station/science/xenobiology) "ncQ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -54304,18 +54054,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"nfT" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Xenobiology - Cell 6"; - name = "xenobiology camera"; - network = list("ss13","xeno","rd") - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "nfX" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -54607,20 +54345,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"nkj" = ( -/obj/machinery/door/window/brigdoor{ - name = "Creature Pen"; - req_access = list("research") - }, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xeno6"; - name = "Creature Cell #6" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "nkn" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, @@ -55473,11 +55197,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison) -"nwV" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/sign/warning/secure_area/directional/west, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "nwW" = ( /obj/structure/sign/nanotrasen{ pixel_x = -32 @@ -55768,12 +55487,6 @@ }, /turf/open/floor/iron, /area/station/engineering/supermatter/room) -"nzt" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "nzw" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/bot, @@ -55795,7 +55508,7 @@ /area/station/maintenance/fore) "nzA" = ( /mob/living/basic/chicken, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "nzD" = ( /obj/structure/disposalpipe/segment{ @@ -56701,7 +56414,7 @@ /area/station/maintenance/port/fore) "nKN" = ( /obj/structure/cable, -/obj/machinery/modular_computer/console/preset/engineering{ +/obj/machinery/modular_computer/preset/engineering{ dir = 4 }, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -56860,48 +56573,6 @@ pixel_y = 7; pixel_x = -8 }, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/friday{ - pixel_y = 2; - pixel_x = 9 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, /turf/open/floor/iron/vaporwave, /area/station/service/library/printer) "nMN" = ( @@ -56969,25 +56640,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) -"nNR" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xeno5"; - name = "Creature Cell #5" - }, -/turf/open/floor/plating, -/area/station/science/xenobiology) -"nNT" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/poddoor/preopen{ - id = "xeno6"; - name = "Creature Cell #6" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/science/xenobiology) "nNU" = ( /obj/effect/turf_decal/tile/neutral, /obj/machinery/firealarm/directional/south, @@ -57846,13 +57498,10 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "nYS" = ( -/obj/machinery/door/window/brigdoor{ - name = "Creature Pen"; - req_access = list("research") +/obj/machinery/corral_corner{ + mapping_id = "1" }, -/obj/structure/cable, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, +/turf/open/floor/engine, /area/station/science/xenobiology) "nYV" = ( /obj/effect/turf_decal/tile/yellow{ @@ -58346,7 +57995,7 @@ name = "Privacy Shutters" }, /turf/open/floor/plating, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "ofE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line{ @@ -58950,6 +58599,13 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"omu" = ( +/obj/machinery/corral_corner{ + mapping_id = "4" + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/science/xenobiology) "omv" = ( /obj/structure/table, /obj/item/flashlight/lamp, @@ -59053,7 +58709,7 @@ /turf/open/floor/iron/white, /area/station/security/execution/transfer) "ooa" = ( -/obj/machinery/modular_computer/console/preset/cargochat/engineering{ +/obj/machinery/modular_computer/preset/cargochat/engineering{ dir = 1 }, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -59666,17 +59322,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/port) -"oyp" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "xeno6"; - name = "Containment Control"; - req_access = list("xenobiology") - }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/science/xenobiology) "oyy" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -61071,6 +60716,14 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/medical/medsci) +"oQS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "oRk" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -61182,7 +60835,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "oSF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61428,7 +61081,7 @@ /mob/living/basic/sloth/citrus, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "oVF" = ( /obj/effect/turf_decal/siding/white{ dir = 1 @@ -62138,6 +61791,13 @@ /obj/structure/closet/l3closet/virology, /turf/open/floor/iron/white, /area/station/medical/pathology) +"pff" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/stone, +/area/station/science/xenobiology) "pfh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62671,15 +62331,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/main) -"pla" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xeno7"; - name = "Creature Cell #7" - }, -/turf/open/floor/plating, -/area/station/science/xenobiology) "plh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -62776,18 +62427,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"pmw" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Xenobiology - Cell 1"; - name = "xenobiology camera"; - network = list("ss13","xeno","rd") - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "pmz" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -63768,6 +63407,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"pAi" = ( +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/stone, +/area/station/science/xenobiology) "pAs" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -63896,16 +63541,6 @@ /obj/machinery/atm, /turf/open/floor/iron, /area/station/cargo/lobby) -"pBB" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/poddoor/preopen{ - id = "xeno3"; - name = "Creature Cell #3" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/science/xenobiology) "pBH" = ( /obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -64020,14 +63655,12 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "pDf" = ( -/obj/machinery/computer/camera_advanced/xenobio{ - dir = 1 - }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 }, /obj/structure/sign/xenobio_guide/directional/south, +/obj/machinery/slime_market_pad, /turf/open/floor/iron/dark, /area/station/science/xenobiology) "pDi" = ( @@ -64067,6 +63700,10 @@ /area/station/engineering/atmos) "pDM" = ( /obj/structure/cable, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) "pDS" = ( @@ -64443,7 +64080,7 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/structure/table/reinforced, +/obj/structure/table, /obj/item/paper_bin{ pixel_x = 4; pixel_y = 6 @@ -64652,6 +64289,19 @@ "pKb" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, +/obj/structure/closet/crate/hydroponics, +/obj/item/seeds/tower, +/obj/effect/spawner/random/contraband/prison, +/obj/item/seeds/pumpkin, +/obj/item/seeds/wheat, +/obj/item/seeds/ambrosia, +/obj/item/seeds/grass, +/obj/item/seeds/carrot, +/obj/item/seeds/tomato, +/obj/item/seeds/potato, +/obj/item/seeds/garlic, +/obj/item/seeds/onion, +/obj/item/paper/guides/jobs/hydroponics, /turf/open/floor/iron, /area/station/security/prison/garden) "pKc" = ( @@ -64857,7 +64507,7 @@ }, /area/station/medical/morgue) "pLV" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 1 }, /obj/structure/cable, @@ -65230,12 +64880,13 @@ /turf/open/floor/iron, /area/station/service/kitchen/abandoned) "pQz" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "2"; + dir = 1 }, -/turf/open/floor/iron/dark, +/obj/machinery/light/floor/has_bulb, +/mob/living/basic/slime, +/turf/open/floor/engine, /area/station/science/xenobiology) "pQN" = ( /obj/machinery/duct, @@ -65301,13 +64952,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"pRz" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "pRG" = ( /obj/effect/turf_decal/tile/purple/fourcorners, /obj/effect/spawner/random/engineering/tracking_beacon, @@ -65660,7 +65304,7 @@ /turf/open/floor/iron/checker, /area/station/hallway/secondary/service) "pUC" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/effect/turf_decal/stripes/line{ @@ -65868,17 +65512,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/abandoned_gambling_den/gaming) -"pWL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "pWO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65982,7 +65615,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "pYl" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -67357,7 +66990,7 @@ "qqx" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "qqA" = ( /obj/effect/landmark/start/hangover, /obj/structure/chair{ @@ -67431,16 +67064,6 @@ /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/carpet/green, /area/station/commons/lounge) -"qrU" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/white/textured_large, -/area/station/science/xenobiology) "qrY" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -69756,6 +69379,12 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) +"qUa" = ( +/obj/machinery/corral_corner{ + mapping_id = "4" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "qUi" = ( /obj/structure/disposalpipe/sorting/mail{ name = "Engineering Junction" @@ -70098,7 +69727,7 @@ }, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "qZG" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -70359,7 +69988,7 @@ /turf/open/floor/iron/dark/side, /area/station/engineering/lobby) "rdU" = ( -/obj/machinery/modular_computer/console/preset/cargochat/medical, +/obj/machinery/modular_computer/preset/cargochat/medical, /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 10 }, @@ -70533,7 +70162,7 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "rgC" = ( -/obj/structure/table/reinforced, +/obj/structure/table, /obj/item/folder/yellow, /obj/item/gps/mining, /obj/effect/turf_decal/tile/brown/anticorner/contrasted, @@ -70625,18 +70254,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) -"rhi" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "rhw" = ( /obj/structure/chair/office/light{ dir = 8 @@ -71388,7 +71005,7 @@ "rqc" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/item/radio/intercom/directional/north, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 4 }, /obj/effect/turf_decal/tile/purple{ @@ -71491,7 +71108,7 @@ /obj/effect/landmark/start/quartermaster, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "rrF" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/half/contrasted, @@ -72260,7 +71877,7 @@ }, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "rBo" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/table/optable, @@ -72971,7 +72588,7 @@ "rLg" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "rLt" = ( /obj/machinery/camera/directional/north{ c_tag = "Holodeck Control"; @@ -73298,11 +72915,13 @@ /turf/open/floor/plating, /area/station/science/research) "rOY" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, +/obj/machinery/corral_corner{ + mapping_id = "4" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "4" + }, +/turf/open/floor/engine, /area/station/science/xenobiology) "rPc" = ( /obj/effect/turf_decal/stripes/line{ @@ -73795,20 +73414,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"rUl" = ( -/obj/machinery/door/window/brigdoor{ - name = "Creature Pen"; - req_access = list("research") - }, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xeno8"; - name = "Creature Cell #8" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "rUn" = ( /obj/structure/sign/departments/science/directional/west, /obj/effect/turf_decal/tile/purple{ @@ -74428,7 +74033,7 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) "scR" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 4 }, /obj/machinery/requests_console/directional/west{ @@ -74671,7 +74276,7 @@ /obj/machinery/holopad, /obj/effect/turf_decal/bot, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "sgh" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red, @@ -74730,10 +74335,6 @@ }, /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) -"shO" = ( -/obj/structure/cable, -/turf/open/floor/circuit/green, -/area/station/science/xenobiology) "shP" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -75215,7 +74816,7 @@ /obj/item/radio/intercom/directional/west{ pixel_y = -8 }, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 4 }, /turf/open/floor/iron/dark/textured_large, @@ -75780,13 +75381,6 @@ /obj/structure/sign/poster/random/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"svD" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "svI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -76246,16 +75840,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/open/floor/plating, /area/station/engineering/atmos/mix) -"sBt" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/poddoor/preopen{ - id = "xeno8"; - name = "Creature Cell #8" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/science/xenobiology) "sBE" = ( /obj/machinery/door/firedoor/heavy, /obj/effect/turf_decal/stripes/line{ @@ -76614,7 +76198,7 @@ "sGm" = ( /obj/structure/window/reinforced/spawner/directional/north, /mob/living/basic/chicken/brown, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "sGx" = ( /obj/structure/cable, @@ -77087,7 +76671,7 @@ /obj/structure/railing{ dir = 8 }, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "sLd" = ( /obj/structure/cable, @@ -77298,7 +76882,7 @@ /obj/structure/filingcabinet/chestdrawer, /obj/effect/turf_decal/tile/brown/anticorner/contrasted, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "sNC" = ( /obj/structure/easel, /obj/item/canvas/twentythree_twentythree, @@ -78051,11 +77635,8 @@ /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, -/obj/machinery/modular_computer/console/preset/id{ - dir = 8 - }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "sWI" = ( /obj/machinery/camera/directional/east{ c_tag = "Central Hallway - Starboard"; @@ -78313,12 +77894,12 @@ /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) "sZi" = ( -/obj/machinery/smartfridge/extract/preloaded, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 }, /obj/machinery/light/directional/south, +/obj/machinery/computer/slime_market, /turf/open/floor/iron/dark, /area/station/science/xenobiology) "sZn" = ( @@ -78404,8 +77985,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/stone, /area/station/science/xenobiology) "taL" = ( /obj/structure/table/wood, @@ -78557,6 +78138,13 @@ }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) +"tcQ" = ( +/obj/machinery/corral_corner{ + mapping_id = "1" + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/science/xenobiology) "tcT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -78845,7 +78433,7 @@ name = "Privacy Shutters" }, /turf/open/floor/plating, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "thf" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -79378,7 +78966,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "tpI" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -79400,6 +78988,11 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) +"tpS" = ( +/obj/structure/cable, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/stone, +/area/station/science/xenobiology) "tpZ" = ( /turf/closed/wall, /area/station/maintenance/starboard/fore) @@ -80462,7 +80055,7 @@ "tCH" = ( /obj/machinery/light/directional/west, /mob/living/basic/chicken/brown, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "tCI" = ( /obj/machinery/telecomms/server/presets/command, @@ -80545,9 +80138,6 @@ /turf/open/floor/iron/large, /area/station/science/research) "tDG" = ( -/obj/machinery/computer/camera_advanced/xenobio{ - dir = 1 - }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 @@ -80564,6 +80154,7 @@ pixel_x = -6; req_access = list("science") }, +/obj/machinery/smartfridge/extract/preloaded, /turf/open/floor/iron/dark, /area/station/science/xenobiology) "tDK" = ( @@ -81156,10 +80747,7 @@ /area/station/medical/medbay) "tLp" = ( /obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, +/turf/open/floor/glass/reinforced, /area/station/science/xenobiology) "tLx" = ( /obj/structure/cable, @@ -82345,7 +81933,7 @@ /obj/effect/landmark/start/quartermaster, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "tYE" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/decal/cleanable/dirt, @@ -82855,7 +82443,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "udJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -83649,16 +83237,6 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"uoY" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/white/textured_large, -/area/station/science/xenobiology) "upe" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/line{ @@ -83799,18 +83377,6 @@ "urt" = ( /turf/closed/wall/r_wall, /area/station/science/circuits) -"urx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "urH" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, @@ -84383,11 +83949,6 @@ /obj/machinery/vending/dinnerware, /turf/open/floor/iron/dark, /area/station/service/kitchen) -"uyy" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/sign/warning/secure_area/directional/east, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "uyB" = ( /obj/effect/turf_decal/tile/purple/fourcorners, /obj/effect/turf_decal/stripes/line{ @@ -84833,15 +84394,6 @@ /obj/structure/sign/nanotrasen, /turf/closed/wall, /area/station/service/chapel/funeral) -"uDQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/science/xenobiology) "uDR" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, @@ -85943,6 +85495,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/storage) +"uSs" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/stone, +/area/station/science/xenobiology) "uSL" = ( /obj/effect/turf_decal/box/white{ color = "#9FED58" @@ -86455,7 +86015,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, -/obj/machinery/drone_dispenser, +/obj/machinery/drone_dispenser/preloaded, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 8 }, @@ -87332,7 +86892,7 @@ "vkK" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table/reinforced, +/obj/structure/table, /obj/item/clipboard, /obj/item/reagent_containers/cup/glass/mug/tea{ pixel_x = -7; @@ -87904,7 +87464,7 @@ /turf/open/floor/iron, /area/station/maintenance/port) "vrJ" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 8 }, /obj/machinery/camera/directional/east{ @@ -89020,7 +88580,7 @@ /turf/open/floor/iron/dark, /area/station/science/explab) "vEl" = ( -/obj/machinery/modular_computer/console/preset/engineering, +/obj/machinery/modular_computer/preset/engineering, /obj/structure/cable, /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 1 @@ -89557,7 +89117,7 @@ "vMd" = ( /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "vMe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -89918,22 +89478,10 @@ /turf/open/floor/iron/dark/corner, /area/station/commons/fitness/recreation) "vRo" = ( -/obj/structure/closet/crate/hydroponics, -/obj/item/paper/guides/jobs/hydroponics, -/obj/item/seeds/onion, -/obj/item/seeds/garlic, -/obj/item/seeds/potato, -/obj/item/seeds/tomato, -/obj/item/seeds/carrot, -/obj/item/seeds/grass, -/obj/item/seeds/ambrosia, -/obj/item/seeds/wheat, -/obj/item/seeds/pumpkin, -/obj/effect/spawner/random/contraband/prison, /obj/structure/window/spawner/directional/south, /obj/effect/decal/cleanable/dirt, -/obj/item/seeds/tower, /obj/structure/sign/poster/official/random/directional/north, +/obj/machinery/composters, /turf/open/floor/iron, /area/station/security/prison/garden) "vRB" = ( @@ -90237,13 +89785,13 @@ /turf/open/floor/plating, /area/station/cargo/drone_bay) "vVD" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/machinery/corral_corner{ + mapping_id = "2" }, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, +/obj/machinery/slime_pen_controller{ + mapping_id = "2" + }, +/turf/open/floor/engine, /area/station/science/xenobiology) "vVH" = ( /obj/effect/turf_decal/tile/yellow{ @@ -90577,7 +90125,7 @@ /obj/structure/railing{ dir = 4 }, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "vZV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -90749,7 +90297,7 @@ c_tag = "Security - Office Aft" }, /obj/machinery/computer/security/telescreen/entertainment/directional/south, -/obj/machinery/modular_computer/console/preset/cargochat/security{ +/obj/machinery/modular_computer/preset/cargochat/security{ dir = 1 }, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -91867,7 +91415,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "woc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/wood{ @@ -91946,17 +91494,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"wox" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "xeno5"; - name = "Containment Control"; - req_access = list("xenobiology") - }, -/obj/machinery/light/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron, -/area/station/science/xenobiology) "woB" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/delivery, @@ -92298,8 +91835,13 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "wsd" = ( -/obj/machinery/monkey_recycler, /obj/effect/turf_decal/bot_red, +/obj/machinery/biomass_recycler, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, /turf/open/floor/iron/dark, /area/station/science/xenobiology) "wse" = ( @@ -92411,6 +91953,12 @@ }, /turf/open/floor/iron/dark, /area/station/service/theater) +"wts" = ( +/obj/machinery/corral_corner{ + mapping_id = "2" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "wtv" = ( /obj/structure/bed, /obj/item/bedsheet/medical, @@ -92837,6 +92385,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"wxz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "wxF" = ( /obj/structure/chair/office, /obj/structure/sign/poster/random/directional/north, @@ -93558,17 +93114,6 @@ }, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) -"wFX" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/button/door{ - id = "xeno1"; - name = "Containment Control"; - req_access = list("xenobiology") - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "wGa" = ( /obj/structure/disposalpipe/junction{ dir = 8 @@ -95468,7 +95013,7 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) "xhJ" = ( -/obj/structure/table/reinforced, +/obj/structure/table, /obj/item/computer_disk/quartermaster, /obj/item/computer_disk/quartermaster, /obj/item/computer_disk/quartermaster, @@ -95476,7 +95021,7 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/item/paper_bin/carbon, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "xhR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -95536,7 +95081,7 @@ dir = 8 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "xiG" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/plating, @@ -96231,15 +95776,12 @@ /turf/open/floor/iron/dark, /area/station/science/xenobiology) "xsN" = ( -/obj/structure/disposaloutlet, -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "3" }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/turf/open/floor/iron/dark, +/obj/machinery/light/floor/has_bulb, +/mob/living/basic/slime, +/turf/open/floor/engine, /area/station/science/xenobiology) "xsP" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -96746,13 +96288,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"xzo" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "xzq" = ( /obj/structure/table/reinforced, /obj/item/computer_disk/ordnance{ @@ -97157,7 +96692,6 @@ /turf/open/floor/iron/dark, /area/station/service/abandoned_gambling_den) "xDz" = ( -/obj/structure/chair/office/light, /obj/structure/sign/warning/secure_area/directional/west, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 8 @@ -98809,7 +98343,7 @@ /turf/open/floor/iron, /area/station/science/robotics/mechbay) "xYS" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 8 }, /obj/machinery/computer/security/telescreen/entertainment/directional/east, @@ -98891,7 +98425,7 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "xZM" = ( /obj/docking_port/stationary/escape_pod{ dir = 4 @@ -99115,20 +98649,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"ycY" = ( -/obj/machinery/door/window/brigdoor{ - name = "Creature Pen"; - req_access = list("research") - }, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xeno5"; - name = "Creature Cell #5" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "ydb" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/red{ @@ -99402,20 +98922,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/cargo/lobby) -"ygV" = ( -/obj/machinery/door/window/brigdoor{ - name = "Creature Pen"; - req_access = list("research") - }, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xeno7"; - name = "Creature Cell #7" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "ygW" = ( /obj/machinery/vending/hydroseeds, /obj/effect/turf_decal/bot, @@ -121048,18 +120554,18 @@ qZb dhB gwK pTC -nzt -nwV -lYw -ncJ +nYS +fMl +ddW +fMl aDR -jKx -rTW +oQS +tpS taA jNn -gZx +fMl ddW -nwV +fMl fOp mAt ifk @@ -121305,19 +120811,19 @@ uTb hHK kGj mQO +iLv fMl -shO fMl -bIh -nYS -rhi +fMl +fMl +oQS tLp -pWL -mZd -rUl +taA +fMl fMl -ctW fMl +fMl +iLv oVW oUe jET @@ -121562,19 +121068,19 @@ qZb feF gcr pTC -kWi -sfN +iLv +gvX duq -juv -vVD -eaO -uoY -acD -rOY -sBt +fMl +fMl +oQS +tLp +taA +fMl +fMl xsN -sfN -csY +gvX +iLv mAt aAx nxt @@ -121819,19 +121325,19 @@ pTC hhS iQF pTC -svD -lcK -pQz -fNY -bnd -eaO -hFS -acD -jKZ -pla -esm -lcK -mca +iLv +gvX +fMl +fMl +fMl +oQS +tLp +taA +fMl +fMl +fMl +gvX +iLv mAt xIw pVk @@ -122076,19 +121582,19 @@ pTC hWk gcr mQO +tcQ +gvX fMl -shO fMl -gbj nYS -uDQ -dxU -kSA -mZd -ygV +oQS +tLp +taA +fOp fMl -shO fMl +gvX +fZo oVW wFP pKd @@ -122333,19 +121839,19 @@ pTC ezY iQF pTC -dLh -sfN -duq -pBB -vVD +evj +uSs +uSs +uSs +uSs eaO dxU acD -rOY -gDU -xsN -sfN -pRz +uSs +uSs +uSs +uSs +evj mAt udV qYr @@ -122590,19 +122096,19 @@ pTC elH iQF pTC -svD +pff lcK -pQz -kBO -nbo -eaO +mca +mca +mca +wxz dxU -acD -oyp -cGA -esm -lcK +aDe mca +mca +mca +lcK +pff mAt ilU qYr @@ -122847,19 +122353,19 @@ pTC eDZ rrU mQO +irh +gvX fMl -shO fMl -bgH -nYS -uDQ +wts +oQS dxU -kSA -mZd -nkj +taA +qUa fMl -ctW fMl +gvX +omu oVW fmi qYr @@ -123104,19 +122610,19 @@ pTC woj qcM pTC -kWi -sfN -duq -mWy -vVD -eaO -dbo -acD -rOY -nNT -xsN -sfN -nfT +iLv +gvX +fMl +fMl +fMl +oQS +dxU +taA +fMl +fMl +fMl +gvX +iLv mAt kzt xQq @@ -123361,19 +122867,19 @@ pTC woj rrU pTC -svD -lcK +iLv +gvX pQz -ghQ -wFX -eaO -qrU -acD -wox -nNR +fMl +fMl +oQS +dxU +taA +fMl +fMl esm -lcK -mca +gvX +iLv mAt cZl mPF @@ -123618,19 +123124,19 @@ pTC eDZ rwI mQO +iLv fMl -ctW fMl -iWX -nYS -bXL -xzo -urx -mZd -ycY fMl -shO fMl +oQS +dxU +taA +fMl +fMl +fMl +fMl +iLv oVW oTD dOO @@ -123875,19 +123381,19 @@ pTC aMM fwJ pTC -pmw -uyy -duq -gED +wts +fMl +laX +fMl vVD -jKx -rTW +oQS +pAi taA rOY -kYq -xsN -uyy -pRz +fMl +laX +fMl +qUa mAt iIn srI @@ -145146,7 +144652,7 @@ awl ivt krp haq -fFf +iWR jmp cQo gkP diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 0a7dc2984940..6cae56e2d386 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -176,13 +176,6 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"aey" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Xenobiology Pens - Starboard Fore"; - network = list("ss13","rd","xeno") - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "aez" = ( /obj/structure/table, /obj/item/clothing/mask/gas, @@ -573,7 +566,7 @@ /area/station/commons/dorms) "alT" = ( /turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "alW" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 1 @@ -1048,17 +1041,6 @@ /obj/item/storage/crayons, /turf/open/floor/iron, /area/station/commons/dorms) -"asb" = ( -/obj/structure/sink/directional/west, -/obj/structure/cable, -/obj/machinery/button/door/directional/east{ - id = "xenobio10"; - layer = 4; - name = "Xenobio Pen 10 Blast DOors"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "asg" = ( /obj/structure/closet, /obj/effect/spawner/random/maintenance/two, @@ -1138,6 +1120,14 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/central) +"atw" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Xeniobiology - Xenobiology Computers"; + name = "xenobiology camera"; + network = list("ss13","xeno","rd") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "aty" = ( /obj/structure/urinal/directional/north, /obj/effect/landmark/start/hangover, @@ -1429,13 +1419,6 @@ }, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain) -"axD" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "axF" = ( /obj/effect/spawner/random/structure/billboard/nanotrasen, /turf/open/lava/plasma/ice_moon, @@ -1881,15 +1864,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron, /area/mine/laborcamp) -"aHz" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio4"; - name = "Xenobio Pen 4 Blast Door" - }, -/turf/open/floor/plating, -/area/station/science/xenobiology) "aHC" = ( /obj/machinery/light/directional/south, /obj/machinery/power/apc/auto_name/directional/south, @@ -1990,6 +1964,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"aIV" = ( +/obj/machinery/corral_corner{ + mapping_id = "1" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "1" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "aJh" = ( /obj/item/kirbyplants/random, /turf/open/floor/iron, @@ -2123,15 +2106,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"aLA" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio7"; - name = "Xenobio Pen 7 Blast Door" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/science/xenobiology) "aLJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -2153,7 +2127,7 @@ /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) "aLS" = ( -/obj/machinery/modular_computer/console/preset/engineering, +/obj/machinery/modular_computer/preset/engineering, /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -2686,6 +2660,10 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) +"aUq" = ( +/mob/living/basic/slime, +/turf/open/floor/engine, +/area/station/science/xenobiology) "aUr" = ( /obj/effect/turf_decal/bot, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -2907,7 +2885,6 @@ /area/station/ai_monitored/turret_protected/aisat/hallway) "aXY" = ( /obj/structure/rack, -/obj/item/circuitboard/machine/monkey_recycler, /obj/structure/sign/poster/random/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/fore) @@ -3674,19 +3651,6 @@ /obj/effect/turf_decal/tile/red/full, /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/medical) -"bjn" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; - name = "Containment Pen 11"; - req_access = list("xenobiology") - }, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio11"; - name = "Xenobio Pen 11 Blast Door" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "bjp" = ( /turf/open/floor/iron/dark/textured_edge{ dir = 4 @@ -3907,19 +3871,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/medical/medbay/aft) -"bnh" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; - name = "Containment Pen 7"; - req_access = list("xenobiology") - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio7"; - name = "Xenobio Pen 7 Blast Door" - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/science/xenobiology) "bnl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4280,7 +4231,7 @@ /turf/open/floor/iron/large, /area/station/engineering/main) "btQ" = ( -/obj/machinery/modular_computer/console/preset/curator{ +/obj/machinery/modular_computer/preset/curator{ dir = 8 }, /obj/item/radio/intercom/directional/east, @@ -4665,9 +4616,9 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/structure/chair/stool/directional/north, +/obj/machinery/holopad, /turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "bAk" = ( /obj/machinery/firealarm/directional/west, /turf/open/floor/carpet, @@ -5433,17 +5384,6 @@ /obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"bKI" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "bKN" = ( /obj/machinery/door/airlock/security/glass{ name = "Brig Control" @@ -5659,6 +5599,11 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) +"bOq" = ( +/obj/structure/railing, +/obj/machinery/slime_extract_requestor, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "bOu" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -5899,7 +5844,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "bRC" = ( /obj/structure/chair/plastic{ dir = 8 @@ -6064,17 +6009,11 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "bUK" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio5"; - name = "Xenobio Pen 5 Blast Door" +/obj/machinery/corral_corner{ + mapping_id = "5" }, -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen 5"; - req_access = list("xenobiology") +/obj/machinery/slime_pen_controller{ + mapping_id = "5" }, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -6412,7 +6351,7 @@ /turf/open/floor/iron/textured, /area/station/ai_monitored/command/storage/eva) "bZG" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 1 }, /obj/effect/decal/cleanable/dirt/dust, @@ -7185,14 +7124,7 @@ /turf/open/floor/iron, /area/station/science/ordnance/testlab) "clW" = ( -/obj/structure/cable, -/obj/machinery/button/door/directional/west{ - id = "xenobio1"; - layer = 4; - name = "Xenobio Pen 1 Blast Door"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron, +/turf/open/floor/stone, /area/station/science/xenobiology) "cma" = ( /obj/structure/closet/firecloset, @@ -7351,15 +7283,15 @@ /turf/open/floor/iron, /area/station/cargo/sorting) "cnU" = ( -/obj/machinery/modular_computer/console/preset/id, /obj/machinery/computer/security/telescreen/vault{ pixel_y = 30 }, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 }, +/obj/machinery/computer/cargo, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "coa" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment, @@ -7910,9 +7842,13 @@ /turf/open/floor/wood, /area/station/maintenance/port/aft) "cyh" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, +/obj/machinery/light/floor/has_bulb, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "cyo" = ( /obj/machinery/stasis{ @@ -8563,6 +8499,11 @@ /obj/effect/turf_decal/tile/green/anticorner/contrasted{ dir = 8 }, +/obj/structure/closet/crate/bin, +/obj/item/trash/sosjerky, +/obj/item/trash/can, +/obj/item/trash/boritos, +/obj/effect/spawner/random/contraband/prison, /turf/open/floor/iron, /area/station/security/prison/garden) "cGY" = ( @@ -8821,8 +8762,10 @@ /turf/open/floor/iron/dark/side, /area/station/security/processing) "cKA" = ( -/obj/structure/window/reinforced/spawner/directional/north{ - pixel_y = 2 +/obj/machinery/camera/directional/west{ + c_tag = "Xenobiology - Secure Cell Interior"; + name = "xenobiology camera"; + network = list("ss13","xeno","rd") }, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -9060,18 +9003,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"cNI" = ( -/obj/machinery/door/poddoor/preopen{ - id = "xenobio7"; - name = "Xenobio Pen 7 Blast Door" - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/engine, -/area/station/science/xenobiology) "cNQ" = ( /obj/structure/closet/wardrobe/grey, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -9627,20 +9558,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"cXX" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen 11"; - req_access = list("xenobiology") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/science/xenobiology) "cXZ" = ( /obj/structure/table/wood, /obj/machinery/computer/security/wooden_tv, @@ -9954,7 +9871,7 @@ }, /obj/effect/landmark/event_spawn, /turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "dct" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10567,15 +10484,8 @@ /turf/open/floor/iron, /area/station/hallway/secondary/service) "dmj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/obj/machinery/button/door/directional/east{ - id = "xenobio11"; - layer = 4; - name = "Xenobio Pen 11 Blast DOors"; - req_access = list("xenobiology") - }, -/obj/structure/cable, -/turf/open/floor/iron/white, +/obj/machinery/duct, +/turf/open/floor/stone, /area/station/science/xenobiology) "dms" = ( /obj/structure/closet/crate, @@ -10710,15 +10620,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"doK" = ( -/obj/machinery/button/door/directional/east{ - id = "xenobio8"; - layer = 4; - name = "Xenobio Pen 8 Blast DOors"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "doT" = ( /obj/item/hand_labeler, /obj/item/assembly/timer, @@ -10758,14 +10659,10 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "dpC" = ( -/obj/structure/closet/crate/bin, -/obj/effect/spawner/random/contraband/prison, -/obj/item/trash/sosjerky, -/obj/item/trash/boritos, -/obj/item/trash/can, /obj/effect/turf_decal/tile/green/anticorner/contrasted{ dir = 1 }, +/obj/machinery/composters, /turf/open/floor/iron, /area/station/security/prison/garden) "dpH" = ( @@ -10934,16 +10831,11 @@ /area/icemoon/surface/outdoors/nospawn) "dsf" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/paper_bin/carbon{ - pixel_x = -3; - pixel_y = 7 - }, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "dsj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/south, @@ -11037,7 +10929,7 @@ dir = 4 }, /turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "dtb" = ( /obj/structure/bookcase/random/reference, /turf/open/floor/wood, @@ -11214,12 +11106,11 @@ /area/station/security/brig) "dwY" = ( /obj/machinery/light_switch/directional/west, -/obj/structure/closet/secure_closet/quartermaster, /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 8 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "dxg" = ( /obj/structure/table, /obj/item/stack/sheet/plasteel{ @@ -11938,19 +11829,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/garden) -"dIS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio3"; - name = "Xenobio Pen 3 Blast Door" - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/structure/sign/warning/electric_shock, -/turf/open/floor/plating, -/area/station/science/xenobiology) "dIZ" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 5 @@ -11960,13 +11838,13 @@ /turf/open/floor/iron/dark, /area/station/medical/pathology) "dJx" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio3"; - name = "Xenobio Pen 3 Blast Door" +/obj/machinery/corral_corner{ + mapping_id = "3" }, -/turf/open/floor/plating, +/obj/machinery/slime_pen_controller{ + mapping_id = "3" + }, +/turf/open/floor/engine, /area/station/science/xenobiology) "dJy" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ @@ -12076,12 +11954,10 @@ /turf/open/floor/iron, /area/station/hallway/primary/fore) "dLr" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/disposaloutlet{ - dir = 4 +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "4"; + dir = 1; + pixel_y = 0 }, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -12305,16 +12181,6 @@ }, /turf/open/floor/iron, /area/station/cargo/miningdock) -"dPy" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Xenobiology Kill Chamber"; - network = list("ss13","rd","xeno") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/iron/freezer, -/area/station/science/xenobiology) "dPP" = ( /obj/structure/closet/toolcloset, /turf/open/floor/plating, @@ -12359,20 +12225,6 @@ /obj/structure/sign/departments/rndserver/directional/south, /turf/open/floor/iron/white, /area/station/science/research) -"dQZ" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen 9"; - req_access = list("xenobiology") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/science/xenobiology) "dRc" = ( /obj/structure/table, /obj/machinery/firealarm/directional/west, @@ -12702,7 +12554,7 @@ /turf/open/floor/grass, /area/station/security/prison/garden) "dWX" = ( -/obj/machinery/modular_computer/console/preset/engineering, +/obj/machinery/modular_computer/preset/engineering, /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 8 }, @@ -14408,48 +14260,6 @@ pixel_y = 7; pixel_x = -8 }, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/friday{ - pixel_y = 2; - pixel_x = 9 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, /turf/open/floor/glass, /area/station/service/library) "ezJ" = ( @@ -14922,7 +14732,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/turf/open/floor/iron/freezer, +/turf/closed/wall/r_wall, /area/station/science/xenobiology) "eGW" = ( /obj/effect/turf_decal/tile/red{ @@ -15844,21 +15654,6 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) -"eWh" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen 2"; - req_access = list("xenobiology") - }, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio2"; - name = "Xenobio Pen 2 Blast Door" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "eWi" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/landmark/event_spawn, @@ -16045,7 +15840,7 @@ /turf/open/floor/engine/n2o, /area/station/engineering/atmos) "eZi" = ( -/obj/machinery/drone_dispenser, +/obj/machinery/drone_dispenser/preloaded, /turf/open/floor/plating, /area/station/maintenance/aft/greater) "eZj" = ( @@ -16346,10 +16141,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel) -"ffz" = ( -/obj/machinery/processor/slime, -/turf/open/floor/iron, -/area/station/science/xenobiology) "ffQ" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 10 @@ -16583,19 +16374,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/grimy, /area/station/maintenance/aft/greater) -"fjt" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; - name = "Containment Pen 9"; - req_access = list("xenobiology") - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio9"; - name = "Xenobio Pen 9 Blast Door" - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/science/xenobiology) "fjw" = ( /obj/machinery/smartfridge, /turf/closed/wall, @@ -16740,9 +16518,11 @@ /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) "fma" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/plating, +/obj/machinery/light/floor/has_bulb, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "fmc" = ( /turf/closed/wall, @@ -17322,10 +17102,6 @@ "fwB" = ( /turf/closed/mineral/snowmountain/coldroom, /area/station/service/kitchen/coldroom) -"fwC" = ( -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "fwD" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 @@ -18366,13 +18142,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"fPv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/turf/open/floor/iron/freezer, -/area/station/science/xenobiology) "fPx" = ( /obj/docking_port/stationary/random/icemoon{ dir = 8; @@ -19025,7 +18794,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 8 }, /turf/open/floor/iron/smooth_corner{ @@ -19268,6 +19037,13 @@ /obj/item/food/piedough, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) +"gdf" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "6"; + dir = 2 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "gdg" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/components/unary/passive_vent{ @@ -19507,15 +19283,6 @@ /obj/effect/turf_decal/trimline/yellow/line, /turf/open/floor/iron/dark/side, /area/station/security/prison/workout) -"giP" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/structure/disposaloutlet{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "giQ" = ( /obj/item/radio/intercom/directional/north, /obj/structure/cable, @@ -20215,6 +19982,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, +/obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/xenobiology) "guS" = ( @@ -20547,21 +20315,6 @@ /obj/structure/sign/warning/cold_temp/directional/west, /turf/open/floor/iron, /area/station/cargo/miningdock) -"gBb" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen 3"; - req_access = list("xenobiology") - }, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio3"; - name = "Xenobio Pen 3 Blast Door" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "gBc" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -20660,14 +20413,9 @@ /turf/open/floor/iron, /area/station/command/heads_quarters/hop) "gCo" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/directional/north{ - pixel_y = 2 - }, -/obj/structure/disposaloutlet{ - dir = 8 +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "1"; + dir = 1 }, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -21203,10 +20951,6 @@ "gKQ" = ( /turf/closed/wall, /area/station/security/courtroom) -"gLj" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/engine, -/area/station/science/xenobiology) "gLk" = ( /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron, @@ -21337,6 +21081,12 @@ /obj/item/reagent_containers/dropper, /turf/open/floor/iron/cafeteria, /area/station/science/lab) +"gND" = ( +/obj/machinery/corral_corner{ + mapping_id = "1" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "gNH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -21443,7 +21193,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "gPE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23045,18 +22795,6 @@ /obj/structure/girder, /turf/closed/wall, /area/station/maintenance/starboard/aft) -"htp" = ( -/obj/machinery/door/poddoor/preopen{ - id = "xenobio2"; - name = "Xenobio Pen 2 Blast Door" - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/science/xenobiology) "hty" = ( /obj/item/stack/rods, /turf/open/misc/asteroid/snow/icemoon, @@ -23677,18 +23415,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"hEW" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/science/xenobiology) "hEZ" = ( /obj/structure/ladder, /turf/open/floor/plating, @@ -23888,19 +23614,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore) -"hJi" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; - name = "Containment Pen 6"; - req_access = list("xenobiology") - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio6"; - name = "Xenobio Pen 6 Blast Door" - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/science/xenobiology) "hJx" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -24183,13 +23896,6 @@ /obj/effect/turf_decal/tile/brown/fourcorners, /turf/open/floor/iron/white, /area/station/medical/break_room) -"hOU" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Xenobiology Pens - Port Fore"; - network = list("ss13","rd","xeno") - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "hOX" = ( /obj/machinery/camera/directional/west{ c_tag = "Atmospherics - North West" @@ -24696,7 +24402,9 @@ }, /area/station/security/prison/rec) "hWu" = ( -/obj/machinery/light/directional/east, +/obj/machinery/corral_corner{ + mapping_id = "6" + }, /turf/open/floor/engine, /area/station/science/xenobiology) "hWP" = ( @@ -24806,6 +24514,13 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) +"hZT" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "5"; + dir = 2 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "iag" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, @@ -24815,15 +24530,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) -"iar" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio10"; - name = "Xenobio Pen 10 Blast Door" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/science/xenobiology) "iav" = ( /obj/structure/closet/secure_closet/labor_camp_security, /obj/effect/turf_decal/tile/red/half/contrasted, @@ -24852,7 +24558,7 @@ /turf/open/floor/plating, /area/station/engineering/storage/tech) "iaS" = ( -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /obj/item/paper/fluff/ids_for_dummies, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 @@ -25013,6 +24719,12 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"ibX" = ( +/obj/machinery/corral_corner{ + mapping_id = "3" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "ica" = ( /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, @@ -25376,15 +25088,6 @@ }, /turf/open/floor/wood, /area/station/hallway/secondary/service) -"ihN" = ( -/obj/machinery/button/door/directional/west{ - id = "xenobio4"; - layer = 4; - name = "Xenobio Pen 4 Blast Door"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "iig" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -25619,7 +25322,7 @@ name = "Privacy Shutters" }, /turf/open/floor/plating, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "ikW" = ( /obj/machinery/door/firedoor/border_only, /turf/open/floor/iron/dark/corner{ @@ -25725,9 +25428,8 @@ /area/station/science/ordnance) "inm" = ( /obj/structure/table/wood, -/obj/structure/cassette_rack{ - pixel_x = -5; - pixel_y = 12 +/obj/structure/cassette_rack/prefilled{ + pixel_y = 8 }, /turf/open/floor/glass, /area/station/service/library) @@ -26410,20 +26112,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) -"izA" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen 8"; - req_access = list("xenobiology") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/science/xenobiology) "izC" = ( /turf/closed/wall, /area/station/service/bar/atrium) @@ -26578,7 +26266,7 @@ /turf/open/floor/iron, /area/station/cargo/sorting) "iBO" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 4 }, /turf/open/floor/iron/white/side{ @@ -26689,18 +26377,6 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/unexplored/rivers/no_monsters) -"iDG" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; - name = "Containment Pen 3"; - req_access = list("xenobiology") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/science/xenobiology) "iDQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, @@ -26751,20 +26427,11 @@ /turf/open/floor/plating/icemoon, /area/station/security/execution/education) "iER" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, +/obj/machinery/light/floor/has_bulb, /obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/camera/directional/south{ - c_tag = "Xenobiology Pens Hall - Aft"; - network = list("ss13","rd","xeno_pens") + dir = 4 }, -/turf/open/floor/iron, +/turf/open/floor/stone, /area/station/science/xenobiology) "iFc" = ( /obj/effect/turf_decal/tile/red/half{ @@ -27825,7 +27492,9 @@ /turf/open/floor/iron/dark/textured, /area/station/security/prison) "iVT" = ( -/obj/machinery/computer/camera_advanced/xenobio, +/obj/structure/table/glass, +/obj/item/disk/vacuum_upgrade/biomass, +/obj/item/vacuum_pack, /turf/open/floor/iron, /area/station/science/xenobiology) "iVU" = ( @@ -29538,18 +29207,6 @@ /obj/structure/flora/grass/both/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"jAF" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/north{ - dir = 4; - name = "Containment Pen 5"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "jAO" = ( /obj/effect/turf_decal/siding/yellow{ dir = 8 @@ -30124,12 +29781,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"jKI" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/iron/freezer, -/area/station/science/xenobiology) "jKJ" = ( /obj/effect/mapping_helpers/airlock/unres{ dir = 1 @@ -30439,7 +30090,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/modular_computer/console/preset/cargochat/service{ +/obj/machinery/modular_computer/preset/cargochat/service{ dir = 4 }, /turf/open/floor/plating, @@ -30719,10 +30370,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/central/greater) -"jSW" = ( -/mob/living/simple_animal/slime, -/turf/open/floor/engine, -/area/station/science/xenobiology) "jTf" = ( /obj/structure/fence{ dir = 1 @@ -31113,16 +30760,6 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) -"kaW" = ( -/obj/machinery/light/directional/east, -/obj/machinery/button/door/directional/east{ - id = "xenobio9"; - layer = 4; - name = "Xenobio Pen 9 Blast DOors"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "kaX" = ( /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/white/side{ @@ -31282,14 +30919,11 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/modular_computer/console/preset/civilian{ - dir = 8 - }, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "kdc" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ dir = 8 @@ -31648,10 +31282,6 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"kin" = ( -/obj/machinery/pdapainter/supply, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) "kir" = ( /obj/machinery/door/airlock/external{ name = "External Access" @@ -31966,7 +31596,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "kna" = ( -/obj/machinery/modular_computer/console/preset/cargochat/engineering, +/obj/machinery/modular_computer/preset/cargochat/engineering, /obj/effect/turf_decal/tile/brown/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/lobby) @@ -32382,7 +32012,7 @@ "ksU" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, -/obj/machinery/modular_computer/console/preset/civilian, +/obj/machinery/modular_computer/preset/civilian, /obj/effect/turf_decal/bot_white, /obj/machinery/newscaster/directional/north, /obj/effect/turf_decal/tile/blue/opposingcorners, @@ -33207,6 +32837,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/lobby) +"kGV" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "2"; + dir = 1 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "kHb" = ( /obj/structure/closet/secure_closet/personal{ anchored = 1 @@ -33896,6 +33533,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, /turf/open/floor/iron/showroomfloor, /area/station/engineering/atmos) +"kRB" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/atm, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "kRE" = ( /obj/machinery/computer/mech_bay_power_console{ dir = 8 @@ -34493,7 +34137,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "lbk" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -34719,15 +34363,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"lfs" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/disposaloutlet{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "lfF" = ( /obj/structure/sign/warning/cold_temp/directional/west, /obj/structure/sign/warning/gas_mask/directional/east, @@ -34740,12 +34375,12 @@ /obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/machinery/door/airlock/command{ - name = "Quartermaster's Office" +/obj/machinery/door/airlock/mining{ + name = "Quatermaster's Office" }, /obj/effect/turf_decal/tile/brown/fourcorners, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "lfL" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -34902,8 +34537,11 @@ /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, +/obj/machinery/modular_computer/preset/civilian{ + dir = 8 + }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "lix" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -36056,20 +35694,6 @@ }, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison) -"lBZ" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen 7"; - req_access = list("xenobiology") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/science/xenobiology) "lCb" = ( /obj/effect/landmark/start/assistant, /obj/structure/cable, @@ -36383,6 +36007,13 @@ /obj/item/storage/toolbox/emergency, /turf/open/floor/iron, /area/station/hallway/primary/port) +"lGB" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "lGK" = ( /obj/machinery/vending/cigarette, /obj/machinery/button/door{ @@ -36613,19 +36244,6 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) -"lMu" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio5"; - name = "Xenobio Pen 5 Blast Door" - }, -/obj/structure/sign/warning/electric_shock, -/turf/open/floor/plating, -/area/station/science/xenobiology) "lMC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -36656,16 +36274,6 @@ }, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison) -"lNo" = ( -/obj/machinery/light/directional/east, -/obj/machinery/button/door/directional/east{ - id = "xenobio6"; - layer = 4; - name = "Xenobio Pen 6 Blast DOors"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "lNy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37340,12 +36948,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/office) -"lZX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/freezer, -/area/station/science/xenobiology) "mae" = ( /obj/structure/statue/snow/snowman, /turf/open/misc/asteroid/snow/icemoon, @@ -37356,15 +36958,15 @@ /turf/open/floor/iron, /area/station/commons/dorms) "maO" = ( -/obj/machinery/disposal/bin, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/machinery/light/floor/has_bulb, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 }, -/obj/structure/disposalpipe/trunk{ +/obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/turf/open/floor/iron, +/turf/open/floor/stone, /area/station/science/xenobiology) "maQ" = ( /obj/machinery/door/airlock/external{ @@ -37609,7 +37211,7 @@ /turf/closed/wall, /area/station/hallway/secondary/service) "meg" = ( -/obj/machinery/modular_computer/console/preset/cargochat/science{ +/obj/machinery/modular_computer/preset/cargochat/science{ dir = 1 }, /obj/item/radio/intercom/directional/south, @@ -38297,6 +37899,13 @@ dir = 4 }, /area/station/security/brig/entrance) +"mqK" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "3"; + dir = 1 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "mqO" = ( /obj/machinery/power/port_gen/pacman, /turf/open/floor/plating, @@ -38715,6 +38324,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"myS" = ( +/obj/machinery/duct, +/turf/open/floor/engine, +/area/station/science/xenobiology) "myZ" = ( /obj/structure/lattice/catwalk, /turf/open/openspace/icemoon/keep_below, @@ -39698,7 +39311,7 @@ /turf/open/floor/iron/smooth, /area/mine/laborcamp/security) "mQr" = ( -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /obj/item/radio/intercom/directional/east, /obj/machinery/camera{ c_tag = "Chief Medical Office North"; @@ -39922,6 +39535,10 @@ }, /turf/open/floor/iron/cafeteria, /area/station/security/prison/work) +"mVO" = ( +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "mVY" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -41091,18 +40708,6 @@ /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"nmj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio4"; - name = "Xenobio Pen 4 Blast Door" - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/science/xenobiology) "nmk" = ( /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/engine, @@ -41681,7 +41286,6 @@ /turf/open/floor/wood, /area/station/service/library) "nuH" = ( -/obj/machinery/computer/security/qm, /obj/machinery/requests_console/directional/west{ assistance_requestable = 1; department = "Quartermaster's Desk"; @@ -41692,8 +41296,13 @@ /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 1 }, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Quartermaster's Office"; + name = "Quartermaster's Fax Machine" + }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "nuN" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -41822,7 +41431,7 @@ }, /obj/effect/turf_decal/tile/brown/anticorner/contrasted, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "nxM" = ( /turf/closed/wall, /area/station/maintenance/department/medical/morgue) @@ -43534,17 +43143,6 @@ "nUO" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/directional/west, -/obj/structure/table, -/obj/item/pen/red, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/folder/yellow, -/obj/machinery/keycard_auth/directional/west{ - pixel_x = -25; - pixel_y = -5 - }, /obj/machinery/button/door/directional/west{ id = "qmprivacy"; name = "Privacy Shutters Control"; @@ -43554,8 +43152,14 @@ /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, +/obj/structure/table, +/obj/item/paper_bin/carbon{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/folder/yellow, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "nVc" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/yellow/filled/corner{ @@ -43632,7 +43236,7 @@ /obj/structure/table, /obj/item/stamp/qm, /turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "nWy" = ( /obj/structure/sign/poster/official/work_for_a_future, /turf/closed/wall, @@ -43969,18 +43573,10 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "odd" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen 6"; - req_access = list("xenobiology") - }, /obj/effect/turf_decal/stripes/line{ - dir = 8 + dir = 4 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, +/turf/open/floor/stone, /area/station/science/xenobiology) "odi" = ( /obj/item/toy/snowball{ @@ -44296,19 +43892,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) -"oir" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio10"; - name = "Xenobio Pen 10 Blast Door" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/electric_shock, -/turf/open/floor/plating, -/area/station/science/xenobiology) "oiy" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat/service) @@ -44680,11 +44263,6 @@ /obj/effect/mapping_helpers/iannewyear, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) -"ooo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/processor/slime, -/turf/open/floor/iron, -/area/station/science/xenobiology) "oop" = ( /obj/machinery/door/airlock/external{ name = "External Access" @@ -45133,7 +44711,7 @@ "ouP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/obj/machinery/portable_atmospherics/canister, +/obj/machinery/plumbing/ooze_compressor, /turf/open/floor/iron/white, /area/station/science/xenobiology) "ouX" = ( @@ -45144,12 +44722,12 @@ /turf/open/floor/iron/white, /area/station/science/genetics) "ouZ" = ( -/obj/machinery/computer/cargo, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 }, +/obj/machinery/computer/security/qm, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "ovm" = ( /obj/structure/cable, /turf/closed/wall/r_wall, @@ -45334,6 +44912,14 @@ /obj/structure/table, /turf/open/floor/wood, /area/station/command/meeting_room) +"oyt" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "oyy" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 1 @@ -46406,15 +45992,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/breakroom) -"oQo" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio5"; - name = "Xenobio Pen 5 Blast Door" - }, -/turf/open/floor/plating, -/area/station/science/xenobiology) "oQp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46832,15 +46409,6 @@ "oXq" = ( /turf/open/floor/iron/white, /area/station/medical/cryo) -"oXr" = ( -/obj/machinery/door/airlock/research/glass{ - name = "Kill Chamber"; - normalspeed = 0 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, -/turf/open/floor/iron/freezer, -/area/station/science/xenobiology) "oXs" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 9 @@ -47834,6 +47402,7 @@ "ppp" = ( /obj/structure/railing, /obj/effect/turf_decal/stripes/line, +/obj/machinery/computer/slime_market, /turf/open/floor/iron/white, /area/station/science/xenobiology) "ppq" = ( @@ -47855,8 +47424,9 @@ /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, +/obj/structure/closet/secure_closet/quartermaster, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "ppD" = ( /obj/structure/chair/office{ dir = 8 @@ -48001,15 +47571,6 @@ /obj/machinery/telecomms/server/presets/security, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"prH" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio11"; - name = "Xenobio Pen 11 Blast Door" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/science/xenobiology) "psb" = ( /turf/closed/wall/ice, /area/icemoon/underground/explored) @@ -48120,7 +47681,7 @@ /turf/open/floor/plating, /area/station/engineering/engine_smes) "ptB" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 8 }, /turf/open/floor/wood, @@ -48311,7 +47872,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "pwv" = ( /obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ color = "#0000ff"; @@ -50232,18 +49793,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/mine/laborcamp) -"qbq" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio11"; - name = "Xenobio Pen 11 Blast Door" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/science/xenobiology) "qbA" = ( /obj/structure/cable, /obj/machinery/airalarm/directional/east, @@ -50952,17 +50501,22 @@ /obj/machinery/status_display/supply{ pixel_x = -32 }, -/obj/structure/table, /obj/item/coin/silver, /obj/item/computer_disk/quartermaster, /obj/item/computer_disk/quartermaster, /obj/item/computer_disk/quartermaster, -/obj/item/clipboard, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, +/obj/item/pen/red, +/obj/item/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/structure/table, +/obj/item/clipboard, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "qpr" = ( /obj/effect/turf_decal/trimline/dark_blue/line, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -51850,9 +51404,9 @@ "qEv" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/computer/camera_advanced/xenobio{ - dir = 1 - }, +/obj/structure/table/glass, +/obj/item/disk/vacuum_upgrade/biomass, +/obj/item/vacuum_pack, /turf/open/floor/iron, /area/station/science/xenobiology) "qEz" = ( @@ -53343,7 +52897,7 @@ /area/station/ai_monitored/turret_protected/aisat/maint) "rbC" = ( /turf/closed/wall, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "rbT" = ( /obj/structure/ore_box, /obj/effect/decal/cleanable/dirt, @@ -53534,19 +53088,6 @@ /obj/item/flashlight/flare/candle, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"reT" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; - name = "Containment Pen 8"; - req_access = list("xenobiology") - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio8"; - name = "Xenobio Pen 8 Blast Door" - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/science/xenobiology) "rfh" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -53837,15 +53378,6 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"rjT" = ( -/obj/machinery/button/door/directional/west{ - id = "xenobio3"; - layer = 4; - name = "Xenobio Pen 3 Blast Door"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "rkc" = ( /obj/effect/turf_decal/siding/yellow, /obj/effect/turf_decal/siding/yellow{ @@ -54078,18 +53610,6 @@ /obj/effect/spawner/random/trash/janitor_supplies, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"roA" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; - name = "Containment Pen 4"; - req_access = list("xenobiology") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/science/xenobiology) "roH" = ( /obj/structure/chair/pew/right, /turf/open/floor/wood, @@ -54255,14 +53775,6 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"rsC" = ( -/obj/machinery/light/directional/west, -/obj/machinery/camera/directional/west{ - c_tag = "Xenobiology Pens - Port Mid"; - network = list("ss13","rd","xeno") - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "rsL" = ( /obj/structure/cable, /turf/open/floor/circuit, @@ -54560,17 +54072,13 @@ /turf/open/floor/iron/white/smooth_large, /area/station/service/kitchen/diner) "rxM" = ( -/obj/machinery/door/poddoor/preopen{ - id = "xenobio8"; - name = "Xenobio Pen 8 Blast Door" +/obj/machinery/corral_corner{ + mapping_id = "4" }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/slime_pen_controller{ + mapping_id = "4" }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/electric_shock, -/turf/open/floor/plating, +/turf/open/floor/engine, /area/station/science/xenobiology) "rxW" = ( /turf/closed/mineral/random/snow, @@ -55053,7 +54561,7 @@ /turf/open/floor/engine, /area/station/science/explab) "rEd" = ( -/obj/machinery/modular_computer/console/preset/research{ +/obj/machinery/modular_computer/preset/research{ dir = 4 }, /obj/effect/turf_decal/stripes/line{ @@ -55333,16 +54841,10 @@ /turf/open/floor/plating, /area/station/engineering/main) "rJe" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; - name = "Containment Pen 1"; - req_access = list("xenobiology") - }, /obj/effect/turf_decal/stripes/line{ - dir = 4 + dir = 8 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, +/turf/open/floor/stone, /area/station/science/xenobiology) "rJv" = ( /obj/machinery/bluespace_beacon, @@ -56124,13 +55626,8 @@ /turf/open/floor/iron/smooth, /area/mine/mechbay) "rXD" = ( -/obj/machinery/button/door/directional/east{ - id = "xenobio7"; - layer = 4; - name = "Xenobio Pen 7 Blast DOors"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, +/obj/machinery/duct, +/turf/open/floor/glass/reinforced, /area/station/science/xenobiology) "rXN" = ( /obj/machinery/door/firedoor, @@ -56241,7 +55738,7 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) "rYZ" = ( -/obj/machinery/modular_computer/console/preset/civilian, +/obj/machinery/modular_computer/preset/civilian, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) "rZa" = ( @@ -56584,6 +56081,7 @@ "sfv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/xenobiology) "sfy" = ( @@ -56751,6 +56249,10 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/sepia, /area/station/service/library) +"sim" = ( +/obj/structure/chair/stool/directional/north, +/turf/open/floor/carpet, +/area/station/cargo/quartermaster) "sin" = ( /obj/machinery/door/poddoor/preopen{ id = "maint3" @@ -56928,15 +56430,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"slp" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio9"; - name = "Xenobio Pen 9 Blast Door" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/science/xenobiology) "slv" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/green/corner{ @@ -59356,13 +58849,6 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/open/floor/iron/smooth, /area/mine/eva/lower) -"taf" = ( -/obj/effect/landmark/start/quartermaster, -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) "tai" = ( /obj/machinery/door/airlock/maintenance{ name = "Chemistry Maintenance" @@ -59733,16 +59219,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"tiQ" = ( -/obj/structure/sink/directional/east, -/obj/machinery/button/door/directional/west{ - id = "xenobio2"; - layer = 4; - name = "Xenobio Pen 2 Blast Door"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "tiV" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -59891,7 +59367,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/turf/open/floor/iron/freezer, +/turf/closed/wall/r_wall, /area/station/science/xenobiology) "tkS" = ( /obj/item/radio/intercom/directional/east, @@ -60277,10 +59753,6 @@ /obj/structure/disposalpipe/junction/flip, /turf/open/floor/iron/dark, /area/station/science/breakroom) -"tsa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/turf/open/floor/iron/freezer, -/area/station/science/xenobiology) "tsh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61735,19 +61207,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/cargo/lobby) -"tOf" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio1"; - name = "Xenobio Pen 1 Blast Door" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/warning/electric_shock, -/turf/open/floor/plating, -/area/station/science/xenobiology) "tOi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62079,15 +61538,6 @@ /obj/effect/spawner/random/trash/soap, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"tWd" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio6"; - name = "Xenobio Pen 6 Blast Door" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/science/xenobiology) "tWp" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -62363,7 +61813,7 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage) "tZO" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/structure/sign/poster/official/build{ @@ -62512,21 +61962,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/science/breakroom) -"ucl" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen 4"; - req_access = list("xenobiology") - }, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio4"; - name = "Xenobio Pen 4 Blast Door" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "ucn" = ( /obj/item/toy/snowball{ pixel_x = 9; @@ -64253,7 +63688,7 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "uGz" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 4 }, /obj/machinery/camera/directional/west{ @@ -65188,7 +64623,7 @@ /turf/open/floor/iron/white/smooth_large, /area/station/medical/chemistry) "uXW" = ( -/obj/machinery/modular_computer/console/preset/cargochat/security{ +/obj/machinery/modular_computer/preset/cargochat/security{ dir = 4 }, /obj/machinery/power/apc/auto_name/directional/north, @@ -65522,17 +64957,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/cargo/miningdock) -"vdr" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "vds" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -65693,11 +65117,16 @@ /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) "vfq" = ( -/obj/machinery/monkey_recycler, /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/machinery/biomass_recycler, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, /turf/open/floor/iron, /area/station/science/xenobiology) "vfI" = ( @@ -66347,7 +65776,7 @@ /area/station/medical/treatment_center) "vra" = ( /obj/machinery/firealarm/directional/west, -/obj/machinery/modular_computer/console/preset/cargochat/cargo{ +/obj/machinery/modular_computer/preset/cargochat/cargo{ dir = 4 }, /obj/effect/decal/cleanable/dirt, @@ -66471,7 +65900,7 @@ /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/aft) "vuq" = ( -/obj/machinery/modular_computer/console/preset/civilian, +/obj/machinery/modular_computer/preset/civilian, /obj/structure/fireaxecabinet/mechremoval/directional/north, /turf/open/floor/iron/white, /area/station/science/robotics/lab) @@ -66755,7 +66184,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "vyd" = ( -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/hos) "vyg" = ( @@ -67346,6 +66775,13 @@ }, /turf/open/openspace, /area/station/science/xenobiology) +"vGC" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/landmark/start/quartermaster, +/turf/open/floor/carpet, +/area/station/cargo/quartermaster) "vGI" = ( /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock/vault{ @@ -67484,12 +66920,10 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/office) "vIk" = ( -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/components/unary/passive_vent, /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/iron/freezer, +/turf/closed/wall/r_wall, /area/station/science/xenobiology) "vIm" = ( /obj/structure/closet/emcloset, @@ -67784,10 +67218,6 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"vPh" = ( -/obj/machinery/atm, -/turf/open/floor/iron, -/area/station/cargo/lobby) "vPi" = ( /obj/structure/table/wood, /obj/effect/spawner/random/maintenance/four, @@ -67811,21 +67241,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"vPD" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen 1"; - req_access = list("xenobiology") - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio1"; - name = "Xenobio Pen 1 Blast Door" - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/science/xenobiology) "vPE" = ( /obj/structure/table, /obj/item/clothing/gloves/latex, @@ -68746,18 +68161,6 @@ }, /turf/open/floor/glass, /area/station/service/library) -"wgr" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio9"; - name = "Xenobio Pen 9 Blast Door" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/science/xenobiology) "wgs" = ( /obj/structure/cable, /mob/living/basic/sloth/paperwork, @@ -69244,9 +68647,8 @@ /turf/open/floor/iron/dark, /area/station/security/execution/education) "wnB" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Xenobiology Pens - Starboard Aft"; - network = list("ss13","rd","xeno") +/obj/machinery/corral_corner{ + mapping_id = "2" }, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -69320,7 +68722,7 @@ /turf/open/floor/iron, /area/station/command/heads_quarters/ce) "woF" = ( -/obj/machinery/modular_computer/console/preset/cargochat/medical{ +/obj/machinery/modular_computer/preset/cargochat/medical{ dir = 1 }, /obj/effect/turf_decal/trimline/brown/filled/end{ @@ -69404,12 +68806,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) -"wpv" = ( -/obj/structure/sign/warning/cold_temp, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/science/xenobiology) "wpx" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/newscaster/directional/west, @@ -69713,7 +69109,9 @@ /turf/open/floor/iron, /area/station/engineering/lobby) "wva" = ( -/obj/machinery/light/directional/west, +/obj/machinery/corral_corner{ + mapping_id = "5" + }, /turf/open/floor/engine, /area/station/science/xenobiology) "wvb" = ( @@ -69995,14 +69393,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"wyU" = ( -/obj/machinery/light/directional/west, -/obj/machinery/camera/directional/west{ - c_tag = "Xenobiology Pens - Port Aft"; - network = list("ss13","rd","xeno") - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "wzc" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -70497,17 +69887,13 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "wGN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/corral_corner{ + mapping_id = "2" }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio6"; - name = "Xenobio Pen 6 Blast Door" +/obj/machinery/slime_pen_controller{ + mapping_id = "2" }, -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/electric_shock, -/turf/open/floor/plating, +/turf/open/floor/engine, /area/station/science/xenobiology) "wGO" = ( /obj/machinery/light/directional/south, @@ -70539,13 +69925,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/pathology) -"wHb" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron/freezer, -/area/station/science/xenobiology) "wHc" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/rd) @@ -70787,11 +70166,10 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/holopad, /obj/structure/disposalpipe/segment, /obj/structure/cable, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "wLS" = ( /obj/structure/cable, /obj/effect/landmark/start/hangover, @@ -71397,10 +70775,8 @@ /turf/open/floor/iron, /area/station/construction/mining/aux_base) "wUz" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/camera/directional/east{ - c_tag = "Xenobiology Pens - Starboard Mid"; - network = list("ss13","rd","xeno") +/obj/machinery/corral_corner{ + mapping_id = "4" }, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -71624,20 +71000,6 @@ /obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"wXX" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen 10"; - req_access = list("xenobiology") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/science/xenobiology) "wYb" = ( /obj/structure/table, /obj/effect/turf_decal/stripes/red/line{ @@ -71744,19 +71106,6 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"wZv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/obj/machinery/camera{ - c_tag = "Xenobiology Pens Hall - Fore"; - dir = 9; - network = list("ss13","rd","xeno") - }, -/obj/structure/sign/xenobio_guide/directional/north, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "wZL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/yellow{ @@ -71800,7 +71149,7 @@ /obj/structure/disposalpipe/segment, /obj/structure/cable, /turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "xan" = ( /obj/structure/toilet{ pixel_y = 8 @@ -72025,16 +71374,11 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Quartermaster's Office"; - name = "Quartermaster's Fax Machine" - }, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "xex" = ( /obj/machinery/teleport/hub, /turf/open/floor/plating, @@ -72081,6 +71425,12 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"xfz" = ( +/obj/structure/railing, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/slime_market_pad, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "xfB" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/open/floor/iron, @@ -72264,18 +71614,6 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) -"xhv" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; - name = "Containment Pen 2"; - req_access = list("xenobiology") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/science/xenobiology) "xhw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -72415,7 +71753,7 @@ dir = 8 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "xjL" = ( /obj/machinery/computer/shuttle/labor{ dir = 8 @@ -72784,16 +72122,12 @@ /turf/open/floor/plating, /area/station/maintenance/aft/greater) "xqu" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; - name = "Containment Pen 10"; - req_access = list("xenobiology") +/obj/machinery/corral_corner{ + mapping_id = "6" }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio10"; - name = "Xenobio Pen 10 Blast Door" +/obj/machinery/slime_pen_controller{ + mapping_id = "6" }, -/obj/structure/cable, /turf/open/floor/engine, /area/station/science/xenobiology) "xqy" = ( @@ -72920,6 +72254,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/maintenance/disposal) +"xsU" = ( +/obj/machinery/light/floor/has_bulb, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "xtc" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -73002,15 +72344,6 @@ "xuo" = ( /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) -"xur" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio8"; - name = "Xenobio Pen 8 Blast Door" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/science/xenobiology) "xuA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/textured, @@ -73273,6 +72606,7 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /obj/structure/cable, +/obj/machinery/duct, /turf/open/floor/iron, /area/station/science/xenobiology) "xyx" = ( @@ -73533,15 +72867,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/security/courtroom) -"xCh" = ( -/obj/machinery/button/door/directional/west{ - id = "xenobio5"; - layer = 4; - name = "Xenobio Pen 5 Blast Door"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "xCj" = ( /obj/structure/sign/departments/holy, /turf/closed/wall, @@ -75176,7 +74501,7 @@ /turf/open/floor/iron, /area/station/security/prison/mess) "ydw" = ( -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /obj/machinery/light/directional/north, /obj/item/radio/intercom/directional/north, /obj/structure/cable, @@ -75452,15 +74777,6 @@ /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"yjA" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio2"; - name = "Xenobio Pen 2 Blast Door" - }, -/turf/open/floor/plating, -/area/station/science/xenobiology) "yjK" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/generic, @@ -183708,27 +183024,27 @@ abe abe biI abe +abe eOS -qLY eGN -lZX -dPy -qLY -hOU wva abe cKA abe +wva +xsU +ibX abe cKA -rsC abe -cKA abe +ibX +xsU +gND abe cKA -wyU abe +gND rnQ nPI wzg @@ -183965,25 +183281,25 @@ abe cku uUn xNa +abe eOS -qLY vIk -tsa -wHb -qLY abe -jSW abe -cKA -jSW +aUq abe -cKA abe +lGB abe -cKA abe abe -cKA +abe +abe +abe +lGB +abe +abe +aUq abe abe rnQ @@ -184222,24 +183538,24 @@ abe abe bOT abe +abe eLb -qLY tkP -fPv -jKI -qLY -giP -abe -abe -gCo abe abe -gCo -abe +hZT +myS +myS +oyt +myS +myS +mqK abe -gCo abe abe +oyt +myS +myS gCo abe abe @@ -184482,24 +183798,24 @@ abe ctF qLY qLY -oXr -wpv -qLY -lMu +wva +abe +abe +abe bUK -oQo -nmj -ucl -aHz -dIS -gBb +oyt +ibX +abe +abe +abe +abe dJx -htp -eWh -yjA -tOf -vPD -lqU +oyt +gND +abe +abe +abe +aIV mDg nPI alM @@ -184739,23 +184055,23 @@ cZT cZT pXj qLY -wZv -axD -qLY -hEW -jAF -fma -vdr -roA -fma -vdr -iDG fma +rJe +rJe +rJe +rJe maO -xhv -fma +rJe +rJe +rJe +rJe +rJe +rJe maO rJe +rJe +rJe +rJe fma ffe nPI @@ -184993,26 +184309,26 @@ pMF mqe hRC euM -pMF +mVO sfv xyn dmj -wPd -fwC -asb -pMF -xCh -kaW -pMF -ihN -doK -pMF -rjT rXD -pMF -tiQ -lNo -pMF +rXD +rXD +rXD +rXD +rXD +rXD +rXD +rXD +rXD +rXD +rXD +fvk +fvk +fvk +fvk clW rkl nPI @@ -185253,23 +184569,23 @@ niy gtF ouP gLS +iER +odd +odd +odd +odd cyh -cXX -bKI -cyh -wXX -bKI -cyh -dQZ -bKI -cyh -izA -bKI -cyh -lBZ -bKI +odd +odd +odd +odd +odd +odd cyh odd +odd +odd +odd iER ffe nPI @@ -185510,23 +184826,23 @@ qWS wPd ygE qLY -prH -bjn -qbq -iar +hWu +abe +abe +abe xqu -oir -slp -fjt -wgr -xur -reT +oyt +wUz +abe +abe +abe +abe rxM -aLA -bnh -cNI -tWd -hJi +oyt +wnB +abe +abe +abe wGN mDg pQG @@ -185769,22 +185085,22 @@ iQM qLY abe abe +gdf +myS +myS +oyt +myS +myS dLr abe abe -dLr -abe abe -dLr +oyt +myS +myS +kGV abe abe -dLr -abe -abe -dLr -abe -abe -lfs pjr nPI nPI @@ -186026,21 +185342,21 @@ qLY qLY abe abe -gLj +aUq +abe abe -jSW -gLj +lGB abe abe -gLj abe abe -gLj abe abe -gLj +lGB abe abe +aUq +abe abe pjr tRd @@ -186281,23 +185597,23 @@ xwd qLY vgf qLY +hWu abe +atw abe -gLj -aey hWu -gLj +xsU +wUz abe +atw abe -gLj abe -hWu wUz +xsU +wnB abe +atw abe -gLj -abe -hWu wnB pjr tRd @@ -227626,9 +226942,9 @@ tKI sdi tKI ouZ -alT -taf +vGC nWk +sim bAa xal wLO @@ -227885,7 +227201,7 @@ tKI cnU alT dcs -kin +alT dsU alT lbg @@ -230463,7 +229779,7 @@ dBZ dBZ wcV rCC -vPh +qmi vQQ vQQ sve @@ -234069,7 +233385,7 @@ cpm cpm cpm cpm -xyl +kRB iuv dnq paM @@ -250289,7 +249605,7 @@ xJj lvh iVT ogl -ffz +xJj bzB diL vTJ @@ -250793,7 +250109,7 @@ ehd ehd ehd wmX -ooo +lva rtn qEv vDu @@ -251816,7 +251132,7 @@ jbU kHN kra qhL -ppp +xfz xJG ily ily @@ -254362,7 +253678,7 @@ eha aJQ aJQ lso -lZi +bOq qaE mBQ eag diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 438b1f6035e7..63d1b8f7a7eb 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -3129,7 +3129,7 @@ /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) "bdk" = ( -/obj/machinery/modular_computer/console/preset/curator{ +/obj/machinery/modular_computer/preset/curator{ dir = 8 }, /obj/structure/extinguisher_cabinet/directional/south, @@ -6976,7 +6976,7 @@ /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) "ctg" = ( -/obj/machinery/modular_computer/console/preset/engineering{ +/obj/machinery/modular_computer/preset/engineering{ dir = 4 }, /obj/effect/turf_decal/bot, @@ -7159,7 +7159,7 @@ /turf/open/floor/plating, /area/station/maintenance/fore) "cwj" = ( -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /obj/effect/turf_decal/bot, /obj/machinery/computer/security/telescreen/ce{ pixel_y = 28 @@ -8082,7 +8082,7 @@ /obj/item/toy/figure/qm{ pixel_x = -17 }, -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 1 }, /obj/machinery/button/door/directional/east{ @@ -9388,7 +9388,7 @@ /turf/open/floor/engine/o2, /area/station/engineering/atmos) "dmD" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 1 }, /obj/machinery/keycard_auth/directional/west{ @@ -10231,7 +10231,7 @@ /turf/open/floor/iron/showroomfloor, /area/station/security/warden) "dzL" = ( -/obj/machinery/modular_computer/console/preset/engineering{ +/obj/machinery/modular_computer/preset/engineering{ dir = 8 }, /obj/effect/turf_decal/tile/yellow{ @@ -15126,9 +15126,6 @@ "fjh" = ( /obj/effect/turf_decal/bot, /obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/computer/camera_advanced/xenobio{ - dir = 8 - }, /obj/machinery/button/door/directional/north{ id = "xeno3"; name = "Creature Cell 3 Toggle"; @@ -21803,7 +21800,7 @@ /area/station/ai_monitored/turret_protected/ai) "hlJ" = ( /obj/effect/turf_decal/bot, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -24696,7 +24693,7 @@ /area/station/hallway/primary/central/fore) "idM" = ( /obj/effect/turf_decal/bot, -/obj/machinery/modular_computer/console/preset/cargochat/cargo{ +/obj/machinery/modular_computer/preset/cargochat/cargo{ dir = 8 }, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ @@ -25965,7 +25962,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "ixj" = ( -/obj/machinery/modular_computer/console/preset/engineering, +/obj/machinery/modular_computer/preset/engineering, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/bot, /obj/machinery/light/directional/west, @@ -26868,7 +26865,6 @@ "iKn" = ( /obj/effect/turf_decal/bot, /obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/processor/slime, /obj/machinery/button/door/directional/south{ id = "xeno4"; name = "Creature Cell 4 Toggle"; @@ -30305,7 +30301,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/modular_computer/console/preset/cargochat/science{ +/obj/machinery/modular_computer/preset/cargochat/science{ dir = 1 }, /obj/effect/turf_decal/trimline/brown/filled/end{ @@ -32428,7 +32424,7 @@ /turf/open/floor/plating, /area/station/maintenance/aft) "kHs" = ( -/obj/machinery/modular_computer/console/preset/cargochat/engineering, +/obj/machinery/modular_computer/preset/cargochat/engineering, /turf/open/floor/iron/dark, /area/station/engineering/main) "kHw" = ( @@ -36412,7 +36408,7 @@ "lWg" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/machinery/requests_console/directional/east{ @@ -37691,7 +37687,7 @@ pixel_y = 8; req_access = list("command") }, -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /obj/effect/turf_decal/bot, /obj/machinery/light_switch/directional/east{ pixel_x = 24; @@ -39906,7 +39902,7 @@ /area/station/security/interrogation) "nep" = ( /obj/structure/cable, -/obj/machinery/modular_computer/console/preset/command, +/obj/machinery/modular_computer/preset/command, /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, @@ -40277,7 +40273,7 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "nmR" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -41864,7 +41860,7 @@ /turf/open/floor/iron/showroomfloor, /area/station/science/xenobiology) "nPo" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 1 }, /turf/open/floor/wood, @@ -48267,7 +48263,7 @@ /turf/closed/wall, /area/station/hallway/secondary/exit/departure_lounge) "pZI" = ( -/obj/machinery/modular_computer/console/preset/cargochat/security{ +/obj/machinery/modular_computer/preset/cargochat/security{ dir = 4 }, /turf/open/floor/iron/dark, @@ -50051,9 +50047,6 @@ /turf/open/floor/iron, /area/station/security/brig) "qEj" = ( -/obj/machinery/computer/camera_advanced/xenobio{ - dir = 4 - }, /obj/effect/turf_decal/bot, /obj/structure/window/reinforced/spawner/directional/south, /obj/machinery/light/directional/north, @@ -50520,7 +50513,7 @@ /turf/closed/wall/r_wall/rust, /area/station/maintenance/aft) "qNJ" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 8 }, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -51759,7 +51752,7 @@ /turf/open/floor/iron/stairs/old, /area/station/maintenance/port/fore) "rhs" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -58221,7 +58214,7 @@ /turf/closed/wall, /area/station/security/office) "tjR" = ( -/obj/machinery/modular_computer/console/preset/research{ +/obj/machinery/modular_computer/preset/research{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -61990,7 +61983,7 @@ }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/modular_computer/console/preset/cargochat/medical{ +/obj/machinery/modular_computer/preset/cargochat/medical{ dir = 8 }, /obj/structure/disposalpipe/segment, @@ -64153,10 +64146,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"vhx" = ( -/mob/living/simple_animal/slime, -/turf/open/floor/engine, -/area/station/science/xenobiology) "vhK" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -68181,7 +68170,7 @@ /area/station/science/ordnance/bomb) "wqd" = ( /obj/item/radio/intercom/directional/west, -/obj/machinery/modular_computer/console/preset/cargochat/service{ +/obj/machinery/modular_computer/preset/cargochat/service{ dir = 4 }, /obj/effect/turf_decal/bot, @@ -68244,7 +68233,6 @@ "wqR" = ( /obj/effect/turf_decal/bot, /obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/monkey_recycler, /obj/item/radio/intercom/directional/north, /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 @@ -68388,7 +68376,7 @@ /turf/open/floor/iron/showroomfloor, /area/station/medical/psychology) "wua" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 1 }, /turf/open/floor/iron/dark, @@ -68683,7 +68671,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/greater) "wzk" = ( -/obj/machinery/modular_computer/console/preset/command{ +/obj/machinery/modular_computer/preset/command{ dir = 4 }, /obj/machinery/requests_console/directional/west{ @@ -69995,7 +69983,7 @@ /obj/effect/decal/cleanable/blood/old, /obj/machinery/firealarm/directional/east, /obj/structure/cable, -/obj/machinery/modular_computer/console/preset/engineering, +/obj/machinery/modular_computer/preset/engineering, /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) @@ -110474,13 +110462,13 @@ wpw ieb xcf wpw -vhx +qmW nQx qmW uXM qmW nQx -vhx +qmW lZi qdM nmu @@ -113048,7 +113036,7 @@ qmW nQx qmW wpw -vhx +qmW nQx qmW lDu diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 572db0791f1e..bcc8844dcc25 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -664,13 +664,13 @@ /turf/open/floor/iron, /area/station/hallway/primary/fore) "amV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/white, +/obj/machinery/duct, +/turf/open/floor/stone, /area/station/science/xenobiology) "amY" = ( /obj/effect/turf_decal/tile/yellow{ @@ -825,7 +825,7 @@ }, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "aqh" = ( /obj/machinery/door/airlock/maintenance{ name = "Research Maintenance" @@ -1591,10 +1591,8 @@ /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) "aDQ" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, /obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/chem_heater/withbuffer, /turf/open/floor/iron, /area/station/science/xenobiology) "aDR" = ( @@ -1952,13 +1950,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"aJQ" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 4; - name = "killroom vent" - }, -/turf/open/floor/circuit/telecomms, -/area/station/science/xenobiology) "aJS" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/ai_upload) @@ -2644,6 +2635,15 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"aVx" = ( +/obj/machinery/corral_corner{ + mapping_id = "5" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "5" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "aVX" = ( /obj/machinery/door/airlock/hatch{ name = "Telecomms Server Room" @@ -2720,48 +2720,6 @@ pixel_y = 7; pixel_x = -8 }, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/friday{ - pixel_y = 2; - pixel_x = 9 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, /turf/open/floor/iron/vaporwave, /area/station/service/library) "aWl" = ( @@ -2892,6 +2850,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison) +"aYt" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "XenoPens"; + name = "Xenobiology Lockdown" + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "aYw" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod Three"; @@ -3021,6 +2988,13 @@ /obj/effect/landmark/start/scientist, /turf/open/floor/iron/white, /area/station/science/circuits) +"bae" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/duct, +/turf/open/floor/stone, +/area/station/science/xenobiology) "bau" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -3241,7 +3215,7 @@ dir = 1 }, /obj/structure/window/reinforced/spawner/directional/west, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "bep" = ( /obj/machinery/air_sensor/oxygen_tank, @@ -3523,7 +3497,7 @@ /turf/closed/wall, /area/station/security/courtroom) "bjH" = ( -/obj/machinery/modular_computer/console/preset/cargochat/engineering, +/obj/machinery/modular_computer/preset/cargochat/engineering, /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 }, @@ -3840,12 +3814,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel/funeral) -"bnQ" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "bnU" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/chair/office/light, @@ -3890,7 +3858,7 @@ pixel_y = -7 }, /turf/open/floor/carpet/red, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "boz" = ( /obj/effect/turf_decal/siding/thinplating_new/dark/corner{ dir = 8 @@ -4006,6 +3974,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/light/floor/has_bulb, /turf/open/floor/iron/white, /area/station/science/cytology) "bqX" = ( @@ -4167,7 +4136,7 @@ /obj/machinery/light/small/directional/east, /obj/item/radio/intercom/directional/east, /obj/structure/cable, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/fore) "btH" = ( /obj/structure/table, @@ -4421,16 +4390,6 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"byP" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "byR" = ( /obj/structure/sign/warning/secure_area/directional/north, /obj/effect/turf_decal/tile/blue{ @@ -4894,7 +4853,7 @@ "bJs" = ( /obj/machinery/light/directional/south, /obj/structure/window/reinforced/spawner/directional/west, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "bJQ" = ( /obj/machinery/vending/coffee, @@ -5215,8 +5174,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, -/obj/machinery/smartfridge/extract/preloaded, /obj/effect/turf_decal/bot_white, +/obj/machinery/slime_market_pad, /turf/open/floor/iron, /area/station/science/xenobiology) "bQY" = ( @@ -5228,6 +5187,16 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"bRc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/stone, +/area/station/science/xenobiology) "bRG" = ( /obj/machinery/shower/directional/west, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -5277,7 +5246,7 @@ /turf/open/floor/iron, /area/station/security/prison/garden) "bSj" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 4 }, /obj/item/paper/fluff/ids_for_dummies, @@ -5291,13 +5260,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"bSu" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "bSA" = ( /obj/machinery/door/window/right/directional/south{ name = "First Aid Supplies"; @@ -5362,7 +5324,7 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) "bTP" = ( -/obj/machinery/modular_computer/console/preset/research{ +/obj/machinery/modular_computer/preset/research{ dir = 8 }, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -5625,14 +5587,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) -"caf" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "can" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/cable, @@ -5672,6 +5626,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"cbn" = ( +/obj/machinery/door/poddoor/preopen{ + id = "Xenolab"; + name = "Test Chamber Blast Door" + }, +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/engine, +/area/station/science/xenobiology) "cbz" = ( /turf/closed/wall, /area/station/cargo/storage) @@ -5756,8 +5719,8 @@ /area/station/hallway/secondary/command) "ces" = ( /obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/processor/slime, /obj/effect/turf_decal/bot_white, +/obj/machinery/plumbing/ooze_compressor, /turf/open/floor/iron, /area/station/science/xenobiology) "cez" = ( @@ -5974,7 +5937,7 @@ /area/station/engineering/atmos) "cjJ" = ( /turf/open/floor/carpet/red, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "cjP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -5987,6 +5950,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"cjT" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "2"; + dir = 1 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/science/xenobiology) "cke" = ( /obj/structure/showcase/machinery/tv{ dir = 1; @@ -6167,7 +6138,7 @@ /obj/item/solar_assembly, /obj/item/stack/sheet/glass/fifty, /obj/structure/closet/crate/engineering/electrical, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/aft) "cnK" = ( /turf/closed/wall, @@ -6288,7 +6259,7 @@ /obj/structure/railing{ dir = 1 }, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "cqk" = ( /obj/structure/cable, @@ -6357,6 +6328,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/service/bar) +"cqQ" = ( +/obj/machinery/corral_corner{ + mapping_id = "6" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "6" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "crg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, @@ -6455,7 +6435,7 @@ /turf/open/floor/wood, /area/station/service/lawoffice) "csS" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 8 }, /obj/machinery/light/small/directional/east, @@ -6765,7 +6745,7 @@ /obj/machinery/camera/directional/north{ c_tag = "Solar Maintenance - Aft Port" }, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/aft) "cxj" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -7143,6 +7123,12 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/commons/storage/primary) +"cFw" = ( +/obj/machinery/corral_corner{ + mapping_id = "4" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "cFU" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -7166,6 +7152,15 @@ }, /turf/open/floor/iron, /area/station/service/bar) +"cFW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "cGj" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -7246,6 +7241,10 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"cHV" = ( +/obj/machinery/camera/directional/east, +/turf/closed/wall/r_wall, +/area/station/science/xenobiology) "cId" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -7355,7 +7354,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "cLe" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/effect/turf_decal/tile/neutral, @@ -7880,6 +7879,11 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"cVQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "cWr" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -8062,14 +8066,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) -"dac" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "das" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -8252,15 +8248,20 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "ddK" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, /obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/stone, +/area/station/science/xenobiology) +"ddN" = ( +/obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/obj/machinery/duct, +/turf/open/floor/stone, +/area/station/science/xenobiology) "ddO" = ( /obj/effect/turf_decal/trimline/green/filled/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -8424,10 +8425,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/radio/intercom/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, +/obj/machinery/duct, +/turf/open/floor/stone, /area/station/science/xenobiology) "dgD" = ( /turf/closed/wall, @@ -8457,7 +8456,7 @@ /turf/closed/wall/r_wall, /area/station/command/bridge) "dhp" = ( -/obj/machinery/modular_computer/console/preset/engineering, +/obj/machinery/modular_computer/preset/engineering, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, @@ -8555,15 +8554,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"diq" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/south{ - dir = 8; - name = "Maximum Security Test Chamber"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "diC" = ( /obj/machinery/door/airlock/maintenance{ name = "Atmospherics Maintenance" @@ -9152,7 +9142,7 @@ name = "Port Quarter Solar Control" }, /obj/structure/cable, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/aft) "dvV" = ( /obj/machinery/nuclearbomb/beer{ @@ -9209,8 +9199,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/white, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/stone, /area/station/science/xenobiology) "dxe" = ( /obj/effect/landmark/event_spawn, @@ -9358,6 +9349,9 @@ /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"dAJ" = ( +/turf/closed/wall, +/area/space) "dBV" = ( /obj/docking_port/stationary/escape_pod{ dir = 4 @@ -9583,7 +9577,7 @@ /area/station/engineering/break_room) "dFJ" = ( /obj/machinery/light_switch/directional/east, -/obj/machinery/modular_computer/console/preset/curator{ +/obj/machinery/modular_computer/preset/curator{ dir = 8 }, /turf/open/floor/wood, @@ -9594,6 +9588,10 @@ /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/engine, /area/station/science/explab) +"dGk" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "dGq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/left{ @@ -9972,6 +9970,12 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"dMA" = ( +/obj/machinery/corral_corner{ + mapping_id = "1" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "dMH" = ( /obj/machinery/light/small/directional/west, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -10144,6 +10148,9 @@ pixel_y = 1; req_access = list("xenobiology") }, +/obj/machinery/slime_pen_controller{ + mapping_id = "pen2" + }, /turf/open/floor/iron, /area/station/science/xenobiology) "dQb" = ( @@ -10151,7 +10158,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/aft) "dQA" = ( /obj/machinery/computer/rdservercontrol{ @@ -10242,7 +10249,7 @@ /obj/structure/sign/warning/vacuum/external/directional/east, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/cable, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/fore) "dRY" = ( /obj/structure/chair/office, @@ -10436,7 +10443,7 @@ }, /obj/structure/cable, /obj/structure/chair/stool/directional/west, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/aft) "dWF" = ( /obj/machinery/light/directional/north, @@ -11378,6 +11385,15 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) +"elT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/stone, +/area/station/science/xenobiology) "elV" = ( /obj/machinery/airalarm/directional/north, /obj/item/clothing/under/misc/assistantformal, @@ -11424,6 +11440,14 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"eml" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "1"; + dir = 1 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/science/xenobiology) "emv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -11917,16 +11941,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"evD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "evE" = ( /obj/effect/turf_decal/siding/purple{ dir = 10 @@ -12062,11 +12076,6 @@ /obj/item/pen, /turf/open/floor/wood, /area/station/service/lawoffice) -"exu" = ( -/obj/effect/turf_decal/stripes/line, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "exC" = ( /obj/effect/turf_decal/plaque{ icon_state = "L3" @@ -12266,7 +12275,7 @@ /turf/open/floor/plating, /area/station/maintenance/space_hut) "eCV" = ( -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /obj/machinery/light/directional/north, /obj/machinery/requests_console/directional/north{ department = "Security"; @@ -12512,11 +12521,9 @@ /turf/open/floor/plating, /area/station/science/research) "eJI" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/box, -/obj/machinery/portable_atmospherics/canister, -/turf/open/floor/iron, +/obj/structure/chair/sofa/corp/right, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/white, /area/station/science/xenobiology) "eJM" = ( /obj/machinery/camera/directional/east{ @@ -12533,7 +12540,7 @@ dir = 1 }, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "eKr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -12781,6 +12788,10 @@ name = "Containment Pen #6"; req_access = list("xenobiology") }, +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "pen2"; + dir = 8 + }, /turf/open/floor/engine, /area/station/science/xenobiology) "eOQ" = ( @@ -12978,19 +12989,6 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) -"eSC" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio7"; - layer = 3.3; - name = "Xenobio Pen 7 Blast Doors"; - pixel_y = 4; - req_access = list("xenobiology") - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "eSR" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -13007,6 +13005,10 @@ /obj/machinery/light/no_nightlight/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"eTk" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/stone, +/area/station/science/xenobiology) "eTn" = ( /obj/structure/chair{ dir = 4 @@ -13409,14 +13411,6 @@ /obj/effect/spawner/random/decoration/showcase, /turf/open/floor/carpet, /area/station/command/corporate_showroom) -"faD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "fbf" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -13504,7 +13498,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/iron/white, +/obj/machinery/light/directional/west, +/obj/machinery/duct, +/obj/machinery/camera/directional/west, +/turf/open/floor/stone, /area/station/science/xenobiology) "fee" = ( /obj/structure/lattice/catwalk, @@ -14036,6 +14033,15 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"flp" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "XenoPens"; + name = "Xenobiology Lockdown" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "flu" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -14139,6 +14145,13 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) +"fmR" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "3" + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/science/xenobiology) "fmS" = ( /obj/structure/sign/directions/security{ dir = 1; @@ -14287,12 +14300,10 @@ /area/station/science/xenobiology/hallway) "frt" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/computer/camera_advanced/xenobio{ - dir = 8 - }, /obj/effect/turf_decal/trimline/purple/filled/line, /obj/effect/turf_decal/bot, /obj/machinery/light/small/directional/south, +/obj/machinery/chem_master, /turf/open/floor/iron, /area/station/science/xenobiology) "fru" = ( @@ -14968,6 +14979,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/teleporter) +"fHs" = ( +/obj/machinery/light/floor/has_bulb, +/obj/structure/chair/sofa/corp, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "fHC" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 @@ -14991,7 +15007,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "fIo" = ( /obj/effect/turf_decal/bot_white, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -15037,6 +15053,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) +"fJq" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/stone, +/area/station/science/xenobiology) "fJs" = ( /obj/structure/chair/stool/directional/west, /obj/effect/mapping_helpers/broken_floor, @@ -15223,14 +15246,6 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron/white, /area/station/science/circuits) -"fMF" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "fMN" = ( /obj/machinery/firealarm/directional/west, /obj/structure/disposalpipe/segment{ @@ -15527,7 +15542,7 @@ /obj/machinery/power/apc/auto_name/directional/west, /obj/machinery/light_switch/directional/south, /obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/fore) "fSd" = ( /obj/structure/chair/stool/directional/west, @@ -15542,7 +15557,7 @@ pixel_y = 30 }, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "fSz" = ( /obj/effect/turf_decal/tile/green{ dir = 8 @@ -15617,9 +15632,15 @@ }, /obj/effect/turf_decal/bot_white, /obj/structure/cable, -/obj/machinery/smartfridge/organ, +/obj/machinery/computer/slime_market, /turf/open/floor/iron, /area/station/science/xenobiology) +"fUH" = ( +/obj/machinery/corral_corner{ + mapping_id = "3" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "fUM" = ( /obj/machinery/light/small/directional/south, /obj/machinery/libraryscanner, @@ -15996,6 +16017,15 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) +"gbm" = ( +/obj/machinery/corral_corner{ + mapping_id = "3" + }, +/obj/machinery/corral_corner{ + mapping_id = "4" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "gbq" = ( /obj/machinery/vending/wardrobe/chef_wardrobe, /obj/effect/turf_decal/trimline/brown/warning{ @@ -16192,7 +16222,7 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /obj/structure/cable, /obj/machinery/door/airlock/research/glass{ - name = "Artifact Science Lab" + name = "Artifact Experimentation Science Lab" }, /turf/open/floor/plating, /area/station/science/explab) @@ -16238,6 +16268,20 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"gga" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/hatch{ + name = "Xenobiology Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "ggi" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -16423,6 +16467,10 @@ name = "Containment Pen #5"; req_access = list("xenobiology") }, +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "pen3"; + dir = 8 + }, /turf/open/floor/engine, /area/station/science/xenobiology) "gjF" = ( @@ -16605,6 +16653,12 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/dark, /area/station/security/lockers) +"gmB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "gmG" = ( /obj/structure/table, /obj/item/plate, @@ -16633,7 +16687,7 @@ "gmR" = ( /obj/machinery/firealarm/directional/west, /obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/modular_computer/console/preset/engineering, +/obj/machinery/modular_computer/preset/engineering, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/main) @@ -16692,7 +16746,7 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/aft) "gnS" = ( /obj/structure/cable, @@ -17116,8 +17170,14 @@ /turf/closed/wall, /area/station/commons/storage/primary) "gva" = ( -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "XenoPens"; + name = "Xenobiology Lockdown" + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, /area/station/science/xenobiology) "gvg" = ( /obj/structure/table/reinforced, @@ -17218,7 +17278,7 @@ /area/station/engineering/atmos) "gxn" = ( /obj/structure/nestbox, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "gxx" = ( /obj/machinery/door/airlock/atmos/glass{ @@ -17277,6 +17337,7 @@ id = "xenobio8"; name = "Xenobio Pen 8 Blast Door" }, +/obj/machinery/duct, /turf/open/floor/iron, /area/station/science/xenobiology) "gyK" = ( @@ -17592,7 +17653,7 @@ /obj/machinery/light/small/directional/east, /obj/item/radio/intercom/directional/east, /obj/structure/cable, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/fore) "gFi" = ( /turf/open/floor/iron, @@ -17829,17 +17890,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"gKD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/camera/directional/west{ - c_tag = "Xenobiology Lab - Central East"; - network = list("ss13","rd","xeno") - }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "gKK" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -18232,6 +18282,11 @@ /obj/item/reagent_containers/cup/watering_can, /turf/open/floor/iron, /area/station/service/hydroponics) +"gRY" = ( +/obj/machinery/light/floor/has_bulb, +/obj/machinery/plumbing/ooze_compressor, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "gSn" = ( /obj/item/wrench, /turf/open/floor/iron, @@ -18265,7 +18320,6 @@ /turf/open/floor/circuit/telecomms/server, /area/station/science/server) "gSM" = ( -/obj/structure/window/reinforced/spawner/directional/south, /obj/effect/turf_decal/delivery, /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, @@ -18274,6 +18328,7 @@ id = "XenoPens"; name = "Xenobiology Lockdown" }, +/obj/machinery/duct, /turf/open/floor/iron, /area/station/science/xenobiology) "gTh" = ( @@ -18350,12 +18405,14 @@ /turf/open/floor/iron, /area/station/hallway/primary/fore) "gTS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 5 }, -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/obj/machinery/shower/directional/north, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/science/xenobiology) "gTU" = ( /obj/effect/turf_decal/siding/purple/corner{ dir = 4 @@ -18609,8 +18666,12 @@ /turf/open/floor/plating, /area/station/engineering/main) "gXw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/circuit/telecomms, +/obj/machinery/light/floor/has_bulb, +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "5"; + dir = 1 + }, +/turf/open/floor/engine, /area/station/science/xenobiology) "gXz" = ( /obj/machinery/duct, @@ -18831,9 +18892,8 @@ pixel_x = 10 }, /obj/item/pen/invisible, -/obj/structure/cassette_rack{ - pixel_x = -5; - pixel_y = 12 +/obj/structure/cassette_rack/prefilled{ + pixel_y = 8 }, /turf/open/floor/iron/vaporwave, /area/station/service/library) @@ -19014,6 +19074,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/warehouse) +"heo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/stone, +/area/station/science/xenobiology) "hep" = ( /obj/effect/landmark/blobstart, /obj/effect/mapping_helpers/burnt_floor, @@ -19226,14 +19296,6 @@ }, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) -"hja" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/chem_master, -/obj/effect/turf_decal/tile/purple/fourcorners, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "hjo" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -19474,7 +19536,7 @@ /turf/open/floor/iron/white, /area/station/security/prison/mess) "hmM" = ( -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "hne" = ( /obj/machinery/door/window/brigdoor{ @@ -19591,6 +19653,12 @@ }, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms) +"hoV" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "hoY" = ( /obj/structure/chair/office{ dir = 4 @@ -19731,6 +19799,7 @@ dir = 1 }, /obj/structure/cable, +/obj/structure/fans/tiny, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) "hsF" = ( @@ -19852,7 +19921,7 @@ /turf/closed/wall/r_wall, /area/station/maintenance/starboard/greater) "huq" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 4 }, /obj/effect/turf_decal/tile/neutral{ @@ -20218,6 +20287,10 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron, /area/station/commons/locker) +"hAx" = ( +/obj/structure/closet/secure_closet/quartermaster, +/turf/open/floor/wood, +/area/station/cargo/quartermaster) "hAE" = ( /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark/telecomms, @@ -20304,11 +20377,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"hCw" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/science/xenobiology) "hCK" = ( /obj/effect/decal/cleanable/oil/slippery, /obj/effect/turf_decal/siding/purple{ @@ -20800,6 +20868,7 @@ id = "xenobio1"; name = "Xenobio Pen 1 Blast Door" }, +/obj/machinery/duct, /turf/open/floor/iron, /area/station/science/xenobiology) "hMy" = ( @@ -21056,7 +21125,7 @@ }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/aft) "hRW" = ( /obj/machinery/light/directional/east, @@ -21234,6 +21303,10 @@ name = "Containment Pen #8"; req_access = list("xenobiology") }, +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "pen1"; + dir = 4 + }, /turf/open/floor/engine, /area/station/science/xenobiology) "hVE" = ( @@ -21620,6 +21693,7 @@ /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 4 }, +/obj/machinery/slime_extract_requestor, /turf/open/floor/iron/white, /area/station/science/lobby) "ibz" = ( @@ -21707,17 +21781,10 @@ /turf/open/floor/plating, /area/station/commons/fitness/recreation) "idA" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/structure/sign/warning/electric_shock, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/science/xenobiology) -"idF" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/filingcabinet/chestdrawer, -/turf/open/floor/iron, -/area/station/science/xenobiology) "ied" = ( /obj/structure/table, /obj/item/paper/fluff/holodeck/disclaimer, @@ -21883,6 +21950,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"igH" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/box, +/obj/machinery/camera/directional/south, +/turf/open/floor/iron, +/area/station/science/xenobiology) "igP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood{ @@ -21918,7 +21995,7 @@ "igX" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/nestbox, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "igZ" = ( /obj/machinery/door/firedoor, @@ -22266,6 +22343,10 @@ name = "Containment Pen #3"; req_access = list("xenobiology") }, +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "pen5"; + dir = 8 + }, /turf/open/floor/engine, /area/station/science/xenobiology) "imU" = ( @@ -22579,15 +22660,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/grass, /area/station/security/prison/garden) -"irp" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "irL" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, @@ -22892,6 +22964,14 @@ /obj/structure/closet/crate, /turf/open/floor/plating/airless, /area/space/nearstation) +"ivK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) "ivM" = ( /obj/effect/decal/cleanable/cobweb, /obj/machinery/photocopier, @@ -22950,8 +23030,10 @@ /area/station/science/robotics/lab) "iwO" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "iwX" = ( /obj/structure/cable, @@ -23037,6 +23119,9 @@ pixel_y = 4; req_access = list("xenobiology") }, +/obj/machinery/slime_pen_controller{ + mapping_id = "pen3" + }, /turf/open/floor/iron, /area/station/science/xenobiology) "ixT" = ( @@ -23348,6 +23433,12 @@ /obj/structure/cable, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) +"iCZ" = ( +/obj/machinery/corral_corner{ + mapping_id = "6" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "iDh" = ( /obj/machinery/computer/communications{ dir = 8 @@ -23902,7 +23993,7 @@ pixel_y = 9 }, /turf/open/floor/carpet/red, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "iMc" = ( /obj/machinery/light/small/directional/west, /turf/open/floor/iron/freezer, @@ -24011,13 +24102,6 @@ /mob/living/basic/lizard/wags_his_tail, /turf/open/floor/plating, /area/station/service/janitor) -"iMR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "iMS" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line, @@ -24143,8 +24227,8 @@ /turf/open/floor/carpet, /area/station/security/detectives_office) "iOZ" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/science/xenobiology) "iPb" = ( @@ -24517,6 +24601,16 @@ /obj/effect/landmark/start/depsec/science, /turf/open/floor/iron, /area/station/security/checkpoint/science) +"iTV" = ( +/obj/machinery/corral_corner{ + mapping_id = "3" + }, +/obj/machinery/corral_corner{ + mapping_id = "4" + }, +/obj/machinery/camera/directional/north, +/turf/open/floor/engine, +/area/station/science/xenobiology) "iTX" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ @@ -24547,6 +24641,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload_foyer) +"iUk" = ( +/obj/machinery/corral_corner{ + mapping_id = "2" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "iUm" = ( /turf/closed/wall, /area/station/hallway/secondary/exit/departure_lounge) @@ -24600,7 +24700,7 @@ /obj/structure/railing{ dir = 1 }, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "iVi" = ( /obj/machinery/door/airlock{ @@ -24655,10 +24755,6 @@ /obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"iWc" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "iWj" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -24873,6 +24969,15 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"jau" = ( +/obj/machinery/corral_corner{ + mapping_id = "1" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "1" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "jay" = ( /obj/structure/chair{ dir = 4 @@ -24919,18 +25024,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) -"jbk" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/camera{ - c_tag = "Xenobiology Lab - Central South"; - dir = 9; - network = list("ss13","rd","xeno") - }, -/obj/machinery/status_display/ai/directional/north, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "jbq" = ( /turf/closed/wall/r_wall, /area/station/hallway/primary/aft) @@ -25010,6 +25103,13 @@ /obj/structure/window/fulltile, /turf/open/floor/grass, /area/station/hallway/secondary/exit/departure_lounge) +"jdj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/stone, +/area/station/science/xenobiology) "jdn" = ( /obj/effect/turf_decal/trimline/brown/filled/line, /obj/structure/disposalpipe/segment{ @@ -25165,6 +25265,13 @@ "jfG" = ( /turf/closed/wall, /area/station/maintenance/disposal) +"jfJ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/solars/port/aft) "jfN" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -25327,6 +25434,15 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"jhX" = ( +/obj/machinery/corral_corner{ + mapping_id = "5" + }, +/obj/machinery/corral_corner{ + mapping_id = "6" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "jhY" = ( /obj/machinery/firealarm/directional/east, /obj/structure/bed/dogbed, @@ -25366,12 +25482,14 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "jjj" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, +/obj/item/disk/vacuum_upgrade/biomass, +/obj/item/vacuum_pack, +/obj/item/vacuum_pack, +/obj/item/disk/vacuum_upgrade/biomass, +/obj/structure/table/glass, /turf/open/floor/iron, /area/station/science/xenobiology) "jjm" = ( @@ -25606,7 +25724,7 @@ "jnv" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/fore) "jnA" = ( /obj/machinery/newscaster/directional/west, @@ -25658,7 +25776,7 @@ "jop" = ( /obj/machinery/light/directional/south, /obj/structure/nestbox, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "joq" = ( /obj/machinery/door/firedoor, @@ -26156,14 +26274,6 @@ }, /turf/open/floor/iron, /area/station/science/research) -"jvX" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/shower/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "jwg" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 @@ -26281,13 +26391,14 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, +/obj/machinery/duct, +/obj/structure/sign/xenobio_guide/directional/west, +/turf/open/floor/stone, /area/station/science/xenobiology) "jxS" = ( /obj/effect/decal/cleanable/dirt, @@ -26385,7 +26496,11 @@ "jzw" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/stone, /area/station/science/xenobiology) "jzC" = ( /obj/machinery/door/window/right/directional/north{ @@ -26518,12 +26633,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/plating, /area/station/maintenance/disposal) -"jCO" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "jDb" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/blobstart, @@ -27191,6 +27300,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) +"jOI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "jON" = ( /obj/effect/turf_decal/tile/purple, /obj/structure/disposalpipe/segment{ @@ -27384,15 +27502,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/commons/lounge) -"jSj" = ( -/obj/machinery/door/airlock/research{ - glass = 1; - name = "Slime Euthanization Chamber"; - opacity = 0 - }, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, -/turf/open/floor/iron, -/area/station/science/xenobiology) "jSm" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -28202,6 +28311,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/checkpoint/engineering) +"khw" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "4" + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/science/xenobiology) "khA" = ( /turf/closed/wall, /area/station/commons/storage/art) @@ -28358,6 +28474,17 @@ /obj/item/clothing/glasses/hud/health, /turf/open/floor/iron/white, /area/station/medical/pathology) +"kkT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/stone, +/area/station/science/xenobiology) "kkU" = ( /obj/structure/disposalpipe/segment, /obj/machinery/camera/directional/west{ @@ -28464,6 +28591,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, +/obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/xenobiology) "klL" = ( @@ -28796,7 +28924,7 @@ pixel_y = -2 }, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "ksT" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -28872,7 +29000,7 @@ /obj/effect/turf_decal/stripes/line, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/fore) "ktK" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ @@ -29003,14 +29131,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "kvT" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/effect/turf_decal/bot_white, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/open/floor/iron, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, /area/station/science/xenobiology) "kvV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -29128,12 +29250,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"kyh" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "kyl" = ( /obj/item/radio/intercom/directional/south, /obj/machinery/light/directional/south, @@ -29331,6 +29447,10 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/command/teleporter) +"kCw" = ( +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "kCC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, @@ -29547,14 +29667,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"kHt" = ( -/obj/machinery/camera{ - c_tag = "Xenobiology Lab - Pen #2"; - dir = 9; - network = list("ss13","rd","xeno") - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "kHM" = ( /obj/effect/turf_decal/siding/thinplating_new/dark, /obj/effect/turf_decal/trimline/brown/line, @@ -29654,6 +29766,14 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/white, /area/station/security/prison) +"kKG" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "kKT" = ( /obj/item/reagent_containers/cup/bottle/multiver{ pixel_x = 7; @@ -29938,6 +30058,15 @@ "kOR" = ( /turf/closed/wall, /area/station/hallway/primary/aft) +"kOV" = ( +/obj/machinery/corral_corner{ + mapping_id = "1" + }, +/obj/machinery/corral_corner{ + mapping_id = "2" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "kOX" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -30056,7 +30185,7 @@ /area/station/engineering/storage/tech) "kQP" = ( /turf/closed/wall, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "kQT" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -30856,7 +30985,7 @@ "lek" = ( /obj/machinery/power/smes, /obj/structure/cable, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/fore) "lfc" = ( /obj/machinery/newscaster/directional/north, @@ -31306,7 +31435,7 @@ dir = 1 }, /obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/aft) "lmL" = ( /obj/structure/cable, @@ -31375,7 +31504,7 @@ /obj/item/computer_disk/quartermaster, /obj/item/computer_disk/quartermaster, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "lnH" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -31750,7 +31879,7 @@ /obj/machinery/camera/directional/west{ c_tag = "Solar Maintenance - Fore Starboard" }, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/fore) "ltm" = ( /obj/machinery/atmospherics/components/tank/oxygen{ @@ -31831,7 +31960,7 @@ dir = 8 }, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "lup" = ( /obj/machinery/ai_slipper{ uses = 10 @@ -32096,9 +32225,12 @@ /turf/open/floor/iron, /area/station/hallway/secondary/command) "lzJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /obj/structure/cable, -/turf/open/floor/iron/solarpanel/airless, -/area/station/solars/port/aft) +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/solars/port/fore) "lzL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32297,6 +32429,12 @@ }, /turf/open/floor/iron/dark, /area/station/medical/break_room) +"lFe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/engine, +/area/station/science/xenobiology) "lFo" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -32431,6 +32569,18 @@ "lJa" = ( /turf/open/floor/grass, /area/station/service/hydroponics/garden) +"lJg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/stone, +/area/station/science/xenobiology) "lJh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -32765,19 +32915,27 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 }, -/obj/machinery/modular_computer/console/preset/cargochat/medical{ +/obj/machinery/modular_computer/preset/cargochat/medical{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) "lOY" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_x = -1; + pixel_y = 8 }, -/obj/machinery/portable_atmospherics/canister, -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/box, -/turf/open/floor/iron, +/obj/machinery/button/door{ + id = "XenoPens"; + layer = 3.3; + name = "Xenobiology Lockdown"; + pixel_y = 0; + req_access = list("xenobiology"); + pixel_x = -24 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/white, /area/station/science/xenobiology) "lOZ" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, @@ -32982,15 +33140,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"lTi" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/camera/directional/south{ - c_tag = "Xenobiology Lab - Central North"; - network = list("ss13","rd","xeno") - }, -/obj/machinery/status_display/ai/directional/south, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "lTj" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -33419,6 +33568,16 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/service/bar) +"lYY" = ( +/obj/machinery/duct, +/obj/machinery/corral_corner{ + mapping_id = "3" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "3" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "lZk" = ( /obj/machinery/power/turbine/inlet_compressor{ dir = 4 @@ -33584,14 +33743,14 @@ /turf/open/floor/iron/vaporwave, /area/station/service/library) "mdo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/hatch{ - name = "Xenobiology Maintenance" +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/stone, +/area/station/science/xenobiology) "mdp" = ( /obj/structure/sign/warning/yes_smoking, /turf/closed/wall, @@ -33643,6 +33802,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/heads_quarters/hos) +"meQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/stone, +/area/station/science/xenobiology) "mfh" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -34029,7 +34195,7 @@ /obj/item/solar_assembly, /obj/item/stack/sheet/glass/fifty, /obj/structure/closet/crate/engineering/electrical, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/aft) "mmR" = ( /obj/structure/cable, @@ -34324,11 +34490,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"msR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/science/xenobiology) "msT" = ( /obj/structure/table, /obj/item/food/mint, @@ -34628,11 +34789,10 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) "mxO" = ( -/obj/structure/closet/secure_closet/quartermaster, /obj/machinery/airalarm/directional/north, /obj/machinery/camera/directional/north, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "mxQ" = ( /obj/effect/spawner/random/structure/grille, /obj/structure/lattice, @@ -34882,6 +35042,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/break_room) +"mBj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/cytology) "mBw" = ( /obj/machinery/power/emitter, /obj/machinery/light/small/directional/south, @@ -34940,14 +35104,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) -"mCj" = ( -/obj/machinery/camera{ - c_tag = "Xenobiology Lab - Pen #7"; - dir = 5; - network = list("ss13","rd","xeno") - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "mCn" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/two, @@ -35146,7 +35302,7 @@ /obj/structure/railing{ dir = 1 }, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "mFC" = ( /obj/effect/decal/cleanable/dirt, @@ -35389,6 +35545,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/command/bridge) +"mJQ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "mJT" = ( /obj/effect/turf_decal/tile/purple/fourcorners, /obj/structure/table/reinforced, @@ -35542,10 +35703,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/light/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, +/obj/machinery/duct, +/turf/open/floor/stone, /area/station/science/xenobiology) "mMl" = ( /obj/structure/cable, @@ -35574,12 +35735,14 @@ /turf/open/floor/iron, /area/station/commons/dorms) "mMK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/obj/structure/cable, /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "mMM" = ( /obj/structure/table/reinforced, @@ -35744,10 +35907,6 @@ dir = 1 }, /area/station/security/prison) -"mQR" = ( -/obj/machinery/pdapainter/supply, -/turf/open/floor/carpet/red, -/area/station/command/heads_quarters/qm) "mRg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36331,7 +36490,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "mZL" = ( -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /obj/effect/turf_decal/tile/green/anticorner/contrasted{ dir = 1 }, @@ -36487,7 +36646,6 @@ /turf/open/floor/iron, /area/station/engineering/main) "ncF" = ( -/obj/structure/window/reinforced/spawner/directional/north, /obj/effect/turf_decal/delivery, /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -36897,6 +37055,9 @@ pixel_y = 4; req_access = list("xenobiology") }, +/obj/machinery/slime_pen_controller{ + mapping_id = "pen5" + }, /turf/open/floor/iron, /area/station/science/xenobiology) "nkD" = ( @@ -36973,7 +37134,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/structure/sign/poster/official/random/directional/east, @@ -37004,6 +37165,10 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/dark, /area/station/command/teleporter) +"nmy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "nmH" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable, @@ -37223,6 +37388,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"nqk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "nqo" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -37275,7 +37447,7 @@ /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "nrm" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -37472,7 +37644,7 @@ name = "Port Bow Solar Control" }, /obj/structure/cable, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/fore) "ntP" = ( /obj/machinery/door/airlock/security/glass{ @@ -37900,6 +38072,10 @@ /area/station/engineering/atmospherics_engine) "nBa" = ( /obj/structure/cable, +/obj/machinery/power/solar{ + id = "aftport"; + name = "Aft-Port Solar Array" + }, /turf/open/floor/iron/solarpanel/airless, /area/station/solars/starboard/aft) "nBf" = ( @@ -38052,7 +38228,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "nDT" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ @@ -38083,7 +38259,7 @@ /obj/machinery/light_switch/directional/south, /obj/machinery/power/apc/auto_name/directional/west, /obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/fore) "nEf" = ( /obj/effect/decal/cleanable/dirt, @@ -38538,6 +38714,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"nOh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/stone, +/area/station/science/xenobiology) "nOi" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -38777,7 +38960,7 @@ /obj/item/solar_assembly, /obj/item/stack/sheet/glass/fifty, /obj/structure/closet/crate/engineering/electrical, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/aft) "nRR" = ( /obj/effect/decal/cleanable/dirt/dust, @@ -38805,14 +38988,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"nSC" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/chem_heater/withbuffer, -/obj/effect/turf_decal/tile/purple/fourcorners, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "nTd" = ( /obj/structure/rack, /obj/effect/spawner/random/food_or_drink/seed, @@ -39048,14 +39223,13 @@ /turf/open/space/basic, /area/space/nearstation) "nYL" = ( -/obj/machinery/door/airlock/hatch{ - name = "Xenobiology Maintenance" - }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "nYO" = ( /obj/item/reagent_containers/spray/plantbgone, /obj/item/reagent_containers/spray/pestspray{ @@ -39230,6 +39404,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) +"obi" = ( +/obj/machinery/corral_corner{ + mapping_id = "4" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "4" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "obk" = ( /obj/item/target/alien, /turf/open/floor/plating, @@ -39423,7 +39606,7 @@ "oeO" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/fore) "oeQ" = ( /obj/structure/table, @@ -39547,6 +39730,15 @@ /obj/effect/turf_decal/tile/bar, /turf/open/floor/iron, /area/station/commons/lounge) +"ogF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "ogJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -39620,6 +39812,7 @@ id = "xenobio6"; name = "Xenobio Pen 6 Blast Door" }, +/obj/machinery/duct, /turf/open/floor/iron, /area/station/science/xenobiology) "ohE" = ( @@ -40906,6 +41099,12 @@ dir = 8 }, /area/station/engineering/atmos) +"oFv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "oFz" = ( /turf/closed/wall, /area/station/science/explab) @@ -41720,6 +41919,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/light/floor/has_bulb, /turf/open/floor/iron/white, /area/station/science/xenobiology) "oWb" = ( @@ -41815,7 +42015,7 @@ /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/stack/cable_coil, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/aft) "oXL" = ( /obj/machinery/disposal/bin, @@ -42250,8 +42450,8 @@ /area/station/science/robotics/lab) "pfP" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/light_switch/directional/south, -/turf/open/floor/iron/white, +/obj/machinery/duct, +/turf/open/floor/stone, /area/station/science/xenobiology) "pfR" = ( /obj/machinery/portable_atmospherics/canister/air, @@ -42293,17 +42493,8 @@ /obj/machinery/camera/directional/west{ c_tag = "Solar Maintenance - Fore Port" }, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/fore) -"pgM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/sink/directional/west, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "pgP" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/stasis, @@ -42352,6 +42543,10 @@ pixel_x = 10; pixel_y = -1 }, +/obj/machinery/slime_pen_controller{ + mapping_id = "pen1"; + dir = 2 + }, /turf/open/floor/iron, /area/station/science/xenobiology) "phN" = ( @@ -42580,7 +42775,7 @@ "pms" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/aft) "pmZ" = ( /obj/machinery/light_switch/directional/west{ @@ -42723,6 +42918,7 @@ /obj/effect/turf_decal/tile/purple/anticorner/contrasted{ dir = 8 }, +/obj/machinery/smartfridge/petri/preloaded, /turf/open/floor/iron/white, /area/station/science/cytology) "ppD" = ( @@ -42884,12 +43080,6 @@ /obj/structure/cable, /turf/open/floor/iron/white/side, /area/station/science/lobby) -"psc" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "psl" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ @@ -42974,6 +43164,10 @@ name = "Containment Pen #1"; req_access = list("xenobiology") }, +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "pen7"; + dir = 4 + }, /turf/open/floor/engine, /area/station/science/xenobiology) "psV" = ( @@ -43162,20 +43356,19 @@ /obj/effect/turf_decal/stripes/line, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/fore) "pwM" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/commons/dorms) "pwZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "pxj" = ( /obj/machinery/door/airlock/research/glass{ @@ -43481,20 +43674,6 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"pDl" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - icon_state = "right"; - name = "Containment Pen #7"; - req_access = list("xenobiology") - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio7"; - name = "Xenobio Pen 7 Blast Door" - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "pDs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -43861,10 +44040,10 @@ /turf/open/floor/iron/dark/textured_half, /area/station/bitrunning/den) "pJf" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "pJi" = ( /obj/machinery/firealarm/directional/south, @@ -43892,12 +44071,12 @@ /turf/open/floor/iron/freezer, /area/station/security/prison/shower) "pJA" = ( -/obj/structure/closet/secure_closet/cytology, /obj/structure/extinguisher_cabinet/directional/west, /obj/machinery/light/directional/west, /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 8 }, +/obj/machinery/smartfridge/organ, /turf/open/floor/iron/white, /area/station/science/cytology) "pJE" = ( @@ -44171,6 +44350,7 @@ "pOF" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line, +/obj/structure/fans/tiny, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) "pOK" = ( @@ -44242,7 +44422,10 @@ dir = 10 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "pQu" = ( /obj/machinery/door/window/right/directional/east{ @@ -44504,6 +44687,11 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/grimy, /area/station/security/interrogation) +"pUX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "pVi" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light_switch/directional/north, @@ -44541,20 +44729,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/brig) -"pVR" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/table, -/obj/item/storage/box/gloves{ - pixel_x = -4; - pixel_y = 8 - }, -/obj/item/storage/box/masks{ - pixel_x = 4; - pixel_y = 4 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "pVZ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -44646,17 +44820,6 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron, /area/station/service/hydroponics) -"pXo" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ - dir = 8; - initialize_directions = 4; - name = "euthanization chamber freezer" - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "pXA" = ( /obj/structure/chair/comfy/brown{ dir = 8 @@ -44692,6 +44855,10 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) +"pYh" = ( +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "pYn" = ( /obj/structure/sign/plaques/kiddie/library{ pixel_y = -32 @@ -44725,13 +44892,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/lobby) -"pZi" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 1; - name = "killroom vent" - }, -/turf/open/floor/circuit/telecomms, -/area/station/science/xenobiology) "pZn" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -44749,7 +44909,7 @@ name = "Starboard Bow Solar Control" }, /obj/structure/cable, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/fore) "pZI" = ( /obj/effect/landmark/navigate_destination/library, @@ -44766,6 +44926,7 @@ dir = 8 }, /obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/closet/secure_closet/cytology, /turf/open/floor/holofloor/dark, /area/station/science/cytology) "qag" = ( @@ -45260,14 +45421,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"qiD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "qjf" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -45360,7 +45513,7 @@ dir = 4 }, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "qkJ" = ( /obj/structure/chair/office/light, /obj/structure/cable, @@ -45370,7 +45523,7 @@ "qkV" = ( /obj/structure/window/reinforced/spawner/directional/west, /mob/living/basic/chicken, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "qkW" = ( /obj/machinery/light/directional/south, @@ -45428,7 +45581,7 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "qmu" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 8 }, /turf/open/floor/iron/dark, @@ -45624,7 +45777,7 @@ /area/station/maintenance/starboard/lesser) "qpn" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/modular_computer/console/preset/cargochat/service{ +/obj/machinery/modular_computer/preset/cargochat/service{ dir = 8 }, /obj/structure/sign/poster/random/directional/east, @@ -45672,6 +45825,12 @@ /obj/effect/spawner/random/engineering/flashlight, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"qqq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "qrg" = ( /obj/machinery/light_switch/directional/north, /turf/open/floor/circuit/green{ @@ -45950,6 +46109,10 @@ name = "Containment Pen #4"; req_access = list("xenobiology") }, +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "pen4"; + dir = 8 + }, /turf/open/floor/engine, /area/station/science/xenobiology) "qvY" = ( @@ -45997,7 +46160,7 @@ "qwM" = ( /obj/machinery/power/smes, /obj/structure/cable, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/fore) "qwR" = ( /obj/structure/sign/directions/evac{ @@ -46213,6 +46376,16 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/space) +"qAr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/hatch{ + name = "Xenobiology Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "qAA" = ( /obj/machinery/newscaster/directional/east, /obj/machinery/computer/security/mining{ @@ -46647,6 +46820,14 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"qID" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/stone, +/area/station/science/xenobiology) "qIK" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/preopen{ @@ -46654,7 +46835,7 @@ name = "Privacy Shutters" }, /turf/open/floor/plating, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "qIP" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -46761,7 +46942,7 @@ /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) "qLb" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 4 }, /obj/machinery/requests_console/directional/west{ @@ -47260,7 +47441,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "qTz" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -47869,7 +48050,7 @@ dir = 1 }, /obj/structure/cable, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/fore) "rft" = ( /turf/closed/wall/r_wall, @@ -47915,7 +48096,7 @@ /turf/open/floor/iron, /area/station/cargo/storage) "rgS" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 1 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -48013,7 +48194,7 @@ "rhV" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/sign/poster/random/directional/south, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "riz" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -48432,6 +48613,7 @@ id = "xenobio4"; name = "Xenobio Pen 4 Blast Door" }, +/obj/machinery/duct, /turf/open/floor/iron, /area/station/science/xenobiology) "rrT" = ( @@ -48554,7 +48736,7 @@ /obj/structure/cable, /obj/machinery/light_switch/directional/north, /obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/aft) "rtP" = ( /obj/structure/rack, @@ -48761,6 +48943,7 @@ id = "xenobio3"; name = "Xenobio Pen 3 Blast Door" }, +/obj/machinery/duct, /turf/open/floor/iron, /area/station/science/xenobiology) "rwE" = ( @@ -48961,11 +49144,6 @@ /obj/item/multitool, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"rzz" = ( -/obj/structure/sign/warning/cold_temp, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/engine, -/area/station/science/xenobiology) "rzB" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -49596,18 +49774,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"rKg" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/item/pen{ - pixel_x = -2; - pixel_y = 5 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "rKh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -49761,11 +49927,11 @@ /turf/open/floor/iron/white, /area/station/science/research) "rMu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/space_heater, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "rMz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/green{ @@ -50297,7 +50463,7 @@ /obj/machinery/camera/directional/west{ c_tag = "Solar Maintenance - Aft Starboard" }, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/aft) "rUU" = ( /obj/machinery/light/directional/north, @@ -50499,10 +50665,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"rYq" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/stone, +/area/station/science/xenobiology) "rYy" = ( /obj/machinery/power/smes, /obj/structure/cable, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/aft) "rYA" = ( /obj/machinery/porta_turret/ai, @@ -51039,6 +51210,14 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/button/door{ + id = "XenoPens"; + layer = 3.3; + name = "Xenobiology Lockdown"; + pixel_y = 0; + req_access = list("xenobiology"); + pixel_x = 24 + }, /turf/open/floor/iron/white, /area/station/science/xenobiology) "sgB" = ( @@ -51103,10 +51282,11 @@ /turf/open/floor/engine, /area/station/science/xenobiology) "sie" = ( -/obj/effect/turf_decal/stripes/corner, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/duct, +/turf/open/floor/stone, /area/station/science/xenobiology) "siz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -51360,7 +51540,7 @@ dir = 1 }, /obj/effect/turf_decal/bot_white, -/obj/machinery/smartfridge/petri/preloaded, +/obj/machinery/smartfridge/extract/preloaded, /turf/open/floor/iron, /area/station/science/xenobiology) "soa" = ( @@ -51607,6 +51787,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"ssE" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/stone, +/area/station/science/xenobiology) "ssI" = ( /obj/machinery/power/emitter, /turf/open/floor/plating, @@ -51717,7 +51904,7 @@ pixel_y = -4 }, /turf/open/floor/carpet/red, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "suP" = ( /obj/structure/lattice, /obj/machinery/atmospherics/components/unary/passive_vent/layer2{ @@ -52141,6 +52328,7 @@ id = "xenobio5"; name = "Xenobio Pen 5 Blast Door" }, +/obj/machinery/duct, /turf/open/floor/iron, /area/station/science/xenobiology) "sCz" = ( @@ -52880,16 +53068,10 @@ /turf/open/floor/plating, /area/station/cargo/drone_bay) "sQq" = ( -/obj/structure/closet/crate/hydroponics, -/obj/item/paper/guides/jobs/hydroponics, /obj/effect/turf_decal/trimline/green/filled/line{ dir = 5 }, -/obj/effect/spawner/random/food_or_drink/seed{ - spawn_all_loot = 1; - spawn_random_offset = 1 - }, -/obj/effect/spawner/random/contraband/prison, +/obj/machinery/composters, /turf/open/floor/iron, /area/station/security/prison/garden) "sQB" = ( @@ -52945,7 +53127,7 @@ /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "sRJ" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/item/kirbyplants{ @@ -53233,7 +53415,7 @@ /area/station/ai_monitored/command/storage/satellite) "sVz" = ( /obj/machinery/airalarm/directional/west, -/obj/machinery/modular_computer/console/preset/command, +/obj/machinery/modular_computer/preset/command, /obj/structure/cable, /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 1 @@ -53384,11 +53566,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/machinery/door/airlock/command{ - name = "Quartermaster's Office" +/obj/machinery/door/airlock/mining{ + name = "Quatermaster's Office" }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "sXE" = ( /obj/structure/cable, /turf/open/floor/wood, @@ -53870,15 +54052,6 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/science/robotics/lab) -"tgm" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "tgo" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -53957,17 +54130,11 @@ /area/station/cargo/storage) "thT" = ( /obj/structure/cable, -/obj/machinery/camera/directional/east{ - c_tag = "Xenobiology Lab - Central West"; - network = list("ss13","rd","xeno") +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/machinery/button/door/directional/east{ - id = "XenoPens"; - name = "Xenobiology Shutters"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "thY" = ( /obj/effect/spawner/random/structure/grille, @@ -54372,7 +54539,7 @@ /area/station/service/library) "toD" = ( /obj/machinery/light/directional/west, -/obj/machinery/modular_computer/console/preset/cargochat/science{ +/obj/machinery/modular_computer/preset/cargochat/science{ dir = 4 }, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -54446,14 +54613,6 @@ /obj/effect/spawner/random/clothing/costume, /turf/open/floor/plating, /area/station/maintenance/port) -"tqw" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "tqx" = ( /obj/machinery/door/window/left/directional/south{ dir = 1; @@ -54530,19 +54689,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) -"trL" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio2"; - layer = 3.3; - name = "Xenobio Pen 2 Blast Doors"; - pixel_y = 1; - req_access = list("xenobiology") - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "trM" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -55217,12 +55363,9 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "tGS" = ( -/obj/structure/cable, -/obj/machinery/door/window/left/directional/north{ - dir = 2; - name = "Containment Pen #2"; - req_access = list("xenobiology") - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, /turf/open/floor/engine, /area/station/science/xenobiology) "tGX" = ( @@ -55282,10 +55425,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"tIe" = ( -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "tIk" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, @@ -55475,7 +55614,7 @@ /turf/open/floor/iron/white, /area/station/science/research) "tKS" = ( -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/requests_console/directional/north{ department = "Chief Engineer's Desk"; @@ -55604,13 +55743,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) -"tMI" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "tMJ" = ( /obj/structure/toilet/greyscale{ dir = 4 @@ -55800,6 +55932,15 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/virology, /turf/open/floor/iron/white, /area/station/medical/pathology) +"tQJ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "Xenolab"; + name = "Test Chamber Blast Door" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "tRb" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable, @@ -57030,6 +57171,10 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) +"unx" = ( +/obj/structure/cable, +/turf/closed/wall/r_wall, +/area/station/maintenance/department/science/xenobiology) "unL" = ( /turf/closed/wall, /area/station/maintenance/starboard/greater) @@ -57782,6 +57927,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/structure/fans/tiny, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) "uAE" = ( @@ -57797,7 +57943,7 @@ /obj/structure/railing{ dir = 1 }, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "uAM" = ( /obj/structure/cable, @@ -57808,6 +57954,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) +"uAV" = ( +/obj/machinery/corral_corner{ + mapping_id = "5" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "uBg" = ( /obj/structure/window/spawner/directional/south, /obj/machinery/computer/atmos_control/carbon_tank{ @@ -58297,7 +58449,7 @@ id = "starboardsolar"; name = "Starboard Quarter Solar Control" }, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/starboard/aft) "uIs" = ( /turf/closed/wall, @@ -58434,21 +58586,6 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron/white, /area/station/security/medical) -"uKW" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 2; - icon_state = "right"; - name = "Containment Pen #2"; - req_access = list("xenobiology") - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio2"; - name = "Xenobio Pen 2 Blast Door" - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "uLa" = ( /obj/effect/spawner/random/structure/table_or_rack, /obj/effect/spawner/random/maintenance/two, @@ -58569,19 +58706,10 @@ /area/station/medical/psychology) "uNs" = ( /obj/effect/turf_decal/delivery, -/obj/machinery/door/firedoor, -/obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "XenoPens"; - name = "Xenobiology Lockdown" - }, -/turf/open/floor/iron, +/turf/closed/wall/r_wall, /area/station/science/xenobiology) "uND" = ( /obj/effect/decal/cleanable/dirt, @@ -58690,15 +58818,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"uQu" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/xenobio_guide/directional/north, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "uQF" = ( /obj/structure/lattice, /obj/item/stack/rods, @@ -58940,6 +59059,11 @@ }, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos) +"uVk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "uVm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59065,7 +59189,7 @@ /obj/machinery/light/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "uXS" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/closet/secure_closet/hydroponics, @@ -59079,7 +59203,7 @@ dir = 9 }, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "uYe" = ( /obj/structure/cable, /obj/effect/landmark/generic_maintenance_landmark, @@ -59124,11 +59248,7 @@ /turf/open/floor/plating, /area/station/maintenance/port) "uYP" = ( -/obj/structure/cable, -/obj/machinery/door/window/left/directional/north{ - name = "Containment Pen #7"; - req_access = list("xenobiology") - }, +/obj/machinery/duct, /turf/open/floor/engine, /area/station/science/xenobiology) "uYT" = ( @@ -59299,6 +59419,11 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) +"vdE" = ( +/obj/structure/lattice, +/obj/item/stack/rods, +/turf/open/space/basic, +/area/space) "vdJ" = ( /obj/structure/closet/crate/freezer, /obj/item/reagent_containers/blood/random, @@ -59549,6 +59674,13 @@ /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 }, +/obj/structure/closet/crate/hydroponics, +/obj/effect/spawner/random/contraband/prison, +/obj/effect/spawner/random/food_or_drink/seed{ + spawn_all_loot = 1; + spawn_random_offset = 1 + }, +/obj/item/paper/guides/jobs/hydroponics, /turf/open/floor/iron, /area/station/security/prison/garden) "viU" = ( @@ -59612,7 +59744,7 @@ name = "Quartermaster's Fax Machine" }, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "vjA" = ( /obj/structure/cable, /obj/machinery/holopad/secure, @@ -59781,12 +59913,6 @@ /obj/structure/fireaxecabinet/mechremoval/directional/east, /turf/open/floor/iron, /area/station/science/robotics/lab) -"vkR" = ( -/obj/machinery/modular_computer/console/preset/id{ - dir = 1 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "vlh" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/rnd_secure_all, @@ -60009,7 +60135,7 @@ /obj/structure/railing{ dir = 1 }, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "vpg" = ( /obj/machinery/door/poddoor/preopen{ @@ -60306,6 +60432,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/service/lawoffice) +"vul" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/science/xenobiology) "vun" = ( /turf/closed/wall, /area/station/medical/storage) @@ -60347,13 +60481,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"vvD" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Xenobiology Lab - Euthanasia Chamber"; - network = list("ss13","rd","xeno") - }, -/turf/open/floor/circuit/telecomms, -/area/station/science/xenobiology) "vvH" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -60395,7 +60522,7 @@ /turf/open/floor/plating, /area/station/maintenance/port) "vxa" = ( -/mob/living/simple_animal/slime, +/mob/living/basic/slime, /turf/open/floor/engine, /area/station/science/xenobiology) "vxi" = ( @@ -60549,13 +60676,13 @@ /turf/open/floor/iron, /area/station/commons/dorms) "vAa" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "vAc" = ( /obj/structure/sign/poster/official/cleanliness{ @@ -60738,18 +60865,6 @@ /obj/item/storage/backpack/duffelbag/med/surgery, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"vDV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/table/glass, -/obj/machinery/reagentgrinder{ - pixel_x = -1; - pixel_y = 8 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "vEd" = ( /obj/effect/decal/cleanable/blood/old, /obj/machinery/processor{ @@ -60773,7 +60888,7 @@ /turf/open/floor/engine/air, /area/station/engineering/atmos) "vEo" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 4 }, /obj/effect/turf_decal/siding/purple{ @@ -60977,9 +61092,6 @@ /area/station/commons/fitness/recreation) "vHG" = ( /obj/structure/table/wood, -/obj/machinery/keycard_auth/directional/south{ - pixel_x = -6 - }, /obj/machinery/button/door/directional/south{ id = "qmprivacy"; name = "Privacy Shutters Control"; @@ -60988,7 +61100,7 @@ pixel_x = 8 }, /turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "vHO" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -61056,15 +61168,6 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"vJl" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "vJt" = ( /obj/structure/cable, /obj/machinery/firealarm/directional/west, @@ -61681,7 +61784,10 @@ /area/station/hallway/primary/central) "vVx" = ( /obj/structure/cable, -/turf/open/floor/iron/white, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/stone, /area/station/science/xenobiology) "vVy" = ( /obj/structure/disposalpipe/segment, @@ -61853,14 +61959,16 @@ /area/station/medical/treatment_center) "vXi" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/computer/camera_advanced/xenobio{ - dir = 8 - }, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, /obj/effect/turf_decal/bot, /obj/machinery/light/small/directional/north, +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_x = -1; + pixel_y = 8 + }, /turf/open/floor/iron, /area/station/science/xenobiology) "vXt" = ( @@ -61903,6 +62011,14 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"vYc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/stone, +/area/station/science/xenobiology) "vYg" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, @@ -62040,6 +62156,13 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"was" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/stone, +/area/station/science/xenobiology) "waB" = ( /obj/machinery/door/airlock/external/glass{ name = "Supply Door Airlock" @@ -62217,7 +62340,7 @@ /turf/open/floor/plating, /area/station/maintenance/port) "wew" = ( -/obj/machinery/modular_computer/console/preset/cargochat/cargo{ +/obj/machinery/modular_computer/preset/cargochat/cargo{ dir = 8 }, /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ @@ -62243,6 +62366,10 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"weG" = ( +/obj/structure/chair/sofa/corp/left, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "weJ" = ( /obj/machinery/door/airlock{ name = "Central Emergency Storage" @@ -62548,7 +62675,7 @@ /obj/machinery/power/smes, /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/aft) "wjV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -62689,6 +62816,16 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"wmJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "wmL" = ( /turf/closed/wall/r_wall, /area/station/science/xenobiology/hallway) @@ -63507,13 +63644,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"wCH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "wCL" = ( /obj/structure/chair/stool/directional/south, /obj/effect/turf_decal/siding/wood{ @@ -63574,6 +63704,16 @@ /obj/structure/cable, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"wEu" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/science/xenobiology) "wEz" = ( /obj/item/stack/sheet/cardboard, /obj/effect/spawner/random/trash/janitor_supplies, @@ -63755,7 +63895,7 @@ /obj/effect/turf_decal/trimline/red/filled/warning{ dir = 10 }, -/obj/machinery/modular_computer/console/preset/cargochat/security{ +/obj/machinery/modular_computer/preset/cargochat/security{ dir = 8 }, /turf/open/floor/iron, @@ -63871,6 +64011,9 @@ pixel_y = 1; req_access = list("xenobiology") }, +/obj/machinery/slime_pen_controller{ + mapping_id = "pen7" + }, /turf/open/floor/iron, /area/station/science/xenobiology) "wKX" = ( @@ -64758,7 +64901,7 @@ "wZi" = ( /obj/structure/sign/directions/arrival/directional/west, /turf/closed/wall, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "wZk" = ( /obj/machinery/light_switch/directional/north, /obj/structure/showcase/cyborg/old{ @@ -64997,6 +65140,17 @@ /obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"xea" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/effect/turf_decal/bot_white, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron, +/area/station/science/xenobiology) "xej" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -65011,11 +65165,14 @@ /turf/open/floor/plating, /area/station/maintenance/central) "xen" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/obj/structure/cable, +/turf/open/floor/stone, +/area/station/science/xenobiology) "xew" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65279,6 +65436,14 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"xiC" = ( +/obj/machinery/light/floor/has_bulb, +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "6"; + dir = 1 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "xiL" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/science/xenobiology) @@ -65654,7 +65819,7 @@ /area/station/engineering/atmos) "xpk" = ( /mob/living/basic/chicken/brown, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "xpo" = ( /turf/open/floor/carpet, @@ -66456,7 +66621,7 @@ c_tag = "Hydroponics - Aft" }, /mob/living/basic/chicken, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "xDD" = ( /obj/effect/turf_decal/stripes/red/line{ @@ -66890,6 +67055,14 @@ /obj/structure/cable, /turf/open/floor/grass, /area/station/medical/pathology) +"xNm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/duct, +/obj/structure/sign/xenobio_guide/directional/east, +/turf/open/floor/stone, +/area/station/science/xenobiology) "xNo" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -67310,8 +67483,28 @@ dir = 1 }, /area/station/engineering/atmos/pumproom) +"xVr" = ( +/obj/machinery/corral_corner{ + mapping_id = "1" + }, +/obj/machinery/corral_corner{ + mapping_id = "2" + }, +/obj/machinery/camera{ + c_tag = "Xenobiology Lab - Pen #7"; + dir = 5; + network = list("ss13","rd","xeno") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "xVu" = ( -/turf/closed/wall, +/obj/machinery/corral_corner{ + mapping_id = "2" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "2" + }, +/turf/open/floor/engine, /area/station/science/xenobiology) "xVA" = ( /obj/machinery/atmospherics/components/binary/pump{ @@ -67549,7 +67742,7 @@ /obj/structure/sign/warning/vacuum/external/directional/east, /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/fore) "xZB" = ( /obj/structure/cable, @@ -67582,7 +67775,12 @@ /obj/effect/turf_decal/trimline/purple/filled/line, /obj/effect/turf_decal/bot_white, /obj/structure/cable, -/obj/machinery/monkey_recycler, +/obj/machinery/biomass_recycler, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, /turf/open/floor/iron, /area/station/science/xenobiology) "yaj" = ( @@ -67860,6 +68058,18 @@ /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /turf/open/floor/plating, /area/station/service/hydroponics) +"yeL" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "XenoPens"; + name = "Xenobiology Lockdown" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "yeS" = ( /obj/item/retractor, /obj/item/hemostat{ @@ -67964,6 +68174,9 @@ req_access = list("xenobiology"); sync_doors = 4 }, +/obj/machinery/slime_pen_controller{ + mapping_id = "pen4" + }, /turf/open/floor/iron, /area/station/science/xenobiology) "ygR" = ( @@ -68025,6 +68238,14 @@ /obj/structure/marker_beacon/purple, /turf/open/space/basic, /area/space/nearstation) +"yig" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/box, +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/camera/directional/north, +/turf/open/floor/iron, +/area/station/science/xenobiology) "yih" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/shower/directional/west, @@ -78825,13 +79046,13 @@ aaa kuK aaa rrt -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aUn +aUn +aUn +aUn +aUn +aUn +aUn aaa aaa aaa @@ -79081,7 +79302,7 @@ dPw aaa aIw aaa -rrt +lMJ aaa aaa aaa @@ -79336,16 +79557,16 @@ xuK xuK aYN lMJ -raz +aIw +lMJ +aYN +xuK +xuK +xuK +lMJ +lMJ +lMJ lMJ -rrt -rrt -rrt -rrt -rrt -rrt -rrt -rrt lMJ rrt rrt @@ -79591,14 +79812,14 @@ aaa eqf eqf eqf -eqf +aYN aaa raz aaa -lMJ -aaa -aaa -aaa +aYN +aYN +eqf +aYN aaa aaa aaa @@ -79848,14 +80069,14 @@ lMJ xuK xuK xuK -eqf +aYN eqf raz -dJN -dJN -dJN -dJN -lMJ +eqf +aYN +xuK +xuK +xuK dJN lMJ rNf @@ -80105,14 +80326,14 @@ aaa eqf eqf eqf -aYN +bOr aaa raz aaa -lMJ -aaa -aaa -aaa +aYN +aYN +eqf +aYN aaa aaa aaa @@ -80364,12 +80585,12 @@ xuK xuK aYN lMJ -raz -aaa -lMJ -aaa -aaa -aaa +fzl +vdE +aYN +xuK +xuK +xuK aaa aaa aaa @@ -82672,17 +82893,17 @@ aaa aaa aaa aaa +xuK +xuK +xuK +aYN aaa +riK aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bOr +xuK +xuK +xuK aaa aaa aaa @@ -82929,17 +83150,17 @@ aaa aaa aaa aaa +eqf +eqf +eqf +aYN aaa +aIw aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aYN +aYN +aYN +eqf aaa aaa aaa @@ -83186,17 +83407,17 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +xuK +xuK +xuK +eqf +eqf +raz +raz +eqf +xuK +xuK +xuK aaa aaa aaa @@ -83306,14 +83527,14 @@ suP aaa aaa lMJ -lzJ +llk cvY -lzJ -lzJ -lzJ -lzJ -lzJ -lzJ +llk +llk +llk +llk +llk +llk lMJ lMJ lMJ @@ -83443,17 +83664,17 @@ aaa aaa aaa aaa +eqf +eqf +eqf +aYN aaa +aIw aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aYN +eqf +aYN +aYN aaa aaa aaa @@ -83562,7 +83783,7 @@ rKQ lMJ lMJ lMJ -lzJ +llk aef cvY tzP @@ -83571,7 +83792,7 @@ tzP aef tzP tzP -lzJ +llk aaa lMJ aaa @@ -83700,17 +83921,17 @@ aaa aaa aaa aaa +xuK +xuK +xuK +aYN aaa +raz aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aYN +xuK +xuK +xuK aaa aaa aaa @@ -83820,14 +84041,14 @@ aaa aaa aaa lMJ -lzJ +llk mFr -lzJ -lzJ -lzJ -lzJ -lzJ -lzJ +llk +llk +llk +llk +llk +llk lMJ lMJ lMJ @@ -84334,14 +84555,14 @@ aaa aaa aaa lMJ -lzJ +llk cqk -lzJ -lzJ -lzJ -lzJ -lzJ -lzJ +llk +llk +llk +llk +llk +llk lMJ lMJ lMJ @@ -84590,7 +84811,7 @@ rKQ lMJ lMJ lMJ -lzJ +llk tzP cqk aef @@ -84599,7 +84820,7 @@ tzP tzP tzP tzP -lzJ +llk aaa anS anS @@ -84848,14 +85069,14 @@ aaa aaa aaa aaa -lzJ +llk cqk -lzJ -lzJ -lzJ -lzJ -lzJ -lzJ +llk +llk +llk +llk +llk +llk lMJ lMJ lMJ @@ -86325,7 +86546,7 @@ cjJ cjJ cjJ cLc -vkR +eKk wZi dWF xOw @@ -86391,7 +86612,7 @@ gXF gmS bhS cxi -uAC +jfJ dvT ecz aaa @@ -86580,9 +86801,9 @@ qIK suJ bor iLV -mQR +cjJ lud -eKk +hAx kQP ifI qzC @@ -87054,7 +87275,7 @@ raz grI hsp iJm -hsp +lzJ oeO ktG mIg @@ -110011,18 +110232,20 @@ aaa aaa aaa aaa -aaa -aaa lMJ lMJ lMJ oMA lSw +oMA +oMA wmL gUS qBo gUS wmL +oMA +oMA lSw oMA aox @@ -110048,8 +110271,6 @@ aaa aaa aaa aaa -aaa -aaa lKu aaa aaa @@ -110267,8 +110488,6 @@ lMJ lMJ lMJ lMJ -lMJ -lMJ lFq oMA oMA @@ -110277,7 +110496,11 @@ oMA eYu agN bXs +hzL +hzL tLc +hjw +hjw juH pJA hLJ @@ -110361,8 +110584,6 @@ aaa aaa aaa aaa -aaa -aaa "} (165,1,1) = {" aaa @@ -110523,8 +110744,6 @@ aaa aaa lMJ aaa -lMJ -aaa aaa uaR oue @@ -110534,8 +110753,12 @@ qad xfm nHG hjw +hjw +hjw bqJ hzL +hzL +hzL wNO tml mez @@ -110618,8 +110841,6 @@ aaa aaa aaa aaa -aaa -aaa "} (166,1,1) = {" aaa @@ -110780,8 +111001,6 @@ aaa aaa dxK aaa -dxK -aaa aaa oMA sKf @@ -110791,7 +111010,11 @@ vhZ tsy sRa ppC +hjw +hjw twu +mBj +mBj mKD hxY nae @@ -110875,8 +111098,6 @@ aaa aaa aaa aaa -aaa -aaa "} (167,1,1) = {" aaa @@ -111037,8 +111258,6 @@ aaa aaa lMJ aaa -lMJ -aaa aaa uaR jHX @@ -111048,7 +111267,11 @@ toR syV jsi eoZ +hjw +hjw jjm +hjw +hjw nui wWV vsp @@ -111071,8 +111294,6 @@ aaa aaa aaa aaa -aaa -aaa lKu aaa aaa @@ -111295,8 +111516,6 @@ lMJ lMJ lMJ lMJ -lMJ -lMJ jlU jlU jlU @@ -111305,9 +111524,13 @@ jlU jlU snZ lVB +ycv +ycv bsE -uHD kvT +kvT +uHD +xea jlU jlU jlU @@ -111389,8 +111612,6 @@ aaa aaa aaa aaa -aaa -aaa "} (169,1,1) = {" aaa @@ -111551,8 +111772,6 @@ aaa aaa aaa aaa -lMJ -aaa aaa aaa cXP @@ -111562,7 +111781,11 @@ plp gog fUx pst +pYh +pYh fkk +pYh +pYh vuK yag hFz @@ -111646,8 +111869,6 @@ aaa aaa aaa aaa -aaa -aaa "} (170,1,1) = {" aaa @@ -111806,25 +112027,27 @@ eoU aaf aaa aaa -aaa -aaa lMJ aaa aaa aaa cXP mtu -vxa +mtu mtu jfS bQQ lVB +ycv +ycv oWa -iWc +ycv +ycv +mJQ ces elm mtu -vxa +mtu mtu cXP aaa @@ -111836,8 +112059,6 @@ aaa aaa aaa aaa -aaa -aaa lKu aaa aaa @@ -112062,8 +112283,6 @@ sUo eoU aaf aaa -aaa -aaa rrt rrt lMJ @@ -112076,7 +112295,11 @@ ycd gog jjj jNo +min +jOI sgk +min +min klK aDQ hFz @@ -112160,8 +112383,6 @@ aaa aaa aaa aaa -aaa -aaa "} (172,1,1) = {" aaa @@ -112319,28 +112540,30 @@ eoU eoU aaf aaa -aaa -aaa rrt aaa aaa bPB kWc -xiL +jlU gTK hMv wKT vGq vXi ncF +flp +yeL uNs +flp +flp gSM frt vGq qko gyI phI -xiL +jlU kvO bPB aaa @@ -112384,43 +112607,41 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(173,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 +"} +(173,1,1) = {" aaa aaa aaa @@ -112502,7 +112723,7 @@ rQw rQw jhd uRa -rff +ivK rRB rff jnv @@ -112574,31 +112795,33 @@ aaf aaf aaf aaf -aaf -aaa rrt aox aox aox hbK hbK +oFv +jlU rMu -xiL -jCO -fdZ -mMK +nOh mLW -mMK +lJg +mLW +mLW +cFW mMK jxH -tMI +pwZ pwZ dxc +bRc fdZ -fdZ -jvX -xiL +nOh +nOh gTS +jlU +nqk hbK hbK lMJ @@ -112674,8 +112897,6 @@ aaa aaa aaa aaa -aaa -aaa "} (174,1,1) = {" aaa @@ -112831,31 +113052,33 @@ eoU eoU eoU eoU -lMJ -aaa rrt lAu lAu lMJ wrc oyj +qAr +uVk xen mdo vAa -vJl +iwO amV vVx -kyh +iwO iwO pQj -jzw +thT thT jzw sie -pgM -qiD +nYL +nYL nYL ddK +hoV +gga hAN wrc aaa @@ -112931,8 +113154,6 @@ aaa aaa aaa aaa -aaa -aaa "} (175,1,1) = {" aaa @@ -113089,29 +113310,31 @@ jRg jRg eoU lMJ -aaa -lMJ lMJ lMJ lMJ wrc oyj xiL -xiL +fUH +mtu +mtu idA -xVu +lYY dgz -tIe -xVu -hja -vDV -nSC -xVu +eTk +uAV +mtu +mtu +mtu +aVx pJf pfP xVu -idA -xiL +mtu +mtu +mtu +iUk xiL lmn wrc @@ -113188,8 +113411,6 @@ aaa aaa aaa aaa -aaa -aaa "} (176,1,1) = {" aaa @@ -113345,8 +113566,6 @@ pnE wit lPa eoU -lMJ -aaa rrt lAu lAu @@ -113354,21 +113573,25 @@ lMJ hbK uhs xiL -kHt -iOZ -idF -faD -lTi -xVu -cXP -cXP -cXP -xVu -jbk -iWc -pVR -hCw -mCj +mtu +mtu +mtu +idA +mtu +dgz +eTk +mtu +mtu +mtu +mtu +mtu +pJf +pfP +mtu +mtu +mtu +mtu +mtu xiL lmn hbK @@ -113445,8 +113668,6 @@ aaa aaa aaa aaa -aaa -aaa "} (177,1,1) = {" aaa @@ -113604,34 +113825,34 @@ jRg eoU lMJ aaa -rrt -aox -aox -aox +aaa +aaa wrc oyj xiL eSr +vxa +fmR tGS -uKW -faD -iWc -cXP -aJQ +uYP +dgz +pfP +uYP +uYP gXw -pZi -cXP -lVB -iWc -pDl +mtu +mtu +pJf +pfP +uYP uYP +cjT +vxa ljF xiL lmn wrc -lMJ -lMJ -mxQ +aaa aaa aaa aaa @@ -113861,34 +114082,34 @@ eoU eoU lMJ aaa -rrt -lAu -lAu -lMJ -hbK +aaa +aaa +wrc oyj xiL mtu +mtu +mtu iOZ -trL -faD -iWc -cXP -gXw -gXw -vvD -cXP -lVB -iWc -eSC -hCw +mtu +dgz +eTk +mtu +mtu +mtu +mtu +mtu +pJf +pfP +mtu +mtu +mtu +mtu mtu xiL lmn -hbK -aaa +wrc aaa -lMJ aaa aaa aaa @@ -114118,34 +114339,34 @@ wJw eoU lMJ aaa -lMJ -lMJ -lMJ -lMJ -wrc +aaa +aaa +hbK oyj xiL -xiL -idA -xVu -uQu -iWc -xVu -pXo -jSj -rzz -xVu -lVB -exu -xVu -idA -xiL +iTV +mtu +mtu +iOZ +gbm +dgz +rYq +jhX +mtu +mtu +mtu +jhX +meQ +pfP +kOV +mtu +mtu +mtu +xVr xiL lmn -wrc -aaa +hbK aaa -mxQ aaa aaa aaa @@ -114373,37 +114594,37 @@ cGV hDe xEg eoU -lMJ -aaa rrt -lAu -lAu -lMJ +aaa +aaa +aaa wrc oyj -oyj xiL -nEb -bSu -caf -tgm -gKD -fdZ -fdZ -fdZ -iMR -bnQ -psc -wCH -rKg +mtu +mtu +mtu +iOZ +mtu +dgz +eTk +mtu +mtu +mtu +mtu +mtu +pJf +pfP +mtu +mtu +mtu +mtu +mtu xiL lmn -lmn wrc aaa aaa -mxQ -aaa aaa aaa aaa @@ -114630,33 +114851,35 @@ wEf ojv wJw eoU -lMJ -aaa rrt aox aox aox -hbK -hbK +wrc oyj xiL -nkq -rwx -byP -dac -evD +eSr +vxa +khw +lFe +uYP +dgz +pfP +uYP +uYP +xiC +mtu +mtu pJf -ycv -tIe -min -min -tqw -ohD -dQa +pfP +uYP +uYP +eml +vxa +ljF xiL lmn -hbK -hbK +wrc lMJ lMJ mxQ @@ -114730,8 +114953,6 @@ aaa aaa aaa aaa -aaa -aaa "} (182,1,1) = {" aaa @@ -114888,31 +115109,34 @@ eoU eoU eoU lMJ -aaa -aaa -aaa -rrt -aaa -aaa -wrc +lAu +lAu +lMJ +hbK oyj xiL -jgq -imw -aft -ygF -rrL -fMF -min -irp -sCv -ixR -shY -eOP -jgq +mtu +mtu +mtu +idA +mtu +dgz +eTk +mtu +mtu +mtu +mtu +mtu +pJf +pfP +mtu +mtu +mtu +mtu +mtu xiL lmn -wrc +hbK aaa aaa lMJ @@ -114986,9 +115210,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa "} (183,1,1) = {" aaa @@ -115144,38 +115365,38 @@ yfx ets ets eoU -lMJ -aaa -aaa -aaa rrt -aaa -aaa +lMJ +lMJ +lMJ wrc oyj xiL +cFw mtu mtu -vHm -shY -qvQ -aft -diq -shY -gjv -aft -xCA +idA +obi +dgz +eTk +iCZ +mtu +mtu +mtu +cqQ +pJf +pfP +jau mtu mtu +mtu +dMA xiL lmn wrc aaa aaa -rrt -aaa -aaa -aaa +mxQ aaa aaa aaa @@ -115401,38 +115622,38 @@ oiI rvx dzY eoU -lMJ -aaa -aaa -aaa rrt -rrt -rrt -hbK +lAu +lAu +lMJ +wrc oyj xiL -rTi -iXS -vHm -xCA -mtu -vHm -gva -xCA -vxa -vHm -xCA -iXS -lWM xiL +nEb +bae +elT +heo +ddN +fJq +gmB +gmB +gmB +gmB +gmB +was +ssE +nOh +vYc +wmJ +ogF +xiL +unx lmn -hbK -lMJ -lMJ -rrt -aaa +wrc aaa aaa +mxQ aaa aaa aaa @@ -115658,38 +115879,38 @@ aLr aJe ets eoU -lMJ -aaa -aaa -aaa -aaa -aaa aaa +aox +aox +aox hbK oyj +oyj xiL +nkq +rwx +wEu +vul +kkT +jdj +xNm +jdj +jdj +jdj +jdj +qID +jdj +qqq +kKG +ohD +dQa xiL -xiL -xiL -weD -mtu -vHm -gva -xCA -mtu -fVV -xiL -xiL -xiL -xiL +lmn lmn hbK -aaa -aaa -aaa -aaa -lKu -aaa +lMJ +lMJ +mxQ aaa aaa aaa @@ -115915,37 +116136,37 @@ eoU eoU eoU eoU -lMJ -aaa -aaa -aaa aaa aaa +rrt aaa +dAJ hbK oyj -oyj -goW -msN xiL +jgq +imw +aft +ygF +rrL +cHV jlU -gEu -lKd +aYt gva -iZJ -rDd +aYt jlU +jlU +sCv +ixR +shY +eOP +jgq xiL -qxr -lmn lmn -hAN hbK +dAJ aaa -aaa -aaa -aaa -aaa +lMJ aaa aaa aaa @@ -116172,32 +116393,37 @@ xWn kwZ kwZ eoU -lMJ -aaa -aaa aaa aaa +rrt aaa aaa -hbK -rDf -rDf -rDf -uhs -fjd -jlU +wrc +oyj +xiL +mtu +mtu +vHm +shY +qvQ +aft eJI -sZN -msR -xkv +ycv +kCw +ycv lOY -jlU -iOJ +shY +gjv +aft +xCA +mtu +mtu +xiL lmn -rDf -rDf -utD -hbK +wrc +aaa +aaa +rrt aaa aaa aaa @@ -116269,13 +116495,16 @@ aaa aaa aaa aaa +"} +(188,1,1) = {" +aaa +aaa +aaa aaa aaa aaa aaa aaa -"} -(188,1,1) = {" aaa aaa aaa @@ -116314,46 +116543,38 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aWl -rrt -rrt -rrt -rrt -rrt -rrt -rrt -rrt -rrt -rrt -rrt -rrt -rrt -rrt -rrt -aWl +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aWl +rrt +rrt +rrt +rrt +rrt +rrt +rrt +rrt +rrt +rrt +rrt +rrt +rrt +rrt +rrt +aWl aaa aaa aaa @@ -116429,37 +116650,37 @@ iiL kwZ aWa eoU -lMJ -nYJ -lMJ +aaa +aaa rrt rrt rrt -lMJ -hbK -hbK -wMz -rDf -eUe -eSb -nnc -hdy -nnc -rvK -nnc -hdy -aWp -eSb -udp -wHd -uLa hbK +oyj +xiL +rTi +iXS +vHm +xCA +mtu +vHm +fHs +ycv +kCw +kCw +gRY +xCA +mtu +vHm +xCA +iXS +lWM +xiL +lmn hbK -aaa -aaa -aaa -aaa -aaa +lMJ +lMJ +rrt aaa aaa aaa @@ -116686,39 +116907,39 @@ tDR aNB kwZ eoU -lMJ aaa aaa -lMJ aaa aaa aaa -lMJ -hbK hbK -hbK -mgS -hbK -jlU -mtu -mtu -gyK +oyj +xiL +xiL +xiL +xiL +weD mtu +vHm +weG +ycv +ycv +ycv +dGk +xCA mtu -jlU -hbK -mTg -hbK -hbK +fVV +xiL +xiL +xiL +xiL +lmn hbK -lMJ -aaa -aaa -aaa aaa aaa aaa aaa +lKu aaa aaa aaa @@ -116943,29 +117164,33 @@ eoU eoU eoU eoU -lMJ aaa aaa -lMJ -aaa aaa aaa -lMJ aaa hbK -tmU -fGy -wyo +oyj +oyj +goW +msN +xiL jlU -dLm -mtu -gyK -mtu -mtu +gEu +lKd +ycv +ycv +ycv +ycv +ycv +iZJ +rDd jlU -qgn -mCV -wyo +xiL +qxr +lmn +lmn +hAN hbK aaa aaa @@ -117041,10 +117266,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa "} (191,1,1) = {" aaa @@ -117201,28 +117422,32 @@ lMJ lMJ lMJ lMJ -lMJ -rrt -nYJ -rrt -rrt -rrt -lMJ -lMJ +aaa +aaa +aaa +aaa hbK -pWT rDf -uLa +rDf +rDf +uhs +fjd jlU -eSr -mtu -jQz -nJr -ljF +yig +sZN +pUX +nmy +cVQ +nmy +pUX +xkv +igH jlU -lUS -pHt +iOJ +lmn rDf +rDf +utD hbK aaa aaa @@ -117298,10 +117523,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa "} (192,1,1) = {" aaa @@ -117458,33 +117679,33 @@ aaa aaa lMJ aaa -aaa -aaa -lMJ -aaa -aaa -aaa +rrt +rrt +rrt lMJ -aaa -bPB hbK -wrc -wrc -jlU -mtu -mtu -mtu -mtu -mtu -jlU -wrc -wrc hbK -bPB -lMJ -aaa -aaa -aaa +wMz +rDf +eUe +eSb +nnc +hdy +cbn +tQJ +tQJ +rvK +tQJ +tQJ +nnc +hdy +aWp +eSb +udp +wHd +uLa +hbK +hbK aaa aaa aaa @@ -117715,25 +117936,32 @@ aaa aaa nYJ aaa -aaa -aaa -aaa -aaa -aaa -aaa lMJ aaa aaa aaa -aaa lMJ +hbK +hbK +hbK +mgS +hbK jlU +mtu +mtu +mtu +mtu +gyK +mtu +mtu +mtu +mtu jlU -bPu -asL -kcu -jlU -jlU +hbK +mTg +hbK +hbK +hbK lMJ aaa aaa @@ -117809,13 +118037,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa "} (194,1,1) = {" aaa @@ -117971,32 +118192,32 @@ rrt rrt rrt rrt -lMJ -lMJ -rrt -rrt -lAu -rrt -rrt -rrt -rrt -rrt rrt lMJ -lMJ -lMJ -jlU -jlU -jlU -jlU -jlU -lMJ -aaa -aaa aaa aaa aaa +lMJ aaa +hbK +tmU +fGy +wyo +jlU +dLm +mtu +mtu +mtu +gyK +mtu +mtu +mtu +mtu +jlU +qgn +mCV +wyo +hbK aaa aaa aaa @@ -118229,31 +118450,31 @@ aaa aaa lMJ aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -lMJ -lMJ -lMJ +nYJ +rrt +rrt +rrt lMJ lMJ -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hbK +pWT +rDf +uLa +jlU +eSr +mtu +mtu +mtu +jQz +mtu +mtu +nJr +ljF +jlU +lUS +pHt +rDf +hbK aaa aaa aaa @@ -118486,23 +118707,31 @@ aaa aaa lMJ aaa +lMJ aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -lKu -aaa -aaa -lMJ -aaa lMJ aaa +bPB +hbK +wrc +wrc +jlU +mtu +mtu +mtu +mtu +mtu +mtu +mtu +mtu +mtu +jlU +wrc +wrc +hbK +bPB lMJ aaa aaa @@ -118579,14 +118808,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa "} (197,1,1) = {" aaa @@ -118743,28 +118964,28 @@ rrt rrt rrt rrt +lMJ aaa aaa aaa +lMJ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -rrt -lMJ -aaa lMJ -aaa +jlU +jlU +bPu +mtu +mtu +asL +mtu +mtu +kcu +jlU +jlU lMJ -rrt -aaa -aaa -aaa aaa aaa aaa @@ -119000,27 +119221,27 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -dxK -aaa +rrt +lAu +rrt +rrt +rrt +rrt +rrt +rrt +lMJ +lMJ +lMJ +jlU +jlU +jlU +jlU +jlU +jlU +jlU +jlU +jlU lMJ -aaa -dxK -aaa -aaa -aaa aaa aaa aaa @@ -119268,15 +119489,15 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa +lMJ lMJ aaa aaa +lMJ aaa aaa +lMJ +lMJ aaa aaa aaa @@ -119522,18 +119743,18 @@ aaa aaa aaa aaa +lKu aaa aaa +lMJ aaa aaa aaa -aaa -aaa -yib -aaa +lMJ aaa aaa aaa +lMJ aaa aaa aaa @@ -119781,17 +120002,17 @@ aaa aaa aaa aaa +rrt +lMJ aaa aaa aaa +lMJ aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +lMJ +rrt aaa aaa aaa @@ -120039,15 +120260,15 @@ aaa aaa aaa aaa +dxK aaa aaa aaa +lMJ aaa aaa aaa -aaa -aaa -aaa +dxK aaa aaa aaa @@ -120300,7 +120521,7 @@ aaa aaa aaa aaa -aaa +lMJ aaa aaa aaa @@ -120557,7 +120778,7 @@ aaa aaa aaa aaa -aaa +yib aaa aaa aaa diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index 48857e26ff76..056d85d90db0 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -593,7 +593,7 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "ahG" = ( -/obj/machinery/modular_computer/console/preset/research{ +/obj/machinery/modular_computer/preset/research{ dir = 4 }, /obj/machinery/airalarm/directional/west, @@ -917,7 +917,7 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) "alK" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 4 }, /obj/effect/turf_decal/tile/purple/opposingcorners, @@ -3414,7 +3414,7 @@ /turf/open/floor/iron/dark/textured, /area/station/command/heads_quarters/ce) "aRK" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 4 }, /obj/effect/turf_decal/tile/purple/fourcorners, @@ -3588,7 +3588,7 @@ /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) "aTn" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/effect/turf_decal/stripes/white/line{ @@ -4712,7 +4712,7 @@ /turf/open/floor/iron/dark, /area/station/security/prison/visit) "bif" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 4 }, /turf/open/floor/iron/dark/smooth_large, @@ -10504,7 +10504,7 @@ /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/hop) "cGQ" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 4 }, /turf/open/floor/iron/dark, @@ -11146,7 +11146,7 @@ /obj/effect/turf_decal/siding/thinplating_new{ dir = 8 }, -/obj/machinery/modular_computer/console/preset/engineering{ +/obj/machinery/modular_computer/preset/engineering{ dir = 8 }, /obj/structure/cable, @@ -13122,11 +13122,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/lobby) -"drB" = ( -/obj/machinery/processor/slime, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/pod/light, -/area/station/maintenance/floor3/starboard) "drD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ @@ -14051,7 +14046,7 @@ /turf/open/floor/iron, /area/station/service/hydroponics) "dFO" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/machinery/light/small/directional/east, @@ -18502,7 +18497,7 @@ }, /obj/machinery/vending/wallmed/directional/east, /obj/machinery/light/directional/east, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /turf/open/floor/iron/dark, @@ -20195,7 +20190,7 @@ dir = 4 }, /obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/item/radio/intercom/directional/south, @@ -20724,7 +20719,7 @@ /area/station/maintenance/floor1/port/fore) "fyT" = ( /obj/structure/cable, -/obj/machinery/modular_computer/console/preset/engineering{ +/obj/machinery/modular_computer/preset/engineering{ dir = 8 }, /obj/machinery/light_switch/directional/north, @@ -25139,7 +25134,7 @@ /area/station/maintenance/floor2/port/aft) "gJz" = ( /obj/effect/turf_decal/tile/green/opposingcorners, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 1 }, /turf/open/floor/iron/white, @@ -26647,7 +26642,7 @@ }, /area/station/commons/fitness) "heZ" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 1 }, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -27214,7 +27209,7 @@ /obj/effect/turf_decal/trimline/neutral/warning{ dir = 8 }, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/effect/turf_decal/bot_white, @@ -27796,7 +27791,7 @@ }, /obj/machinery/newscaster/directional/east, /obj/machinery/light/directional/east, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /turf/open/floor/iron/dark, @@ -28139,13 +28134,6 @@ /obj/structure/stairs/west, /turf/open/floor/pod/light, /area/station/maintenance/floor1/port) -"hAV" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/structure/table/glass, -/obj/item/bonesetter, -/obj/item/stack/medical/bone_gel, -/turf/open/floor/iron/white/textured, -/area/station/medical/treatment_center) "hBe" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, @@ -28202,7 +28190,7 @@ /turf/open/floor/iron/cafeteria, /area/station/commons/locker) "hBX" = ( -/mob/living/simple_animal/slime, +/mob/living/basic/slime, /turf/open/floor/grass, /area/station/science/xenobiology) "hBY" = ( @@ -28991,7 +28979,7 @@ /turf/open/floor/catwalk_floor, /area/station/maintenance/floor1/starboard/fore) "hNg" = ( -/obj/machinery/modular_computer/console/preset/cargochat/cargo{ +/obj/machinery/modular_computer/preset/cargochat/cargo{ dir = 1 }, /turf/open/floor/iron/textured_corner, @@ -30916,7 +30904,7 @@ /turf/open/floor/pod/light, /area/station/maintenance/floor1/port) "iqy" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 4 }, /obj/machinery/button/door/directional/west{ @@ -32500,7 +32488,7 @@ pixel_x = 17 }, /obj/effect/turf_decal/tile/purple/fourcorners, -/obj/machinery/modular_computer/console/preset/cargochat/science, +/obj/machinery/modular_computer/preset/cargochat/science, /turf/open/floor/iron/white, /area/station/science/lab) "iOh" = ( @@ -32962,7 +32950,7 @@ /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/exit/escape_pod) "iUS" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ name = "Captain's Computer" }, /obj/item/radio/intercom/directional/north, @@ -34437,7 +34425,7 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 9 }, -/obj/machinery/modular_computer/console/preset/cargochat/security{ +/obj/machinery/modular_computer/preset/cargochat/security{ dir = 8 }, /turf/open/floor/iron, @@ -35577,7 +35565,7 @@ /obj/effect/turf_decal/siding/thinplating_new{ dir = 10 }, -/obj/machinery/modular_computer/console/preset/cargochat/engineering{ +/obj/machinery/modular_computer/preset/cargochat/engineering{ dir = 4 }, /turf/open/floor/iron/dark/textured, @@ -40158,7 +40146,7 @@ /turf/open/floor/iron/smooth, /area/station/construction) "kOs" = ( -/obj/machinery/modular_computer/console/preset/cargochat/medical{ +/obj/machinery/modular_computer/preset/cargochat/medical{ dir = 1 }, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -41323,7 +41311,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /turf/open/floor/iron/smooth_edge{ @@ -41540,7 +41528,7 @@ /turf/open/floor/plating, /area/station/engineering/supermatter/room) "lhi" = ( -/obj/machinery/modular_computer/console/preset/command, +/obj/machinery/modular_computer/preset/command, /turf/open/floor/carpet/blue, /area/station/command/bridge) "lhp" = ( @@ -42261,7 +42249,7 @@ }, /area/station/science/genetics) "lpB" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 4 }, /obj/effect/decal/cleanable/dirt/dust, @@ -44014,7 +44002,7 @@ /turf/open/floor/plating, /area/station/maintenance/floor3/starboard/aft) "lNE" = ( -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /obj/machinery/light/directional/north, /turf/open/floor/wood/large, /area/station/command/heads_quarters/qm) @@ -49842,7 +49830,7 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 }, -/obj/machinery/modular_computer/console/preset/engineering, +/obj/machinery/modular_computer/preset/engineering, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -51151,9 +51139,6 @@ /turf/open/floor/pod/light, /area/station/maintenance/floor2/port/aft) "nyc" = ( -/obj/machinery/computer/camera_advanced/xenobio{ - dir = 4 - }, /turf/open/floor/iron/white, /area/station/science/xenobiology) "nyd" = ( @@ -53907,7 +53892,7 @@ /turf/open/floor/iron/dark, /area/station/hallway/floor1/fore) "oiH" = ( -/mob/living/simple_animal/slime, +/mob/living/basic/slime, /turf/open/floor/grass, /area/station/maintenance/floor3/starboard) "oiJ" = ( @@ -55572,7 +55557,7 @@ }, /area/station/hallway/floor3/aft) "oGm" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/effect/turf_decal/tile/purple/opposingcorners, @@ -55581,7 +55566,7 @@ /area/station/science/genetics) "oGo" = ( /obj/effect/turf_decal/trimline/red/filled/line, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 1 }, /turf/open/floor/iron/dark, @@ -57400,7 +57385,7 @@ /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "piA" = ( -/obj/machinery/modular_computer/console/preset/curator{ +/obj/machinery/modular_computer/preset/curator{ dir = 4 }, /turf/open/floor/engine/cult, @@ -58705,7 +58690,7 @@ /turf/open/floor/iron/white, /area/station/science/circuits) "pBw" = ( -/mob/living/simple_animal/slime, +/mob/living/basic/slime, /obj/machinery/camera/directional/south{ c_tag = "Xenobiology - Slime Pens" }, @@ -65933,7 +65918,7 @@ /area/station/medical/medbay/lobby) "rwY" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 1 }, /turf/open/floor/pod/light, @@ -69053,7 +69038,7 @@ /turf/closed/wall, /area/station/commons/locker) "swe" = ( -/obj/machinery/modular_computer/console/preset/engineering{ +/obj/machinery/modular_computer/preset/engineering{ dir = 4 }, /obj/effect/turf_decal/siding/thinplating_new/corner{ @@ -69128,7 +69113,7 @@ /turf/open/floor/engine/hull, /area/space/nearstation) "sxl" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 4 }, /obj/effect/turf_decal/tile/purple/opposingcorners, @@ -72019,7 +72004,7 @@ /turf/open/space/openspace, /area/space) "tlX" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/effect/turf_decal/siding/wood{ @@ -72059,7 +72044,7 @@ /turf/open/floor/wood, /area/station/commons/vacant_room/office) "tms" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 4 }, /obj/structure/cable, @@ -72647,7 +72632,6 @@ /turf/open/floor/iron, /area/station/hallway/floor4/fore) "tuA" = ( -/obj/machinery/monkey_recycler, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit, @@ -76472,7 +76456,7 @@ /turf/open/floor/iron, /area/station/hallway/floor3/fore) "uBL" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/machinery/newscaster/directional/east, @@ -78694,7 +78678,7 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "vgn" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 1 }, /obj/structure/cable, @@ -80099,7 +80083,7 @@ /turf/open/floor/mineral/plastitanium, /area/station/maintenance/floor2/starboard/aft) "vyy" = ( -/obj/machinery/modular_computer/console/preset/cargochat/service{ +/obj/machinery/modular_computer/preset/cargochat/service{ dir = 8 }, /obj/machinery/light/directional/south, @@ -80713,7 +80697,7 @@ /area/station/science/xenobiology/hallway) "vHn" = ( /obj/machinery/light/cold/no_nightlight/directional/east, -/mob/living/simple_animal/slime, +/mob/living/basic/slime, /turf/open/floor/grass, /area/station/science/xenobiology) "vHq" = ( @@ -80768,7 +80752,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/modular_computer/console/preset/engineering{ +/obj/machinery/modular_computer/preset/engineering{ dir = 1 }, /obj/effect/turf_decal/tile/yellow/half/contrasted, @@ -82848,7 +82832,6 @@ /turf/open/floor/iron, /area/station/security/prison) "wlb" = ( -/obj/machinery/processor/slime, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, @@ -88685,7 +88668,7 @@ /turf/open/floor/iron/dark, /area/station/security/evidence) "xKy" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 8 }, /turf/open/floor/iron/dark, @@ -250472,7 +250455,7 @@ fNq iKT xNf mpy -drB +iKT iHm rGl vIh diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index faee3367eab0..e5b29c800e85 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -881,7 +881,7 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/evacuation/ship) "cs" = ( -/obj/machinery/modular_computer/console/preset/id/centcom, +/obj/machinery/modular_computer/preset/id/centcom, /turf/open/floor/carpet/royalblue, /area/centcom/central_command_areas/admin) "ct" = ( @@ -1337,7 +1337,7 @@ /turf/open/floor/plating, /area/centcom/syndicate_mothership/expansion_bombthreat) "dC" = ( -/obj/machinery/modular_computer/console/preset/id/centcom{ +/obj/machinery/modular_computer/preset/id/centcom{ dir = 8 }, /turf/open/floor/carpet/purple, @@ -1446,7 +1446,7 @@ /area/centcom/central_command_areas/ghost_spawn) "dP" = ( /obj/machinery/dna_scannernew, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "dQ" = ( /obj/machinery/light/floor/has_bulb, @@ -2112,7 +2112,7 @@ /turf/open/space/basic, /area/space/nearstation) "fU" = ( -/obj/machinery/modular_computer/console/preset/id/centcom, +/obj/machinery/modular_computer/preset/id/centcom, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "fV" = ( @@ -2240,7 +2240,7 @@ /area/centcom/syndicate_mothership/control) "go" = ( /obj/structure/closet, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "gp" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ @@ -2993,7 +2993,7 @@ dir = 4 }, /obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "ir" = ( /obj/machinery/shower/directional/south, @@ -5473,7 +5473,7 @@ "pt" = ( /obj/structure/table/reinforced/plastitaniumglass, /obj/machinery/fax, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "pu" = ( /obj/item/food/spaghetti/copypasta{ @@ -7283,7 +7283,7 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/borbop) "ur" = ( -/obj/machinery/modular_computer/console/preset/id/centcom{ +/obj/machinery/modular_computer/preset/id/centcom{ dir = 4; desc = "A specialized console to connect to gaming computers to be able to broadcast live. Seriously, where does Ook find this stuff?" }, @@ -8195,7 +8195,7 @@ /area/centcom/syndicate_mothership) "wV" = ( /obj/machinery/computer/security/wooden_tv, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "wW" = ( /obj/item/kirbyplants{ @@ -8843,7 +8843,7 @@ /turf/open/floor/catwalk_floor/iron_dark, /area/centcom/syndicate_mothership/control) "yC" = ( -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "yD" = ( /turf/closed/indestructible/rock/snow, @@ -9350,7 +9350,7 @@ /area/centcom/central_command_areas/admin) "zY" = ( /obj/structure/closet/crate/bin, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "zZ" = ( /obj/effect/turf_decal/tile/brown/half/contrasted, @@ -9661,7 +9661,7 @@ "AR" = ( /obj/structure/table/reinforced/plastitaniumglass, /obj/item/dice/d20, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "AS" = ( /obj/machinery/light/floor/has_bulb, @@ -10545,7 +10545,7 @@ /turf/open/floor/carpet/green, /area/centcom/central_command_areas/admin) "Dt" = ( -/obj/machinery/modular_computer/console/preset/id/centcom, +/obj/machinery/modular_computer/preset/id/centcom, /obj/effect/turf_decal/siding/dark{ dir = 5 }, @@ -11295,7 +11295,6 @@ /obj/effect/turf_decal/stripes/end{ dir = 4 }, -/obj/machinery/processor/slime, /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_bioterrorism) "FD" = ( @@ -11418,7 +11417,7 @@ dir = 4 }, /obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "FT" = ( /obj/structure/table/wood, @@ -11471,10 +11470,10 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/ferry) "Gb" = ( -/obj/machinery/modular_computer/console/preset/id/centcom{ +/obj/machinery/modular_computer/preset/id/centcom{ dir = 4 }, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "Gc" = ( /obj/structure/sign/poster/contraband/random/directional/south, @@ -11856,7 +11855,7 @@ }, /obj/item/dice/d6, /obj/item/dice/d6, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "Hd" = ( /obj/structure/chair/stool/bar/directional/east, @@ -11944,7 +11943,7 @@ }, /area/centcom/central_command_areas/admin) "Hp" = ( -/obj/machinery/modular_computer/console/preset/id/centcom{ +/obj/machinery/modular_computer/preset/id/centcom{ dir = 4 }, /turf/open/floor/iron/dark, @@ -12272,7 +12271,7 @@ /area/centcom/wizard_station) "In" = ( /obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "Io" = ( /obj/docking_port/stationary{ @@ -12934,7 +12933,7 @@ /turf/open/floor/iron/dark/herringbone, /area/centcom/central_command_areas/hall) "Ki" = ( -/obj/machinery/modular_computer/console/preset/id/centcom{ +/obj/machinery/modular_computer/preset/id/centcom{ dir = 1 }, /turf/open/floor/iron/dark/herringbone, @@ -13744,7 +13743,7 @@ }, /area/centcom/central_command_areas/hall) "Mk" = ( -/obj/machinery/modular_computer/console/preset/id/centcom{ +/obj/machinery/modular_computer/preset/id/centcom{ dir = 4 }, /turf/open/floor/plating/abductor, @@ -13884,7 +13883,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 8 }, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "MF" = ( /obj/structure/curtain/cloth/fancy, @@ -13990,7 +13989,6 @@ /turf/open/floor/engine/cult, /area/centcom/wizard_station) "MT" = ( -/obj/machinery/computer/camera_advanced/xenobio, /obj/structure/noticeboard/directional/east, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/expansion_bioterrorism) @@ -14562,7 +14560,7 @@ name = "First Success"; desc = "A little known fact is that clones requires souls, the men and woman who worked on the first success of what would come to be known as the Iden Project did not know that." }, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "OF" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -14777,7 +14775,7 @@ "Pl" = ( /obj/structure/table/reinforced/plastitaniumglass, /obj/item/dice/d10, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "Pm" = ( /obj/effect/turf_decal/delivery, @@ -14835,7 +14833,6 @@ /obj/effect/turf_decal/stripes/end{ dir = 8 }, -/obj/machinery/monkey_recycler, /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_bioterrorism) "Pv" = ( @@ -15663,7 +15660,7 @@ /turf/open/floor/grass, /area/centcom/central_command_areas/evacuation/ship) "RK" = ( -/obj/machinery/modular_computer/console/preset/id/centcom{ +/obj/machinery/modular_computer/preset/id/centcom{ dir = 1; desc = "A specialized console to connect to gaming computers to be able to broadcast live. Seriously, where does Ook find this stuff?" }, @@ -16290,7 +16287,7 @@ /turf/open/floor/iron/dark/herringbone, /area/centcom/central_command_areas/hall) "Tx" = ( -/obj/machinery/modular_computer/console/preset/id/centcom, +/obj/machinery/modular_computer/preset/id/centcom, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "Ty" = ( @@ -17089,7 +17086,7 @@ /turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) "VL" = ( -/obj/machinery/modular_computer/console/preset/id/centcom{ +/obj/machinery/modular_computer/preset/id/centcom{ dir = 1 }, /turf/open/floor/iron/grimy, @@ -17344,7 +17341,7 @@ /turf/open/floor/wood/large, /area/centcom/central_command_areas/medical) "Ww" = ( -/mob/living/simple_animal/slime, +/mob/living/basic/slime, /turf/open/floor/circuit/red/off, /area/centcom/syndicate_mothership/expansion_bioterrorism) "Wx" = ( @@ -17401,7 +17398,7 @@ /obj/machinery/door/window/brigdoor/security{ dir = 1 }, -/turf/open/floor/circuit/telecomms, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "WI" = ( /obj/effect/turf_decal/siding/dark/end{ @@ -17986,7 +17983,7 @@ /turf/open/floor/iron/dark/herringbone, /area/centcom/central_command_areas/evacuation/ship) "Yj" = ( -/obj/machinery/modular_computer/console/preset/id/centcom{ +/obj/machinery/modular_computer/preset/id/centcom{ dir = 4 }, /turf/open/floor/mineral/titanium/white, @@ -18178,7 +18175,7 @@ /area/centcom/central_command_areas/hall) "YY" = ( /obj/machinery/computer/atmos_control/noreconnect{ - atmos_chambers = list("nukiebase"="Burn Chamber"); + atmos_chambers = list("nukiebase"="Burn Chamber"); desc = "Used to monitor the Syndicate Ordnance Laboratory's burn chamber."; dir = 1; name = "Ordnance Chamber Monitor" diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 120462d4ac8a..096c0677e899 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -934,7 +934,7 @@ /area/station/escapepodbay) "acV" = ( /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/prison/garden) "acW" = ( /obj/structure/chair{ @@ -1134,7 +1134,7 @@ dir = 8 }, /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/prison/garden) "adr" = ( /obj/structure/chair{ @@ -1175,10 +1175,10 @@ /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 }, +/obj/structure/cable, /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 1 }, -/obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/prison/garden) "adx" = ( @@ -1525,7 +1525,11 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 4 }, -/turf/open/floor/iron/white, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "aeu" = ( /obj/effect/landmark/start/shaft_miner, @@ -2243,20 +2247,6 @@ /obj/structure/chair/stool/bar/directional/east, /turf/open/floor/wood/large, /area/station/service/barber) -"ahk" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) -"ahl" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez4"; - name = "Xenobiology Containment Blast Door" - }, -/turf/open/floor/plating, -/area/station/science/xenobiology) "ahm" = ( /turf/open/openspace/airless/planetary, /area/station/asteroid) @@ -2276,11 +2266,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, /turf/open/floor/plating/airless, /area/station/asteroid) -"ahp" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "ahr" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/spawner/random/structure/girder, @@ -2291,7 +2276,7 @@ /area/station/asteroid) "ahs" = ( /obj/machinery/newscaster/directional/north, -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /obj/structure/sign/calendar/directional/west, /turf/open/floor/carpet, /area/station/command/heads_quarters/hos) @@ -2935,7 +2920,7 @@ /area/station/engineering/break_room) "amA" = ( /obj/machinery/newscaster/directional/north, -/obj/machinery/modular_computer/console/preset/civilian, +/obj/machinery/modular_computer/preset/civilian, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/yellow/fourcorners, @@ -3049,7 +3034,7 @@ /turf/open/floor/iron, /area/station/engineering/main) "anJ" = ( -/obj/machinery/modular_computer/console/preset/engineering{ +/obj/machinery/modular_computer/preset/engineering{ dir = 8 }, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -3166,7 +3151,7 @@ dir = 8 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "apr" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ dir = 6 @@ -3325,7 +3310,12 @@ "aqB" = ( /obj/effect/turf_decal/trimline/purple/filled/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, +/obj/machinery/duct, +/obj/machinery/light/floor/has_bulb, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "aqM" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -3378,26 +3368,9 @@ /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/lesser) "arI" = ( -/obj/structure/closet/crate/hydroponics, -/obj/item/paper/guides/jobs/hydroponics, -/obj/item/seeds/onion, -/obj/item/seeds/garlic, -/obj/item/seeds/potato, -/obj/item/seeds/tomato, -/obj/item/seeds/carrot, -/obj/item/seeds/grass, -/obj/item/seeds/ambrosia, -/obj/item/seeds/wheat, -/obj/item/seeds/pumpkin, -/obj/effect/spawner/random/contraband/prison, -/obj/machinery/light/directional/east, -/obj/item/radio/intercom/prison/directional/east, -/obj/machinery/camera{ - c_tag = "Security - Prison Garden"; - dir = 6; - network = list("ss13","Security","prison") +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 }, -/obj/item/seeds/tower, /turf/open/floor/iron/dark, /area/station/security/prison/garden) "asc" = ( @@ -4085,10 +4058,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"ayN" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/engine, -/area/station/science/xenobiology) "ayQ" = ( /obj/machinery/atmospherics/pipe/multiz/scrubbers/hidden/layer2{ dir = 1 @@ -4211,7 +4180,7 @@ /area/station/command/bridge) "aAJ" = ( /turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "aAK" = ( /obj/machinery/light/directional/north, /obj/structure/table, @@ -5369,7 +5338,7 @@ /turf/open/floor/engine/cult, /area/station/service/library) "aJT" = ( -/mob/living/simple_animal/slime, +/mob/living/basic/slime, /turf/open/floor/engine, /area/station/science/xenobiology) "aJV" = ( @@ -5716,7 +5685,7 @@ layer = 3.1; linked_elevator_id = "tram_xeno_lift"; pixel_y = 2; - preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") + preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") }, /turf/closed/wall, /area/station/science/xenobiology) @@ -6139,18 +6108,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/white, /area/station/medical/pathology) -"aPz" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/table, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/button/door{ - id = "containdeez5"; - name = "Cell Containment Toggle Button" - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "aPB" = ( /obj/machinery/firealarm/directional/east{ pixel_y = 6 @@ -7296,8 +7253,10 @@ /turf/open/floor/iron/dark, /area/station/medical/morgue) "bgH" = ( -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "bgN" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner, @@ -7355,7 +7314,7 @@ /area/station/maintenance/starboard/lesser) "bia" = ( /obj/machinery/light/directional/east, -/obj/machinery/modular_computer/console/preset/engineering{ +/obj/machinery/modular_computer/preset/engineering{ dir = 8 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7420,12 +7379,10 @@ /turf/open/floor/iron, /area/station/construction/mining/aux_base) "biS" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 6 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, +/obj/effect/turf_decal/trimline/neutral/filled/line, /turf/open/floor/iron, /area/station/security/prison/garden) "bja" = ( @@ -7647,7 +7604,7 @@ "bmO" = ( /obj/machinery/elevator_control_panel/directional/west{ linked_elevator_id = "tram_cargo_lift"; - preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") + preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") }, /obj/effect/landmark/lift_id{ specific_lift_id = "tram_cargo_lift" @@ -7721,8 +7678,9 @@ /turf/open/floor/iron, /area/station/cargo/storage) "boZ" = ( -/turf/open/misc/asteroid/airless, -/area/station/maintenance/department/cargo) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/station/asteroid) "bpa" = ( /obj/structure/table/reinforced, /obj/item/stock_parts/cell/high{ @@ -7814,22 +7772,6 @@ }, /turf/open/floor/plating, /area/station/medical/pharmacy) -"bql" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/south{ - name = "Containment Pen #4"; - req_access = list("xenobiology") - }, -/obj/machinery/door/window/left/directional/north{ - name = "Containment Pen #4"; - req_access = list("xenobiology") - }, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez4"; - name = "Xenobiology Containment Blast Door" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "bqu" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -8093,6 +8035,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/command/heads_quarters/hos) +"bvm" = ( +/obj/machinery/corral_corner{ + mapping_id = "3" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "bvq" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -8132,7 +8080,7 @@ dir = 4 }, /obj/machinery/disposal/bin, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "bvM" = ( /obj/machinery/computer/mech_bay_power_console, @@ -8335,7 +8283,7 @@ }, /area/station/command/bridge) "byp" = ( -/obj/machinery/modular_computer/console/preset/research, +/obj/machinery/modular_computer/preset/research, /obj/effect/landmark/event_spawn, /turf/open/floor/glass/reinforced, /area/station/command/heads_quarters/rd) @@ -8377,7 +8325,7 @@ "byL" = ( /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "byM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/neutral/filled/line, @@ -9514,7 +9462,7 @@ "bSs" = ( /obj/machinery/elevator_control_panel/directional/west{ linked_elevator_id = "tram_sci_lift"; - preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") + preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") }, /obj/structure/industrial_lift/public, /obj/effect/turf_decal/trimline/dark_red/warning{ @@ -9814,7 +9762,6 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 }, -/obj/machinery/keycard_auth/directional/east, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/button/door/directional/east{ @@ -9823,7 +9770,7 @@ pixel_y = -11 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "bXG" = ( /obj/machinery/door/airlock/public/glass, /turf/open/floor/iron/smooth, @@ -9968,15 +9915,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering) -"bZN" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/prison/garden) "bZR" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor, @@ -10650,15 +10588,11 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/central) "cim" = ( -/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/duct, /obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/machinery/disposal/bin, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "ciA" = ( /obj/machinery/door/airlock/external{ @@ -10848,6 +10782,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"cml" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "4" + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/science/xenobiology) "cmo" = ( /obj/effect/turf_decal/siding/thinplating/end, /turf/open/floor/iron/dark, @@ -10897,7 +10838,7 @@ /obj/structure/industrial_lift/public, /obj/machinery/elevator_control_panel/directional/west{ linked_elevator_id = "tram_perma_lift"; - preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") + preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") }, /obj/effect/turf_decal/caution/stand_clear/red{ dir = 1 @@ -10934,7 +10875,7 @@ /obj/structure/industrial_lift/public, /obj/machinery/elevator_control_panel/directional/south{ linked_elevator_id = "tram_dorm_lift"; - preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") + preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") }, /turf/open/floor/plating/elevatorshaft, /area/station/commons/dorms) @@ -11248,14 +11189,6 @@ }, /turf/open/floor/iron, /area/station/security/processing) -"cue" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "cut" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/directional/south, @@ -11379,7 +11312,7 @@ network = list("ss13","cargo") }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "cwg" = ( /obj/structure/stairs/north, /turf/open/floor/iron/stairs/medium, @@ -11560,7 +11493,7 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "cyW" = ( /obj/effect/turf_decal/siding/wood{ @@ -11578,15 +11511,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/maintenance/department/medical) -"cyY" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez4"; - name = "Xenobiology Containment Blast Door" - }, -/turf/open/floor/plating, -/area/station/science/xenobiology) "cyZ" = ( /obj/machinery/atmospherics/miner/nitrogen, /turf/open/floor/engine/n2, @@ -11953,6 +11877,13 @@ /obj/item/clothing/mask/cigarette/cigar/cohiba, /turf/open/floor/wood, /area/station/command/meeting_room) +"cFO" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/machinery/seed_extractor, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) "cGc" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -12073,9 +12004,11 @@ /turf/open/floor/iron, /area/station/maintenance/department/science) "cIn" = ( -/obj/machinery/seed_extractor, /obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 }, /turf/open/floor/iron/dark, /area/station/security/prison/garden) @@ -12168,25 +12101,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) -"cJP" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/north{ - name = "Containment Pen #7"; - req_access = list("xenobiology") - }, -/obj/machinery/door/window/left/directional/south{ - name = "Containment Pen #7"; - req_access = list("xenobiology") - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez7"; - name = "Xenobiology Containment Blast Door" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "cJR" = ( /obj/machinery/rnd/server, /turf/open/floor/circuit/telecomms/server, @@ -12662,25 +12576,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/glass/reinforced, /area/station/ai_monitored/turret_protected/aisat/hallway) -"cSj" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/door/window/left/directional/east{ - name = "Containment Pen #1"; - req_access = list("xenobiology") - }, -/obj/machinery/door/window/left/directional/west{ - name = "Containment Pen #1"; - req_access = list("xenobiology") - }, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez1"; - name = "Xenobiology Containment Blast Door" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "cSp" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 @@ -12864,7 +12759,9 @@ }, /obj/machinery/light/directional/east, /obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/white, +/obj/item/disk/vacuum_upgrade/biomass, +/obj/item/disk/vacuum_upgrade/biomass, +/turf/open/floor/stone, /area/station/science/xenobiology) "cWj" = ( /obj/structure/railing{ @@ -13098,7 +12995,9 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/turf/open/floor/iron/white, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/stone, /area/station/science/xenobiology) "cZH" = ( /obj/effect/turf_decal/trimline/purple/filled/corner, @@ -13259,7 +13158,7 @@ /turf/open/floor/glass/reinforced, /area/station/ai_monitored/turret_protected/aisat/hallway) "ddz" = ( -/obj/machinery/modular_computer/console/preset/cargochat/service{ +/obj/machinery/modular_computer/preset/cargochat/service{ dir = 1 }, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -13318,12 +13217,11 @@ /turf/open/space/openspace, /area/station/solars/starboard/fore) "deh" = ( +/obj/structure/sink/directional/west, /obj/effect/turf_decal/stripes/line{ - dir = 1 + dir = 4 }, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/sink/directional/west, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "del" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -13907,12 +13805,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) -"dne" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "dnh" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -14295,6 +14187,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) +"dtN" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/duct, +/turf/open/floor/stone, +/area/station/science/xenobiology) "dtS" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sink/kitchen/directional/west, @@ -15132,7 +15029,7 @@ /area/station/science/ordnance/freezerchamber) "dIN" = ( /obj/structure/railing, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "dIO" = ( /obj/machinery/door/poddoor/preopen{ @@ -15439,7 +15336,7 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "dOx" = ( /obj/structure/window/reinforced/spawner/directional/west, @@ -15569,7 +15466,7 @@ /turf/open/floor/iron, /area/station/maintenance/tram/left) "dPS" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 8 }, /obj/machinery/keycard_auth/directional/north, @@ -15700,7 +15597,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "dQR" = ( /obj/machinery/power/terminal{ @@ -16179,6 +16076,14 @@ }, /turf/open/floor/noslip, /area/station/hallway/primary/tram/center) +"dZn" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "3"; + dir = 1 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/science/xenobiology) "dZu" = ( /obj/machinery/mecha_part_fabricator, /obj/effect/turf_decal/delivery, @@ -16286,7 +16191,7 @@ "eaX" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/railing, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "eaZ" = ( /obj/structure/rack, @@ -16345,7 +16250,7 @@ /area/station/medical/morgue) "ebH" = ( /obj/structure/cable, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "ebL" = ( /obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ @@ -16403,10 +16308,10 @@ /turf/open/floor/iron/dark/textured, /area/station/engineering/main) "ecs" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 5 + dir = 1 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/security/prison/garden) "ecu" = ( @@ -17517,7 +17422,7 @@ /turf/open/misc/asteroid, /area/station/maintenance/department/security) "eui" = ( -/turf/open/floor/engine, +/turf/open/floor/engine/airless, /area/station/asteroid) "euu" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -17735,13 +17640,8 @@ /turf/open/floor/iron/dark, /area/station/cargo/miningdock/oresilo) "exH" = ( -/obj/structure/table, /obj/effect/turf_decal/stripes/line, -/obj/machinery/button/door{ - id = "containdeez4"; - name = "Cell Containment Toggle Button" - }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "exJ" = ( /obj/structure/cable, @@ -18060,6 +17960,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/warehouse) +"eCA" = ( +/obj/machinery/corral_corner{ + mapping_id = "1" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "1" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "eCE" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -18096,6 +18005,15 @@ /obj/structure/table, /turf/open/floor/iron, /area/station/commons/dorms) +"eDO" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "eDV" = ( /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/decal/cleanable/dirt, @@ -18254,8 +18172,9 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "eGt" = ( +/obj/machinery/duct, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "eHj" = ( /obj/machinery/vending/tool, @@ -18632,7 +18551,7 @@ /obj/machinery/newscaster/directional/north, /obj/structure/sign/clock/directional/west, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "ePx" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -18689,15 +18608,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/catwalk_floor, /area/station/maintenance/department/crew_quarters/dorms) -"eQm" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/structure/chair/comfy/black{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "eQn" = ( /obj/machinery/door/airlock/command/glass{ name = "Secure External Operations" @@ -19257,7 +19167,7 @@ "eZy" = ( /obj/machinery/light/directional/north, /mob/living/basic/chicken/brown, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "eZC" = ( /obj/effect/decal/cleanable/dirt, @@ -19880,6 +19790,12 @@ /obj/structure/grille, /turf/closed/wall/r_wall, /area/station/engineering/atmos) +"fkf" = ( +/obj/machinery/corral_corner{ + mapping_id = "4" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "fkg" = ( /obj/machinery/biogenerator, /obj/effect/turf_decal/tile/green/fourcorners, @@ -19893,7 +19809,7 @@ "fkq" = ( /obj/machinery/light/directional/south, /obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/modular_computer/console/preset/engineering{ +/obj/machinery/modular_computer/preset/engineering{ dir = 1 }, /obj/structure/cable, @@ -20142,9 +20058,9 @@ /turf/open/floor/iron, /area/station/security/checkpoint/science) "fof" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /obj/structure/sign/warning/cold_temp/directional/south, -/turf/open/floor/circuit/telecomms, +/obj/machinery/computer/slime_market, +/turf/open/floor/iron/white, /area/station/science/xenobiology) "fog" = ( /obj/machinery/vending/cigarette, @@ -20295,15 +20211,6 @@ }, /turf/open/openspace, /area/station/hallway/primary/tram/center) -"fqM" = ( -/obj/structure/disposaloutlet{ - dir = 8 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "fqZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, @@ -20438,6 +20345,10 @@ }, /turf/open/floor/iron, /area/station/security/prison) +"ftk" = ( +/obj/machinery/drone_dispenser/preloaded, +/turf/open/floor/iron/smooth, +/area/station/maintenance/department/science) "ftm" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner, /obj/effect/turf_decal/trimline/neutral/filled/corner{ @@ -20898,10 +20809,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/textured, /area/station/engineering/main) -"fAm" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/station/science/xenobiology) "fAA" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -21230,7 +21137,7 @@ /area/station/maintenance/department/crew_quarters/dorms) "fGj" = ( /obj/machinery/computer/atmos_control/oxygen_tank{ - atmos_chambers = list("o2ordance"="Oxygen Supply") + atmos_chambers = list("o2ordance"="Oxygen Supply") }, /obj/effect/turf_decal/stripes/line, /obj/machinery/airalarm/directional/north, @@ -21268,7 +21175,7 @@ /turf/open/floor/iron, /area/station/commons/dorms) "fGS" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 1 }, /obj/structure/sign/clock/directional/south, @@ -21789,22 +21696,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/processing) -"fPv" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/north{ - name = "Containment Pen #1"; - req_access = list("xenobiology") - }, -/obj/machinery/door/window/left/directional/south{ - name = "Containment Pen #1"; - req_access = list("xenobiology") - }, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez1"; - name = "Xenobiology Containment Blast Door" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "fPx" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood/poker, @@ -21835,22 +21726,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering) -"fQo" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/north{ - name = "Containment Pen #5"; - req_access = list("xenobiology") - }, -/obj/machinery/door/window/left/directional/south{ - name = "Containment Pen #5"; - req_access = list("xenobiology") - }, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez5"; - name = "Xenobiology Containment Blast Door" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "fQK" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -22369,14 +22244,14 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/machinery/door/airlock/command/glass{ - name = "Quartermaster's Office" +/obj/machinery/door/airlock/mining{ + name = "Quatermaster's Office" }, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "gcp" = ( /turf/closed/wall/r_wall, /area/ruin/powered/clownplanet) @@ -23845,7 +23720,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, -/turf/open/floor/iron/white, +/obj/machinery/duct, +/turf/open/floor/stone, /area/station/science/xenobiology) "gDr" = ( /obj/effect/turf_decal/stripes/corner{ @@ -24229,7 +24105,10 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 }, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "gKb" = ( /obj/effect/turf_decal/stripes/end{ @@ -24519,11 +24398,13 @@ /turf/open/floor/catwalk_floor, /area/station/maintenance/central/lesser) "gNr" = ( -/obj/machinery/processor/slime, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 }, -/turf/open/floor/iron/white, +/obj/structure/table/glass, +/obj/item/vacuum_pack, +/obj/item/vacuum_pack, +/turf/open/floor/stone, /area/station/science/xenobiology) "gNu" = ( /obj/effect/decal/cleanable/dirt, @@ -24670,18 +24551,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance) -"gPD" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/table, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/button/door{ - id = "containdeez7"; - name = "Cell Containment Toggle Button" - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "gPM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, @@ -24817,12 +24686,9 @@ /area/station/engineering/storage/tech) "gSi" = ( /obj/structure/table, -/obj/machinery/fax{ - fax_name = "Quartermaster's Office"; - name = "Quartermaster's Fax Machine" - }, +/obj/item/clipboard, /turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "gSj" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/glass, @@ -25313,15 +25179,6 @@ /obj/machinery/light/warm/directional/south, /turf/open/floor/iron/dark, /area/station/service/chapel) -"hcn" = ( -/obj/structure/window/reinforced/spawner, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "hcv" = ( /obj/effect/spawner/random/entertainment/arcade{ dir = 1 @@ -25346,12 +25203,6 @@ /obj/effect/decal/cleanable/dirt, /turf/closed/wall/r_wall, /area/ruin/powered/clownplanet) -"hdA" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "hdB" = ( /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, @@ -25595,13 +25446,12 @@ /turf/open/misc/asteroid, /area/station/maintenance/department/cargo) "hik" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/structure/sink/directional/east, /obj/machinery/airalarm/directional/west, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "hin" = ( /turf/closed/wall/rock, @@ -26316,10 +26166,6 @@ pixel_x = 10; pixel_y = 20 }, -/mob/living/simple_animal/slime/pet{ - colour = "orange"; - name = "Happy Accident" - }, /turf/open/floor/plastic, /area/station/engineering/break_room) "huz" = ( @@ -26827,14 +26673,6 @@ /obj/structure/cable/layer1, /turf/open/floor/plating/airless, /area/station/solars/starboard/fore) -"hDT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/effect/turf_decal/trimline/purple/filled/corner, -/obj/effect/turf_decal/trimline/purple/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "hEb" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 @@ -27482,15 +27320,6 @@ /obj/effect/landmark/start/lawyer, /turf/open/floor/wood, /area/station/service/lawoffice) -"hPB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "hPI" = ( /obj/machinery/holopad, /obj/structure/cable, @@ -27524,11 +27353,9 @@ dir = 8 }, /obj/item/radio/intercom/directional/west, -/obj/machinery/modular_computer/console/preset/id{ - dir = 4 - }, +/obj/structure/closet/secure_closet/quartermaster, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "hQA" = ( /obj/effect/turf_decal/trimline/dark_red/filled/corner, /obj/effect/turf_decal/trimline/dark_red/filled/corner{ @@ -27750,7 +27577,7 @@ "hUC" = ( /obj/machinery/egg_incubator, /obj/structure/window/reinforced/spawner/directional/south, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "hUK" = ( /obj/effect/turf_decal/stripes/corner{ @@ -27988,7 +27815,7 @@ /obj/structure/disposalpipe/trunk{ dir = 1 }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "hYK" = ( /obj/effect/spawner/structure/window/reinforced, @@ -28074,7 +27901,7 @@ /area/station/command/heads_quarters/cmo) "ial" = ( /obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/machinery/modular_computer/console/preset/cargochat/engineering, +/obj/machinery/modular_computer/preset/cargochat/engineering, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plastic, @@ -28101,7 +27928,7 @@ /turf/open/floor/carpet, /area/station/commons/dorms) "iaZ" = ( -/obj/machinery/modular_computer/console/preset/engineering{ +/obj/machinery/modular_computer/preset/engineering{ dir = 1 }, /obj/structure/window/reinforced/spawner, @@ -28818,26 +28645,11 @@ /obj/machinery/atm, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"inn" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/structure/chair/comfy/black{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "int" = ( -/obj/structure/table, -/obj/item/paper_bin/carbon{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/stamp/qm, /obj/effect/landmark/event_spawn, /obj/structure/disposalpipe/segment, /turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "inC" = ( /obj/structure/cable/layer1, /obj/structure/cable, @@ -29905,10 +29717,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"iEF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/circuit/telecomms, -/area/station/science/xenobiology) "iEO" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -30065,6 +29873,19 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/closet/crate/hydroponics, +/obj/item/seeds/onion, +/obj/item/paper/guides/jobs/hydroponics, +/obj/item/seeds/garlic, +/obj/item/seeds/potato, +/obj/item/seeds/tomato, +/obj/item/seeds/carrot, +/obj/item/seeds/grass, +/obj/item/seeds/ambrosia, +/obj/item/seeds/wheat, +/obj/item/seeds/pumpkin, +/obj/effect/spawner/random/contraband/prison, +/obj/item/seeds/tower, /turf/open/floor/iron, /area/station/security/prison/garden) "iHH" = ( @@ -31407,15 +31228,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"jcm" = ( -/obj/structure/disposaloutlet{ - dir = 8 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "jcq" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/chair/stool/directional/east, @@ -31566,6 +31378,7 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, +/obj/effect/spawner/random/engineering/canister, /turf/open/floor/iron, /area/station/maintenance/department/science) "jeO" = ( @@ -31749,6 +31562,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"jhk" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/stone, +/area/station/science/xenobiology) "jhs" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 5 @@ -31903,13 +31726,6 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"jkd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/engine, -/area/station/science/xenobiology) "jkq" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 @@ -32562,9 +32378,7 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 5 }, -/obj/item/kirbyplants{ - icon_state = "plant-10" - }, +/obj/machinery/slime_extract_requestor, /turf/open/floor/iron/white, /area/station/science/lobby) "jur" = ( @@ -32949,7 +32763,7 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "jAY" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -33108,25 +32922,6 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/iron/dark, /area/station/service/hydroponics) -"jDF" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/east{ - name = "Containment Pen #5"; - req_access = list("xenobiology") - }, -/obj/machinery/door/window/left/directional/west{ - name = "Containment Pen #5"; - req_access = list("xenobiology") - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez5"; - name = "Xenobiology Containment Blast Door" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "jDN" = ( /obj/structure/table/wood, /obj/item/storage/photo_album/chapel, @@ -33364,7 +33159,7 @@ id = "containdeez2"; name = "Cell Containment Toggle Button" }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "jHi" = ( /obj/machinery/vending/wardrobe/viro_wardrobe, @@ -34735,19 +34530,7 @@ /turf/open/floor/carpet, /area/station/security/detectives_office) "keT" = ( -/obj/machinery/door/airlock/research{ - glass = 1; - name = "Slime Euthanization Chamber"; - opacity = 0 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 8 - }, +/obj/machinery/plumbing/ooze_compressor, /turf/open/floor/iron/white, /area/station/science/xenobiology) "kfl" = ( @@ -35060,12 +34843,6 @@ }, /turf/open/floor/iron, /area/station/cargo/office) -"kkx" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "kkK" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 6 @@ -35081,7 +34858,7 @@ c_tag = "Science - Xenobiology North"; network = list("ss13","rd") }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "kkP" = ( /obj/structure/bookcase/random/religion, @@ -35351,6 +35128,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"koO" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/machinery/biogenerator, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) "kpb" = ( /obj/structure/industrial_lift/tram/white, /turf/open/floor/noslip/tram_plate, @@ -35686,7 +35470,7 @@ /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 1 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/prison/garden) "kwo" = ( /obj/structure/table/wood, @@ -35979,7 +35763,7 @@ /area/station/engineering/gravity_generator) "kBz" = ( /obj/structure/window/reinforced/spawner/directional/east, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "kBO" = ( /obj/effect/turf_decal/siding/wood/corner{ @@ -36456,6 +36240,12 @@ /obj/structure/table, /turf/open/floor/iron, /area/station/security/prison) +"kHX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/central) "kHZ" = ( /obj/structure/railing{ dir = 4 @@ -36713,7 +36503,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, -/turf/open/floor/iron/white, +/obj/machinery/duct, +/turf/open/floor/stone, /area/station/science/xenobiology) "kMl" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -36929,7 +36720,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "kOr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37060,12 +36851,6 @@ /turf/open/floor/iron/showroomfloor, /area/station/security/warden) "kQM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /obj/machinery/disposal/bin, /obj/structure/sign/warning/deathsposal/directional/west, /obj/structure/disposalpipe/trunk{ @@ -37075,7 +36860,10 @@ c_tag = "Science - Xenobiology West"; network = list("ss13","rd") }, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "kQX" = ( /obj/machinery/computer/security{ @@ -37212,6 +37000,10 @@ }, /turf/open/floor/wood, /area/station/command/meeting_room) +"kTh" = ( +/obj/machinery/duct, +/turf/open/floor/stone, +/area/station/science/xenobiology) "kTi" = ( /obj/machinery/duct, /obj/structure/cable, @@ -37949,7 +37741,7 @@ /obj/structure/railing{ dir = 1 }, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "ldy" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ @@ -38191,25 +37983,6 @@ /obj/effect/turf_decal/trimline/white/warning, /turf/open/floor/iron, /area/station/maintenance/tram/mid) -"lhS" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/north{ - name = "Containment Pen #3"; - req_access = list("xenobiology") - }, -/obj/machinery/door/window/left/directional/south{ - name = "Containment Pen #3"; - req_access = list("xenobiology") - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez3"; - name = "Xenobiology Containment Blast Door" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "lhT" = ( /obj/structure/cable/multilayer/connected, /obj/effect/decal/cleanable/dirt, @@ -38914,7 +38687,7 @@ /area/station/medical/medbay/central) "lsR" = ( /mob/living/basic/chicken, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "lti" = ( /obj/structure/fans/tiny/invisible, @@ -39167,11 +38940,16 @@ /turf/open/floor/iron/white, /area/station/science/lower) "lym" = ( -/obj/machinery/monkey_recycler, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 }, -/turf/open/floor/iron/white, +/obj/machinery/biomass_recycler, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/obj/item/stack/biomass, +/turf/open/floor/stone, /area/station/science/xenobiology) "lyq" = ( /obj/effect/decal/cleanable/dirt, @@ -39216,7 +38994,11 @@ /area/station/science/ordnance/storage) "lyQ" = ( /obj/effect/turf_decal/trimline/purple/filled/line, -/turf/open/floor/iron/white, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/stone, /area/station/science/xenobiology) "lyR" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -40165,10 +39947,10 @@ /obj/machinery/hydroponics/soil, /obj/machinery/status_display/ai/directional/south, /obj/effect/turf_decal/trimline/green/filled/line, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, /obj/item/cultivator, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/prison/garden) "lQC" = ( @@ -40656,6 +40438,10 @@ }, /turf/open/floor/glass/reinforced, /area/station/ai_monitored/turret_protected/aisat/hallway) +"lYq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/science/xenobiology) "lYr" = ( /obj/structure/table, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -40700,7 +40486,7 @@ "lYE" = ( /obj/structure/cable, /mob/living/basic/chicken/brown, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "lYT" = ( /obj/structure/table/reinforced, @@ -41062,7 +40848,7 @@ "mey" = ( /obj/structure/railing, /obj/structure/window/reinforced/spawner/directional/east, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "meB" = ( /obj/effect/decal/cleanable/dirt, @@ -41472,9 +41258,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"mln" = ( -/turf/open/floor/circuit/telecomms, -/area/station/science/xenobiology) "mlu" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external{ @@ -42038,22 +41821,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"muf" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/east{ - name = "Containment Pen #3"; - req_access = list("xenobiology") - }, -/obj/machinery/door/window/left/directional/west{ - name = "Containment Pen #3"; - req_access = list("xenobiology") - }, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez3"; - name = "Xenobiology Containment Blast Door" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "mur" = ( /obj/effect/turf_decal/trimline/brown/filled/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42413,12 +42180,10 @@ /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/greater) "mBm" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez1"; - name = "Xenobiology Containment Blast Door" +/obj/effect/turf_decal/stripes/line{ + dir = 9 }, -/turf/open/floor/plating, +/turf/open/floor/stone, /area/station/science/xenobiology) "mBq" = ( /turf/closed/wall/r_wall, @@ -43017,11 +42782,12 @@ /turf/open/floor/iron/dark, /area/station/medical/storage) "mLE" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "mLM" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -43244,7 +43010,7 @@ id = "containdeez6"; name = "Cell Containment Toggle Button" }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "mPm" = ( /obj/effect/decal/cleanable/dirt, @@ -43506,19 +43272,11 @@ /turf/open/floor/iron, /area/station/security/checkpoint/engineering) "mTR" = ( +/obj/machinery/light/floor/has_bulb, /obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/reagent_dispensers/watertank, -/obj/item/extinguisher{ - pixel_x = 4; - pixel_y = 3 + dir = 6 }, -/obj/item/extinguisher, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "mUd" = ( /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output{ @@ -43672,7 +43430,7 @@ /obj/structure/industrial_lift/public, /obj/machinery/elevator_control_panel/directional/north{ linked_elevator_id = "tram_upper_center_lift"; - preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") + preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") }, /obj/effect/turf_decal/trimline/dark_red/warning{ dir = 1 @@ -43895,12 +43653,10 @@ /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) "nbI" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez7"; - name = "Xenobiology Containment Blast Door" +/obj/effect/turf_decal/stripes/line{ + dir = 5 }, -/turf/open/floor/plating, +/turf/open/floor/stone, /area/station/science/xenobiology) "nbK" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ @@ -44338,7 +44094,8 @@ /area/station/security/brig) "njf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/stone, /area/station/science/xenobiology) "njl" = ( /obj/machinery/duct, @@ -44455,7 +44212,7 @@ /turf/open/floor/plating, /area/station/cargo/sorting) "nkE" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /obj/structure/window/spawner/directional/north, @@ -44562,7 +44319,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "nmx" = ( /obj/structure/chair{ dir = 8 @@ -45541,7 +45298,7 @@ pixel_x = -32 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "nAS" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -45730,7 +45487,10 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 }, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "nEF" = ( /obj/structure/table/glass, @@ -46062,8 +45822,9 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 9 }, -/obj/machinery/smartfridge/extract/preloaded, -/turf/open/floor/iron/white, +/obj/machinery/light/floor/has_bulb, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/stone, /area/station/science/xenobiology) "nLK" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -47325,6 +47086,12 @@ /obj/structure/table, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"ohh" = ( +/obj/machinery/corral_corner{ + mapping_id = "6" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "oho" = ( /obj/structure/bookcase, /turf/open/floor/wood, @@ -47443,7 +47210,7 @@ /obj/structure/railing{ dir = 1 }, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "ojH" = ( /obj/effect/decal/cleanable/dirt, @@ -47974,6 +47741,7 @@ dir = 1 }, /obj/effect/turf_decal/trimline/neutral/filled/corner, +/obj/effect/turf_decal/trimline/neutral/filled/line, /turf/open/floor/iron/dark, /area/station/security/prison/garden) "ots" = ( @@ -48570,17 +48338,6 @@ /obj/effect/spawner/random/trash/food_packaging, /turf/open/floor/catwalk_floor, /area/station/maintenance/starboard/central) -"oCY" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "oDd" = ( /obj/effect/turf_decal/siding/white{ dir = 1 @@ -49055,6 +48812,11 @@ "oNd" = ( /turf/open/floor/mineral/titanium/blue, /area/station/maintenance/starboard/central) +"oNg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/stone, +/area/station/science/xenobiology) "oNp" = ( /obj/structure/sink{ pixel_y = 15 @@ -49752,7 +49514,7 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 }, -/obj/machinery/modular_computer/console/preset/cargochat/cargo, +/obj/machinery/modular_computer/preset/cargochat/cargo, /turf/open/floor/iron, /area/station/cargo/office) "oZA" = ( @@ -49811,6 +49573,9 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"pbt" = ( +/turf/open/floor/stone, +/area/station/science/xenobiology) "pby" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -49974,18 +49739,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/safe) -"pet" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/table, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/button/door{ - id = "containdeez1"; - name = "Cell Containment Toggle Button" - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "peO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/showroomfloor, @@ -50294,6 +50047,15 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) +"pkQ" = ( +/obj/machinery/corral_corner{ + mapping_id = "3" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "3" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "pkU" = ( /obj/effect/turf_decal/trimline/green/corner{ dir = 1 @@ -50354,7 +50116,6 @@ /area/ruin/powered/clownplanet) "plL" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/engineering/canister, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/science) @@ -50591,7 +50352,7 @@ dir = 4 }, /obj/machinery/light/directional/east, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "ppr" = ( /obj/machinery/computer/security{ @@ -50762,7 +50523,7 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "pta" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/layer1, @@ -51694,11 +51455,8 @@ /turf/open/floor/iron, /area/station/security/checkpoint/supply) "pEa" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 8; - name = "killroom vent" - }, -/turf/open/floor/circuit/telecomms, +/obj/machinery/slime_market_pad, +/turf/open/floor/iron/white, /area/station/science/xenobiology) "pEe" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -52715,6 +52473,15 @@ /obj/effect/turf_decal/siding/thinplating/corner, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"pUb" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "1"; + dir = 1 + }, +/obj/machinery/light/floor/has_bulb, +/mob/living/basic/slime, +/turf/open/floor/engine, +/area/station/science/xenobiology) "pUj" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 10 @@ -52766,14 +52533,19 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/structure/table, /obj/item/folder/yellow, /obj/item/pen{ pixel_x = 4; pixel_y = 4 }, +/obj/structure/table, +/obj/item/paper_bin/carbon{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/stamp/qm, /turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "pVb" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -52983,12 +52755,11 @@ /turf/open/floor/iron/dark/textured_large, /area/station/bitrunning/den) "pYZ" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "pZd" = ( /obj/machinery/door/airlock/maintenance_hatch{ @@ -53361,7 +53132,7 @@ /obj/structure/railing{ dir = 8 }, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "qfv" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ @@ -53730,7 +53501,12 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/turf/open/floor/iron/white, +/obj/machinery/duct, +/obj/machinery/light/floor/has_bulb, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "qlk" = ( /obj/machinery/atmospherics/components/unary/cryo_cell{ @@ -53764,13 +53540,12 @@ /turf/open/floor/engine/n2o, /area/station/engineering/atmos) "qmH" = ( -/obj/structure/closet/secure_closet/quartermaster, /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 10 }, /obj/machinery/airalarm/directional/west, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "qmL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -54013,12 +53788,11 @@ /turf/open/floor/iron, /area/station/security/prison) "qqw" = ( +/obj/structure/table, /obj/item/computer_disk/quartermaster, /obj/item/computer_disk/quartermaster, -/obj/item/clipboard, -/obj/structure/table, /turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "qqx" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -54325,15 +54099,6 @@ /obj/effect/spawner/random/engineering/flashlight, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/lesser) -"qvF" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "qvK" = ( /obj/structure/chair/office/light, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -54518,6 +54283,14 @@ /obj/effect/turf_decal/trimline/neutral/filled/corner, /turf/open/floor/iron, /area/station/security/courtroom) +"qyA" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "6"; + dir = 2 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/science/xenobiology) "qyI" = ( /obj/effect/landmark/tram/tramstation/east, /turf/open/floor/noslip/tram_plate, @@ -54573,7 +54346,7 @@ /area/station/command/meeting_room) "qza" = ( /turf/closed/wall, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "qzf" = ( /obj/machinery/button/door/directional/east{ id = "ceprivacy"; @@ -54791,7 +54564,7 @@ }, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "qCX" = ( /obj/effect/turf_decal/stripes/line{ @@ -55501,12 +55274,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"qNF" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "qNI" = ( /turf/closed/wall, /area/station/medical/medbay/central) @@ -55727,9 +55494,8 @@ /area/station/hallway/secondary/exit) "qRW" = ( /obj/structure/table/wood, -/obj/structure/cassette_rack{ - pixel_x = -5; - pixel_y = 12 +/obj/structure/cassette_rack/prefilled{ + pixel_y = 8 }, /turf/open/floor/iron/vaporwave, /area/station/service/library/upper) @@ -56139,13 +55905,13 @@ /turf/open/floor/iron, /area/station/maintenance/tram/mid) "qXs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 +/obj/machinery/corral_corner{ + mapping_id = "6" }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +/obj/machinery/slime_pen_controller{ + mapping_id = "6" }, -/turf/open/floor/iron/white, +/turf/open/floor/engine, /area/station/science/xenobiology) "qXI" = ( /obj/effect/turf_decal/trimline/dark_red/warning{ @@ -56189,6 +55955,10 @@ /obj/item/stack/sheet/glass/fifty, /turf/open/floor/iron, /area/station/construction/mining/aux_base) +"qYk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/stone, +/area/station/science/xenobiology) "qYx" = ( /obj/machinery/door/airlock{ id_tag = "Toilet5"; @@ -56427,7 +56197,7 @@ name = "Captain's Requests Console"; can_send_announcements = 1 }, -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 8 }, /turf/open/floor/wood, @@ -56492,7 +56262,6 @@ /turf/open/floor/catwalk_floor, /area/station/command/gateway) "rbU" = ( -/obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -56501,7 +56270,10 @@ c_tag = "Science - Xenobiology East"; network = list("ss13","rd") }, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "rbZ" = ( /obj/effect/mine/sound, @@ -56608,7 +56380,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "rem" = ( /obj/machinery/button/door/directional/west{ @@ -56893,7 +56665,7 @@ }, /obj/effect/landmark/start/quartermaster, /turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "riS" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -57012,6 +56784,9 @@ "rkP" = ( /obj/machinery/hydroponics/soil, /obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/prison/garden) "rle" = ( @@ -57317,16 +57092,11 @@ /turf/open/floor/iron, /area/station/engineering/main) "roQ" = ( +/obj/machinery/light/floor/has_bulb, /obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/machinery/camera/directional/south{ - c_tag = "Science - Xenobiology South"; - network = list("ss13","rd") + dir = 10 }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "roR" = ( /turf/closed/wall, @@ -57382,7 +57152,7 @@ "rqg" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/barricade/wooden, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/station/asteroid) "rqi" = ( /obj/structure/table/wood, @@ -57605,7 +57375,7 @@ /area/station/hallway/secondary/command) "rtn" = ( /obj/structure/window/reinforced/spawner/directional/north, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "rtp" = ( /turf/open/floor/iron/dark, @@ -58272,7 +58042,7 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 }, -/obj/machinery/modular_computer/console/preset/engineering{ +/obj/machinery/modular_computer/preset/engineering{ dir = 8 }, /obj/structure/cable, @@ -58470,7 +58240,7 @@ "rKb" = ( /obj/structure/nestbox, /mob/living/basic/chicken/brown, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "rKf" = ( /obj/effect/turf_decal/stripes/line{ @@ -58776,7 +58546,7 @@ "rPj" = ( /obj/effect/turf_decal/sand/plating, /obj/machinery/light/directional/north, -/turf/open/floor/plating/airless, +/turf/open/floor/plating, /area/station/engineering/atmos) "rPm" = ( /obj/structure/table, @@ -59067,12 +58837,6 @@ }, /turf/open/floor/iron, /area/station/security/processing) -"rTt" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "rTz" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -59328,6 +59092,7 @@ dir = 1 }, /obj/item/shovel/spade, +/obj/effect/turf_decal/trimline/neutral/filled/corner, /turf/open/floor/iron/dark, /area/station/security/prison/garden) "rZU" = ( @@ -59560,7 +59325,11 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 1 }, -/turf/open/floor/iron/white, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "scZ" = ( /obj/structure/flora/bush/flowers_yw/style_random, @@ -60053,6 +59822,13 @@ }, /turf/open/misc/asteroid, /area/station/security/prison/workout) +"slz" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/sand/plating, +/turf/closed/wall/r_wall, +/area/station/asteroid) "slA" = ( /obj/effect/turf_decal/sand/plating, /obj/machinery/door/airlock/grunge{ @@ -60104,14 +59880,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/workout) -"sml" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez3"; - name = "Xenobiology Containment Blast Door" - }, -/turf/open/floor/plating, -/area/station/science/xenobiology) "smA" = ( /obj/structure/chair/stool/directional/north, /obj/structure/cable, @@ -60832,6 +60600,15 @@ "syv" = ( /turf/closed/wall/r_wall, /area/station/security/checkpoint/science) +"syx" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/science/xenobiology) "syE" = ( /obj/machinery/rnd/production/circuit_imprinter/department/science, /obj/effect/turf_decal/stripes/line{ @@ -61157,7 +60934,7 @@ /obj/structure/industrial_lift/public, /obj/machinery/elevator_control_panel/directional/east{ linked_elevator_id = "tram_lower_center_lift"; - preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") + preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") }, /obj/effect/turf_decal/siding/thinplating{ dir = 4 @@ -61969,7 +61746,7 @@ /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) "sQu" = ( -/obj/machinery/modular_computer/console/preset/curator{ +/obj/machinery/modular_computer/preset/curator{ dir = 4 }, /obj/machinery/light_switch/directional/west{ @@ -62925,13 +62702,6 @@ /obj/machinery/bci_implanter, /turf/open/floor/iron, /area/station/science/lower) -"tfL" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "tfQ" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced/spawner/directional/south, @@ -63125,7 +62895,7 @@ dir = 8 }, /obj/machinery/light/directional/west, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "tiz" = ( /obj/structure/disposalpipe/sorting/mail{ @@ -63183,11 +62953,8 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "tjz" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 4; - name = "killroom vent" - }, -/turf/open/floor/circuit/telecomms, +/obj/machinery/smartfridge/extract/preloaded, +/turf/open/floor/iron/white, /area/station/science/xenobiology) "tjA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -63211,10 +62978,10 @@ /turf/open/floor/iron/dark, /area/station/security/courtroom) "tjP" = ( -/obj/effect/turf_decal/stripes/corner{ +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "tjS" = ( /obj/machinery/conveyor{ @@ -63228,7 +62995,7 @@ /turf/open/floor/iron, /area/station/cargo/storage) "tka" = ( -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "tkh" = ( /obj/effect/turf_decal/trimline/green/filled/line{ @@ -63336,10 +63103,6 @@ /turf/open/floor/plating, /area/station/asteroid) "tlt" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/computer/camera_advanced/xenobio, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, @@ -63349,7 +63112,7 @@ receive_ore_updates = 1; supplies_requestable = 1 }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "tlw" = ( /obj/effect/decal/cleanable/dirt, @@ -63841,6 +63604,9 @@ }, /obj/effect/turf_decal/trimline/neutral/filled/corner, /obj/item/cultivator, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/security/prison/garden) "tsE" = ( @@ -64130,12 +63896,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/security/brig) -"txM" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "txS" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 @@ -64187,11 +63947,8 @@ /turf/open/floor/iron, /area/station/hallway/secondary/service) "tzq" = ( -/obj/structure/disposaloutlet{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 +/obj/machinery/corral_corner{ + mapping_id = "1" }, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -64862,7 +64619,7 @@ /turf/closed/wall/r_wall, /area/station/engineering/atmos) "tLA" = ( -/obj/machinery/modular_computer/console/preset/id{ +/obj/machinery/modular_computer/preset/id{ dir = 4 }, /obj/structure/cable, @@ -65508,9 +65265,9 @@ /turf/open/floor/iron, /area/station/hallway/secondary/command) "tWy" = ( -/obj/machinery/biogenerator, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/prison/garden) @@ -66368,7 +66125,7 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "uld" = ( /obj/effect/turf_decal/trimline/red/filled/line{ @@ -66413,7 +66170,7 @@ c_tag = "Science - Ordnance Lab"; network = list("ss13","rd") }, -/obj/machinery/modular_computer/console/preset/civilian, +/obj/machinery/modular_computer/preset/civilian, /turf/open/floor/iron/white, /area/station/science/ordnance/office) "ulJ" = ( @@ -66555,7 +66312,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "uov" = ( /turf/closed/wall/r_wall, @@ -66821,48 +66578,6 @@ pixel_y = 7; pixel_x = -8 }, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/blank, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/friday{ - pixel_y = 2; - pixel_x = 9 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, -/obj/item/device/cassette_tape/random{ - pixel_y = 8 - }, /turf/open/floor/iron/vaporwave, /area/station/service/library/upper) "uss" = ( @@ -66984,7 +66699,7 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 }, -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) "utY" = ( @@ -67071,18 +66786,6 @@ "uvv" = ( /turf/closed/wall/rock/porous, /area/station/science/xenobiology) -"uvy" = ( -/obj/structure/window/reinforced/spawner, -/obj/structure/table, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/button/door{ - id = "containdeez3"; - name = "Cell Containment Toggle Button" - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "uvD" = ( /obj/effect/decal/cleanable/dirt, /obj/item/soap, @@ -67291,13 +66994,13 @@ /turf/open/floor/iron, /area/station/commons/dorms) "uyb" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 +/obj/machinery/corral_corner{ + mapping_id = "4" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 +/obj/machinery/slime_pen_controller{ + mapping_id = "4" }, -/turf/open/floor/iron/white, +/turf/open/floor/engine, /area/station/science/xenobiology) "uyd" = ( /obj/structure/table, @@ -67451,14 +67154,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/storage/primary) -"uAF" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez5"; - name = "Xenobiology Containment Blast Door" - }, -/turf/open/floor/plating, -/area/station/science/xenobiology) "uAK" = ( /obj/effect/turf_decal/trimline/red/filled/corner, /turf/open/floor/iron/dark, @@ -67830,15 +67525,6 @@ }, /turf/open/openspace, /area/station/hallway/primary/tram/center) -"uGU" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ - dir = 8; - initialize_directions = 4; - name = "euthanization chamber freezer" - }, -/obj/effect/turf_decal/trimline/purple/filled/line, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "uGW" = ( /turf/closed/wall, /area/station/cargo/miningdock) @@ -68217,22 +67903,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/execution/transfer) -"uLX" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/east{ - name = "Containment Pen #7"; - req_access = list("xenobiology") - }, -/obj/machinery/door/window/left/directional/west{ - name = "Containment Pen #7"; - req_access = list("xenobiology") - }, -/obj/machinery/door/poddoor/preopen{ - id = "containdeez7"; - name = "Xenobiology Containment Blast Door" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "uMg" = ( /obj/structure/table, /obj/item/radio/intercom, @@ -68562,6 +68232,20 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/checkpoint/arrivals) +"uSF" = ( +/obj/item/radio/intercom/prison/directional/east, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Security - Prison Garden"; + dir = 6; + network = list("ss13","Security","prison") + }, +/obj/machinery/composters, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) "uSL" = ( /obj/effect/turf_decal/delivery/white, /obj/structure/fluff/tram_rail/floor, @@ -68700,7 +68384,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "uUG" = ( /obj/structure/table/reinforced, /obj/item/folder/blue{ @@ -69909,7 +69593,7 @@ dir = 8 }, /obj/machinery/disposal/bin, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "vmB" = ( /obj/effect/turf_decal/tile/neutral{ @@ -70713,6 +70397,12 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"vxy" = ( +/obj/machinery/corral_corner{ + mapping_id = "2" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "vxD" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery/white{ @@ -71281,7 +70971,7 @@ /turf/open/floor/iron, /area/station/tcommsat/computer) "vGt" = ( -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 4 }, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -71348,12 +71038,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/gravity_generator) -"vHi" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "vHl" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 8 @@ -71919,6 +71603,15 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"vRp" = ( +/obj/machinery/corral_corner{ + mapping_id = "2" + }, +/obj/machinery/slime_pen_controller{ + mapping_id = "2" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "vRq" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 1 @@ -71996,7 +71689,7 @@ "vSB" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/nestbox, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "vSI" = ( /turf/open/openspace, @@ -72022,15 +71715,15 @@ }, /obj/effect/turf_decal/trimline/brown/filled/line, /obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/machinery/door/airlock/command/glass{ - name = "Quartermaster's Office" +/obj/machinery/door/airlock/mining{ + name = "Quatermaster's Office" }, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "vTb" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 @@ -72130,7 +71823,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "vTP" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 4 @@ -72290,7 +71983,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "vYg" = ( /obj/structure/cable, /turf/open/misc/asteroid/snow/coldroom, @@ -72842,7 +72535,7 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "whi" = ( /obj/effect/turf_decal/siding/wood{ @@ -72914,7 +72607,7 @@ /obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8 }, /turf/open/floor/glass/reinforced, @@ -72968,17 +72661,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel/monastery) -"wjK" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "wjP" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -73555,13 +73237,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/maintenance/department/cargo) -"wsT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/engine, -/area/station/science/xenobiology) "wts" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -73663,9 +73338,13 @@ dir = 8 }, /obj/structure/sign/calendar/directional/west, -/obj/machinery/pdapainter/supply, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Quartermaster's Office"; + name = "Quartermaster's Fax Machine" + }, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/cargo/quartermaster) "wuF" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -73871,13 +73550,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/drone_bay) -"wxE" = ( -/obj/structure/disposaloutlet{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/engine, -/area/station/science/xenobiology) "wxJ" = ( /obj/machinery/suit_storage_unit/engine, /obj/effect/turf_decal/bot{ @@ -74224,7 +73896,7 @@ default_raw_text = "Please leave on-site equipment alone as they are on loan from Nanotrasen Mining Co and need returned soon."; name = "NOTICE" }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/station/asteroid) "wCn" = ( /obj/structure/cable, @@ -74245,12 +73917,6 @@ }, /turf/open/floor/iron, /area/station/security/processing) -"wCv" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/stripes/line, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "wCT" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -74376,15 +74042,11 @@ /turf/open/floor/iron/dark/corner, /area/station/science/robotics/mechbay) "wET" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/computer/camera_advanced/xenobio, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, /obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "wEV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -74462,7 +74124,7 @@ /turf/open/floor/iron, /area/station/commons/dorms) "wFS" = ( -/obj/machinery/modular_computer/console/preset/cargochat/security{ +/obj/machinery/modular_computer/preset/cargochat/security{ dir = 4 }, /obj/machinery/newscaster/directional/west, @@ -74746,6 +74408,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"wKI" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/stone, +/area/station/science/xenobiology) "wLl" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 @@ -74868,7 +74540,7 @@ "wNL" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/south, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "wNV" = ( /obj/machinery/door/firedoor, @@ -75210,7 +74882,11 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 5 }, -/turf/open/floor/iron/white, +/obj/machinery/light/floor/has_bulb, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/stone, /area/station/science/xenobiology) "wUv" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -75642,7 +75318,7 @@ "xcM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "xdw" = ( /obj/machinery/portable_atmospherics/scrubber, @@ -76273,6 +75949,14 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/lower) +"xox" = ( +/obj/machinery/plumbing/ooze_sucker{ + mapping_id = "2"; + dir = 1 + }, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/engine, +/area/station/science/xenobiology) "xoM" = ( /obj/structure/chair/stool/bar/directional/east, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -76472,7 +76156,7 @@ /obj/machinery/elevator_control_panel{ linked_elevator_id = "tram_xeno_lift"; pixel_y = 2; - preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") + preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") }, /obj/structure/table, /obj/effect/turf_decal/trimline/dark_red/warning{ @@ -76581,11 +76265,12 @@ /turf/open/floor/iron/dark, /area/station/science/lower) "xuI" = ( -/obj/effect/turf_decal/stripes/corner{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, +/turf/open/floor/stone, /area/station/science/xenobiology) "xuL" = ( /obj/effect/decal/cleanable/dirt, @@ -77092,7 +76777,7 @@ layer = 3.1; linked_elevator_id = "tram_xeno_lift"; pixel_y = 2; - preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") + preset_destination_names = list("2"="Lower Deck","3"="Upper Deck") }, /turf/closed/wall/r_wall, /area/station/science/xenobiology) @@ -77153,7 +76838,7 @@ "xEE" = ( /obj/structure/cable, /obj/structure/railing, -/turf/open/misc/sandy_dirt, +/turf/open/floor/sandy_dirt, /area/station/service/hydroponics) "xET" = ( /obj/effect/turf_decal/siding/thinplating/corner{ @@ -77753,6 +77438,10 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/smooth, /area/station/maintenance/tram/left) +"xQh" = ( +/obj/machinery/duct, +/turf/open/floor/engine, +/area/station/science/xenobiology) "xQv" = ( /turf/closed/wall/r_wall, /area/station/construction/mining/aux_base) @@ -78368,7 +78057,7 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/modular_computer/console/preset/cargochat/medical{ +/obj/machinery/modular_computer/preset/cargochat/medical{ dir = 4 }, /turf/open/floor/iron/white, @@ -81440,7 +81129,7 @@ vXM nPb pkp nPb -cdf +pkp nPb pkp pjA @@ -81697,7 +81386,7 @@ nPb nPb pkp nPb -cdf +pkp nPb pkp nPb @@ -102654,7 +102343,7 @@ cAU duB otn ecs -bZN +cOv biS lQx duB @@ -103424,9 +103113,9 @@ aak aac aaa duB -duB -duB -duB +cFO +uSF +koO duB aaa aaa @@ -103680,11 +103369,11 @@ hFr aaa aac aac -aaa -aaa -aaa -aaa -aaa +duB +duB +duB +duB +duB aaa aac aac @@ -122772,13 +122461,13 @@ qVr qVr qVr qVr -eiR +slz gmN bfH bfH jTC lIY -pML +mwK qVr qVr qVr @@ -123025,18 +122714,18 @@ oyV dUT qHK qVr -wxE -fAm -hdA -qVr +fkf +bfH +bfH +fkf qVr fUz rkI fFu jQE lIY -qVr -qVr +tzq +bfH bfH bfH tzq @@ -123282,21 +122971,21 @@ oNT dUT gdC qVr -ayN -aJT -ahk -hdA +bfH +bfH +bfH +bfH mBm kQM jHg -dne +tjP vmz hik -sml bfH bfH -aJT -jkd +bfH +bfH +bfH qVr aaa aaa @@ -123541,19 +123230,19 @@ mfY qVr bfH bfH -asv -cSj +cml +xQh cim -rTt -whn -whn -whn -tjP -uvy -muf -asv -kkx -txM +kTh +kTh +kTh +kTh +eGt +xQh +xQh +pUb +bfH +dgR qVr aaa aaa @@ -123796,21 +123485,21 @@ hfP uKt uKt qVr -qVr +fkf +bfH bfH -fPv uyb xuI +qYk +qYk +qYk +qYk njf -njf -njf -njf -njf -tfL -hPB -lhS -txM -qVr +bfH +xQh +bfH +bfH +bfH qVr aaa aaa @@ -124052,26 +123741,26 @@ dUT vtq fGZ vtq -xHw +iix qVr -mBm -pet +syx +tjP pYZ aqB cVX gNr lym pph -aet -whn -tjP -oCY -sml -qVr -aaa -aaa -aaa -aaa +wKI +eCA +xQh +bfH +bfH +tzq +hee +hee +hee +hee aaa aaa vXM @@ -124312,7 +124001,7 @@ qVr qVr qVr tlt -inn +pbt xcM lyQ jiQ @@ -124324,10 +124013,10 @@ nED aet tjP roQ -qVr -qVr -qVr -qVr +pkQ +bfH +bfH +bvm qVr aaa aaa @@ -124569,21 +124258,21 @@ vud tml qVr qCW -whn +pbt xcM -lyQ -asv -mln +dtN +whn +whn tjz asv xta oYQ gCY -whn +pbt exH -ahl bfH bfH +aJT bfH qVr aaa @@ -124828,20 +124517,20 @@ uiC rdU uon whd -hDT +dtN keT -iEF +whn fof aMB sXX akC kMh -whn +kTh eGt -bql +xQh +xQh +dZn bfH -bfH -dgR qVr aaa aaa @@ -125083,22 +124772,22 @@ nPB dGk qVr kkL -whn +pbt dQK -uGU -asv -mln +dtN +whn +whn pEa asv oAf rhn gCY -whn -wCv -cyY -fAm -fAm -fqM +pbt +exH +bfH +bfH +bfH +bfH qVr aaa aaa @@ -125340,7 +125029,7 @@ qVr qVr qVr wET -eQm +pbt cyU cZE jiQ @@ -125352,10 +125041,10 @@ gJY scO bgH mTR -qVr -qVr -qVr -qVr +bvm +bfH +bfH +bvm qVr aaa aaa @@ -125596,24 +125285,24 @@ bjQ igS uNT qVr -nbI -wjK -cue +eDO +bgH +bgH qlf hYx ulb dOq tix -scO -whn -bgH -aPz -uAF -qVr -aaa -aaa -aaa -aaa +jhk +vRp +xQh +bfH +bfH +vxy +hee +hee +hee +hee aaa aaa aaa @@ -125852,21 +125541,21 @@ hCv grh okh qVr -qVr -kkx -cJP +ohh +bfH +bfH qXs mLE -dGs -dGs -dGs -dGs -dGs -ahp -qvF -fQo +lYq +lYq +lYq +lYq +oNg +bfH +xQh +bfH +bfH bfH -qVr qVr aaa aaa @@ -126109,21 +125798,21 @@ kVf sLd vmk qVr -kkx -txM -asv -uLX -gPD -qNF -whn -whn -whn -bgH -hcn -jDF -asv bfH bfH +qyA +xQh +cim +kTh +kTh +kTh +kTh +eGt +xQh +xQh +xox +bfH +dgR qVr aaa aaa @@ -126366,21 +126055,21 @@ ebs hFH tYB qVr -wsT -aJT +bfH +bfH bfH bfH nbI deh bvL -vHi +bgH mPb rbU -uAF -ahk -hdA +bfH +bfH +bfH aJT -dgR +bfH qVr aaa aaa @@ -126623,21 +126312,21 @@ xOs wdr nrh qVr -jcm +ohh bfH bfH -qVr +ohh qVr qVr wdD tXW vTx qVr -qVr -qVr -ahk -fAm -fqM +vxy +bfH +bfH +bfH +vxy qVr aaa aaa @@ -126884,13 +126573,13 @@ qVr qVr qVr qVr -aaa +hee qVr jTC bfH bfH qVr -aaa +hee qVr qVr qVr @@ -128387,7 +128076,7 @@ jJt gDw gDw gDw -gDw +kHX gDw gDw gDw @@ -169458,7 +169147,7 @@ jhd aac aac aaa -aac +abM abM aaa omm @@ -173316,7 +173005,7 @@ aac aac aac aaa -boZ +yeD apj yeD yeD @@ -173573,7 +173262,7 @@ jhd aac aac aaa -boZ +yeD yeD yeD hrg @@ -174038,7 +173727,7 @@ aaS aaS aaS aaS -gPW +boZ aap aaS jhd @@ -174808,8 +174497,8 @@ jhd aaa aaa aaa -bXk -abM +aak +aac aap aaa aaa @@ -175066,7 +174755,7 @@ aaa aaa aaa aaS -bXk +aak kCA aaa aaa @@ -175323,8 +175012,8 @@ aaa aaa aaa kCA -bXk -bXk +aak +aak aaa aaa aaa @@ -175579,8 +175268,8 @@ jhd jhd aaa aaa -bXk -abM +aak +aac aap aaa aaa @@ -175837,7 +175526,7 @@ jhd aaa aaa aaa -abM +aac aaa aaa aaa @@ -176094,7 +175783,7 @@ jhd jhd aaa aaa -bXk +aak aaS aaa aaa @@ -176350,13 +176039,13 @@ jhd jhd jhd jhd -abM -abM +aac +aac aaa aaa aaa aaa -rvV +aaE aaa aaa jhd @@ -185975,7 +185664,7 @@ soq lpT soq soq -kNS +ftk kNS kNS kNS diff --git a/_maps/shuttles/emergency_cere.dmm b/_maps/shuttles/emergency_cere.dmm index 310413554bb7..447700659028 100644 --- a/_maps/shuttles/emergency_cere.dmm +++ b/_maps/shuttles/emergency_cere.dmm @@ -18,7 +18,7 @@ /turf/open/floor/iron/dark, /area/shuttle/escape) "ai" = ( -/obj/machinery/modular_computer/console/preset/id, +/obj/machinery/modular_computer/preset/id, /turf/open/floor/iron/dark, /area/shuttle/escape) "aj" = ( diff --git a/_maps/shuttles/emergency_cruise.dmm b/_maps/shuttles/emergency_cruise.dmm index 6d1ca3b9e5a4..5d34fc5a521b 100644 --- a/_maps/shuttles/emergency_cruise.dmm +++ b/_maps/shuttles/emergency_cruise.dmm @@ -1323,7 +1323,7 @@ /turf/open/floor/iron/showroomfloor, /area/shuttle/escape) "yH" = ( -/obj/machinery/modular_computer/console/preset/research{ +/obj/machinery/modular_computer/preset/research{ dir = 4 }, /obj/effect/turf_decal/tile/blue{ diff --git a/_maps/shuttles/infiltrator_advanced.dmm b/_maps/shuttles/infiltrator_advanced.dmm index 1a2e99fea5c7..0b30ad502d8c 100644 --- a/_maps/shuttles/infiltrator_advanced.dmm +++ b/_maps/shuttles/infiltrator_advanced.dmm @@ -226,21 +226,6 @@ /obj/structure/cable, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/syndicate/bridge) -"ay" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4; - name = "tactical chair" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/airalarm/syndicate{ - pixel_y = -24 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/mineral/plastitanium/red, -/area/shuttle/syndicate/bridge) "az" = ( /obj/effect/turf_decal/bot, /obj/machinery/computer/monitor{ @@ -385,33 +370,6 @@ /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/pod/dark, /area/shuttle/syndicate/eva) -"aS" = ( -/obj/effect/turf_decal/bot, -/obj/structure/table/reinforced, -/obj/machinery/light/directional/east, -/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ - pixel_x = 8 - }, -/obj/item/lighter{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/lighter{ - pixel_x = -6; - pixel_y = -2 - }, -/obj/machinery/power/apc/auto_name/directional/north{ - area = "/area/shuttle/syndicate/hallway" - }, -/obj/effect/mapping_helpers/apc/cut_AI_wire, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/machinery/airalarm/syndicate{ - dir = 4; - pixel_x = 25 - }, -/obj/structure/cable, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/hallway) "aU" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -1009,21 +967,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/mineral/plastitanium, /area/shuttle/syndicate/eva) -"cg" = ( -/obj/machinery/suit_storage_unit/syndicate, -/obj/effect/turf_decal/box, -/obj/machinery/airalarm/syndicate{ - pixel_y = -24 - }, -/turf/open/floor/pod/dark, -/area/shuttle/syndicate/eva) -"ch" = ( -/obj/item/surgical_drapes, -/obj/item/retractor, -/obj/item/cautery, -/obj/structure/table/reinforced, -/turf/open/floor/pod/dark, -/area/shuttle/syndicate/medical) "ci" = ( /obj/structure/table/reinforced, /obj/machinery/status_display/evac{ @@ -1146,31 +1089,6 @@ }, /turf/open/floor/mineral/plastitanium, /area/shuttle/syndicate/armory) -"cw" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/closet/crate/freezer{ - name = "universal blood storage" - }, -/obj/machinery/iv_drip, -/obj/item/reagent_containers/blood/universal{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/reagent_containers/blood/universal, -/obj/item/reagent_containers/blood/universal{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/machinery/airalarm/syndicate{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/pod/dark, -/area/shuttle/syndicate/medical) "cx" = ( /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, /obj/machinery/power/shuttle_engine/heater, @@ -1437,19 +1355,6 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/syndicate/airlock) -"di" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/airalarm/syndicate{ - pixel_y = -24 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/mineral/plastitanium/red, -/area/shuttle/syndicate/airlock) "dj" = ( /obj/item/grenade/syndieminibomb{ pixel_x = 6; @@ -1467,30 +1372,6 @@ /obj/item/grenade/c4, /turf/open/floor/pod/dark, /area/shuttle/syndicate/armory) -"dk" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/airalarm/syndicate{ - pixel_y = -24 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/shuttle/syndicate/airlock) -"dl" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/syndicate{ - dir = 4; - pixel_x = 24 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/shuttle/syndicate/airlock) "dm" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -1519,16 +1400,6 @@ /obj/structure/cable, /turf/open/floor/mineral/plastitanium, /area/shuttle/syndicate/airlock) -"dp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/airalarm/syndicate{ - dir = 8; - pixel_x = -24 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/shuttle/syndicate/airlock) "dq" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -1616,21 +1487,6 @@ /obj/structure/cable, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/syndicate/armory) -"dz" = ( -/obj/item/circular_saw, -/obj/item/surgicaldrill{ - pixel_y = 5 - }, -/obj/item/healthanalyzer, -/obj/structure/table/reinforced, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/light/directional/west, -/obj/machinery/status_display/evac{ - pixel_x = -32 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/pod/dark, -/area/shuttle/syndicate/medical) "dA" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -1697,17 +1553,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/mineral/plastitanium, /area/shuttle/syndicate/medical) -"dG" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/cc64k_ad{ - pixel_y = 32 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/armory) "dH" = ( /obj/machinery/sleeper/syndie{ dir = 4 @@ -1831,18 +1676,6 @@ /obj/structure/cable, /turf/open/floor/mineral/plastitanium, /area/shuttle/syndicate/armory) -"dT" = ( -/obj/machinery/computer/operating{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/airalarm/syndicate{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/pod/dark, -/area/shuttle/syndicate/medical) "dU" = ( /obj/structure/table/optable, /obj/effect/turf_decal/bot, @@ -1850,21 +1683,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/pod/dark, /area/shuttle/syndicate/medical) -"dV" = ( -/obj/item/scalpel{ - pixel_y = 16 - }, -/obj/structure/table/reinforced, -/obj/item/bodypart/arm/left/robot{ - pixel_x = -6 - }, -/obj/item/bodypart/arm/right/robot{ - pixel_x = 6 - }, -/obj/item/hemostat, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/pod/dark, -/area/shuttle/syndicate/medical) "dW" = ( /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line, @@ -2065,27 +1883,6 @@ }, /turf/closed/wall/r_wall/syndicate, /area/shuttle/syndicate/medical) -"eo" = ( -/obj/structure/table/reinforced, -/obj/item/wrench, -/obj/item/weldingtool/largetank, -/obj/item/assembly/signaler{ - desc = "Used to remotely activate devices. Allows for syncing when using a secure signaler on another. Slightly scooted."; - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/assembly/signaler{ - desc = "Used to remotely activate devices. Allows for syncing when using a secure signaler on another. Slightly scooted."; - pixel_x = 4; - pixel_y = 4 - }, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/airalarm/syndicate{ - dir = 1; - pixel_y = 24 - }, -/turf/open/floor/pod/dark, -/area/shuttle/syndicate/armory) "ep" = ( /obj/structure/mirror/directional/north, /obj/structure/sink/directional/south, @@ -2139,6 +1936,199 @@ "ev" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/shuttle/syndicate/hallway) +"fP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/cc64k_ad{ + pixel_y = 32 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate/armory) +"kH" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4; + name = "tactical chair" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/airalarm/syndicate{ + pixel_y = -24 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/syndicate/bridge) +"oa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/airalarm/syndicate{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/syndicate/airlock) +"pk" = ( +/obj/structure/table/reinforced, +/obj/item/wrench, +/obj/item/weldingtool/largetank, +/obj/item/assembly/signaler{ + desc = "Used to remotely activate devices. Allows for syncing when using a secure signaler on another. Slightly scooted."; + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/assembly/signaler{ + desc = "Used to remotely activate devices. Allows for syncing when using a secure signaler on another. Slightly scooted."; + pixel_x = 4; + pixel_y = 4 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/airalarm/syndicate{ + dir = 1; + pixel_y = 24 + }, +/turf/open/floor/pod/dark, +/area/shuttle/syndicate/armory) +"ps" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/airalarm/syndicate{ + pixel_y = -24 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/syndicate/airlock) +"to" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/closet/crate/freezer{ + name = "universal blood storage" + }, +/obj/machinery/iv_drip, +/obj/item/reagent_containers/blood/universal{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/reagent_containers/blood/universal, +/obj/item/reagent_containers/blood/universal{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/machinery/airalarm/syndicate{ + dir = 8; + pixel_x = -24 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/shuttle/syndicate/medical) +"uz" = ( +/obj/machinery/suit_storage_unit/syndicate, +/obj/effect/turf_decal/box, +/obj/machinery/airalarm/syndicate{ + pixel_y = -24 + }, +/turf/open/floor/pod/dark, +/area/shuttle/syndicate/eva) +"AH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/airalarm/syndicate{ + pixel_y = -24 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/syndicate/airlock) +"MZ" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/light/directional/west, +/obj/machinery/status_display/evac{ + pixel_x = -32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/healthanalyzer/advanced, +/turf/open/floor/pod/dark, +/area/shuttle/syndicate/medical) +"RO" = ( +/obj/effect/turf_decal/bot, +/obj/structure/table/reinforced, +/obj/machinery/light/directional/east, +/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ + pixel_x = 8 + }, +/obj/item/lighter{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/lighter{ + pixel_x = -6; + pixel_y = -2 + }, +/obj/machinery/power/apc/auto_name/directional/north{ + area = "/area/shuttle/syndicate/hallway" + }, +/obj/effect/mapping_helpers/apc/cut_AI_wire, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/airalarm/syndicate{ + dir = 4; + pixel_x = 25 + }, +/obj/structure/cable, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate/hallway) +"Sb" = ( +/obj/machinery/computer/operating{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/airalarm/syndicate{ + dir = 8; + pixel_x = -24 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/pod/dark, +/area/shuttle/syndicate/medical) +"SA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/syndicate{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/syndicate/airlock) +"Vj" = ( +/obj/structure/table/reinforced, +/obj/item/bodypart/arm/left/robot{ + pixel_x = -6 + }, +/obj/item/bodypart/arm/right/robot{ + pixel_x = 6 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/pod/dark, +/area/shuttle/syndicate/medical) +"Yx" = ( +/obj/structure/table/reinforced, +/obj/item/storage/backpack/duffelbag/syndie/surgery, +/turf/open/floor/pod/dark, +/area/shuttle/syndicate/medical) (1,1,1) = {" ad @@ -2200,7 +2190,7 @@ aO bd bo dH -cw +to bf bD bD @@ -2218,16 +2208,16 @@ ad aO aN bm -di +AH aO bl bA by bH bL -dz +MZ dD -dT +Sb bn cy ad @@ -2272,8 +2262,8 @@ cc bJ bN bW -ch -dV +Yx +Vj cx cB cP @@ -2287,7 +2277,7 @@ aO aE aU df -dl +SA dv bq bs @@ -2399,7 +2389,7 @@ ak aq ax aF -aS +RO bc aQ aZ @@ -2420,7 +2410,7 @@ ad ab al ar -ay +kH aF aF be @@ -2429,7 +2419,7 @@ dR bS ej de -cg +uz dR bQ ek @@ -2471,7 +2461,7 @@ aO aE bv dh -dp +oa dv cv ds @@ -2520,7 +2510,7 @@ bZ aJ aO cF -dG +fP dj da eg @@ -2540,7 +2530,7 @@ ad aO aN cu -dk +ps aO ai bY @@ -2565,7 +2555,7 @@ ca dx dq aO -eo +pk ci dM db diff --git a/_maps/shuttles/infiltrator_basic.dmm b/_maps/shuttles/infiltrator_basic.dmm index 8019774172de..e7a9797bf368 100644 --- a/_maps/shuttles/infiltrator_basic.dmm +++ b/_maps/shuttles/infiltrator_basic.dmm @@ -311,9 +311,6 @@ dir = 1 }, /obj/item/healthanalyzer, -/obj/item/healthanalyzer{ - pixel_y = 10 - }, /obj/item/healthanalyzer{ pixel_y = 10 }, @@ -487,6 +484,10 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/item/clothing/under/syndicate/scrubs, +/obj/item/clothing/gloves/latex/nitrile, +/obj/item/clothing/mask/breath/medical, +/obj/item/tank/internals/anesthetic, /turf/open/floor/iron, /area/shuttle/syndicate/medical) "ce" = ( @@ -530,7 +531,6 @@ /area/shuttle/syndicate/hallway) "cp" = ( /obj/structure/table/optable, -/obj/item/surgical_drapes, /turf/open/floor/iron/white, /area/shuttle/syndicate/medical) "cr" = ( @@ -737,12 +737,12 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/syndicate/airlock) "nZ" = ( -/obj/item/cautery, -/obj/item/scalpel, -/obj/structure/table/reinforced, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/computer/operating{ + dir = 1 + }, /turf/open/floor/iron/white, /area/shuttle/syndicate/medical) "pd" = ( @@ -752,10 +752,17 @@ /turf/closed/wall/r_wall/syndicate, /area/shuttle/syndicate/bridge) "pQ" = ( -/obj/item/retractor, -/obj/item/hemostat, -/obj/structure/table/reinforced, /obj/effect/turf_decal/tile/blue, +/obj/structure/table/reinforced, +/obj/item/bodypart/arm/left/robot{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/bodypart/arm/right/robot{ + pixel_x = -10; + pixel_y = 9 + }, +/obj/item/healthanalyzer, /turf/open/floor/iron/white, /area/shuttle/syndicate/medical) "st" = ( @@ -850,21 +857,12 @@ /turf/open/floor/mineral/plastitanium/red, /area/shuttle/syndicate/hallway) "zj" = ( -/obj/structure/table/reinforced, /obj/machinery/light/directional/west, -/obj/item/bodypart/arm/left/robot{ - pixel_x = -4; - pixel_y = 8 - }, -/obj/item/bodypart/arm/right/robot{ - pixel_x = -10; - pixel_y = 9 - }, -/obj/item/surgicaldrill, -/obj/item/circular_saw, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/structure/table/reinforced, +/obj/item/storage/backpack/duffelbag/syndie/surgery, /turf/open/floor/iron/white/side, /area/shuttle/syndicate/medical) "zL" = ( diff --git a/_maps/shuttles/whiteship_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm index 1d5fe4411084..ed8d78e7494a 100644 --- a/_maps/shuttles/whiteship_pubby.dmm +++ b/_maps/shuttles/whiteship_pubby.dmm @@ -881,7 +881,7 @@ /area/shuttle/abandoned) "Ky" = ( /obj/effect/turf_decal/bot_white, -/obj/machinery/modular_computer/console/preset/research{ +/obj/machinery/modular_computer/preset/research{ dir = 1 }, /obj/effect/turf_decal/siding/purple/end, diff --git a/_maps/templates/lazy_templates/ninja_den.dmm b/_maps/templates/lazy_templates/ninja_den.dmm index 6a378324afe0..981fd15854fa 100644 --- a/_maps/templates/lazy_templates/ninja_den.dmm +++ b/_maps/templates/lazy_templates/ninja_den.dmm @@ -2033,7 +2033,7 @@ /turf/open/floor/catwalk_floor, /area/centcom/central_command_areas/holding) "Wc" = ( -/obj/machinery/modular_computer/console/preset/research{ +/obj/machinery/modular_computer/preset/research{ dir = 4 }, /obj/machinery/light/directional/west, diff --git a/_maps/templates/lazy_templates/nukie_base.dmm b/_maps/templates/lazy_templates/nukie_base.dmm index 195aba6f581b..751488dbff04 100644 --- a/_maps/templates/lazy_templates/nukie_base.dmm +++ b/_maps/templates/lazy_templates/nukie_base.dmm @@ -14,10 +14,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/wood/tile, /area/centcom/syndicate_mothership/control) -"ao" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/centcom/syndicate_mothership/control) "au" = ( /turf/open/floor/circuit/red, /area/centcom/syndicate_mothership/control) @@ -27,36 +23,9 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/centcom/syndicate_mothership/control) -"aC" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 5 - }, -/obj/structure/sign/poster/contraband/rip_badger{ - pixel_x = 32 - }, -/obj/machinery/biogenerator, -/turf/open/floor/mineral/plastitanium/red, -/area/centcom/syndicate_mothership/expansion_bioterrorism) "aG" = ( /turf/open/floor/catwalk_floor/iron_smooth, /area/centcom/syndicate_mothership/control) -"aH" = ( -/obj/structure/table/reinforced, -/obj/item/knife/combat/survival{ - pixel_x = 7; - pixel_y = 17 - }, -/obj/item/reagent_containers/cup/glass/bottle/rum{ - pixel_x = -5; - pixel_y = 17 - }, -/obj/structure/sign/poster/contraband/red_rum{ - pixel_x = 32 - }, -/obj/machinery/recharger, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/centcom/syndicate_mothership/control) "aJ" = ( /obj/structure/fence/cut/medium, /turf/open/misc/asteroid/snow/airless, @@ -67,18 +36,17 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/centcom/syndicate_mothership/control) -"aR" = ( -/obj/machinery/computer/atmos_control/noreconnect{ - atmos_chambers = list("nukiebase"="Burn Chamber"); - desc = "Used to monitor the Syndicate Ordnance Laboratory's burn chamber."; - dir = 1; - name = "Ordnance Chamber Monitor" +"aT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/light/cold/directional/west{ - dir = 2 +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 }, -/turf/open/floor/mineral/titanium/tiled/yellow, +/obj/structure/sign/poster/contraband/fun_police{ + pixel_x = -32 + }, +/turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/expansion_bombthreat) "bf" = ( /obj/effect/turf_decal/siding/purple{ @@ -89,6 +57,16 @@ }, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/expansion_chemicalwarfare) +"bg" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 5 + }, +/obj/structure/sign/poster/contraband/rip_badger{ + pixel_x = 32 + }, +/obj/machinery/biogenerator, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom/syndicate_mothership/expansion_bioterrorism) "bo" = ( /obj/structure/sink/directional/west, /obj/structure/mirror/directional/east, @@ -103,6 +81,28 @@ /obj/machinery/atmospherics/components/binary/pump/on, /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_bombthreat) +"bv" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/structure/sign/poster/contraband/gorlex_recruitment{ + pixel_y = 32 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom/syndicate_mothership/control) +"bz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1 + }, +/obj/machinery/airalarm/unlocked{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/centcom/syndicate_mothership/expansion_bombthreat) "bB" = ( /obj/structure/railing{ dir = 4 @@ -125,23 +125,26 @@ /obj/machinery/vending/hydronutrients, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bioterrorism) -"bE" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 5 - }, -/obj/structure/table/reinforced/plasmarglass, -/obj/item/storage/backpack/duffelbag/med/surgery{ - pixel_y = -11 - }, -/obj/item/storage/belt/medical, -/turf/open/floor/mineral/titanium/tiled/blue, -/area/centcom/syndicate_mothership/control) "bF" = ( /obj/effect/turf_decal/siding/wideplating{ dir = 10 }, /turf/open/floor/plating, /area/centcom/syndicate_mothership/control) +"bH" = ( +/obj/structure/sign/poster/contraband/free_drone{ + pixel_y = 32 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 8 + }, +/area/centcom/syndicate_mothership/control) +"bJ" = ( +/obj/structure/sign/poster/contraband/moffuchis_pizza{ + pixel_x = -32 + }, +/turf/open/floor/mineral/titanium, +/area/centcom/syndicate_mothership/control) "bT" = ( /obj/structure/flora/rock/pile/style_random, /turf/open/misc/asteroid/snow/airless, @@ -160,16 +163,28 @@ }, /turf/open/floor/plating, /area/centcom/syndicate_mothership/control) -"cc" = ( -/obj/structure/sign/poster/contraband/syndiemoth{ +"ck" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + name = "Frosted Window"; + opacity = 1 + }, +/obj/item/soap/syndie, +/obj/structure/sign/poster/contraband/got_wood{ pixel_x = 32 }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, +/turf/open/floor/iron/freezer, /area/centcom/syndicate_mothership/control) "cl" = ( /turf/open/lava/plasma/ice_moon, /area/centcom/syndicate_mothership/control) +"cr" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/sign/poster/contraband/cybersun_six_hundred{ + pixel_x = 32 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/mineral/titanium, +/area/centcom/syndicate_mothership/control) "cA" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/button/ignition/incinerator/ordmix{ @@ -187,24 +202,10 @@ }, /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_bombthreat) -"cC" = ( -/obj/machinery/griddle, -/obj/structure/sign/poster/contraband/syndiemoth{ - pixel_y = 32 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/centcom/syndicate_mothership/control) "cF" = ( /obj/effect/baseturf_helper/asteroid/snow, /turf/closed/indestructible/syndicate, /area/centcom/syndicate_mothership/control) -"cQ" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/centcom/syndicate_mothership/control) "cT" = ( /obj/structure/rack, /obj/item/katana/cursed{ @@ -223,6 +224,20 @@ /obj/machinery/shower/directional/south, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/control) +"dk" = ( +/obj/structure/table/glass/plasmaglass, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/machinery/light/cold/directional/east, +/obj/item/gun/syringe/syndicate, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/centcom/syndicate_mothership/expansion_chemicalwarfare) "dn" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 1 @@ -232,17 +247,6 @@ }, /turf/open/floor/iron/dark/textured_large, /area/centcom/syndicate_mothership/control) -"do" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ - name = "Tinted Window"; - opacity = 1 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 10 - }, -/obj/effect/turf_decal/stripes/end, -/turf/open/floor/mineral/titanium/tiled, -/area/centcom/syndicate_mothership/control) "dq" = ( /obj/machinery/light/small/directional/north, /turf/open/floor/iron/smooth_half, @@ -270,13 +274,6 @@ /obj/structure/fluff/tram_rail, /turf/open/lava/plasma/ice_moon, /area/centcom/syndicate_mothership/control) -"dI" = ( -/obj/structure/dresser, -/obj/structure/noticeboard/directional/south, -/turf/open/floor/iron/smooth_half{ - dir = 1 - }, -/area/centcom/syndicate_mothership/control) "dN" = ( /obj/effect/turf_decal/stripes/end{ dir = 4 @@ -318,16 +315,10 @@ /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/mineral/titanium/yellow, /area/centcom/syndicate_mothership/control) -"eh" = ( -/obj/structure/closet/cardboard/metal, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/centcom/syndicate_mothership/control) "ej" = ( /obj/effect/turf_decal/stripes/end{ dir = 4 }, -/obj/machinery/processor/slime, /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_bioterrorism) "ek" = ( @@ -349,14 +340,6 @@ dir = 4 }, /area/centcom/syndicate_mothership/control) -"eo" = ( -/obj/structure/sign/poster/contraband/free_drone{ - pixel_y = 32 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 8 - }, -/area/centcom/syndicate_mothership/control) "er" = ( /obj/structure/table/wood, /obj/item/food/syndicake{ @@ -401,24 +384,18 @@ }, /turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) +"fd" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/structure/sign/poster/contraband/power{ + pixel_y = 32 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom/syndicate_mothership/expansion_chemicalwarfare) "fk" = ( /turf/open/floor/circuit/red/off, /area/centcom/syndicate_mothership/expansion_bioterrorism) -"fo" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/c20r{ - pixel_x = 32 - }, -/obj/machinery/portable_atmospherics/canister/plasma, -/turf/open/floor/plating, -/area/centcom/syndicate_mothership/expansion_bombthreat) -"fu" = ( -/obj/machinery/shower/directional/south, -/obj/machinery/light/floor/has_bulb, -/turf/open/floor/iron/freezer, -/area/centcom/syndicate_mothership/control) "fw" = ( /obj/item/kirbyplants/random, /turf/open/floor/mineral/plastitanium, @@ -441,25 +418,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/catwalk_floor/iron_smooth, /area/centcom/syndicate_mothership/control) -"fE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1 - }, -/obj/machinery/airalarm/unlocked{ - dir = 8; - pixel_x = -24 - }, -/turf/open/floor/mineral/titanium/tiled/yellow, -/area/centcom/syndicate_mothership/expansion_bombthreat) -"fH" = ( -/obj/structure/sign/poster/contraband/gorlex_recruitment{ - pixel_x = -32 - }, -/turf/open/floor/mineral/titanium, -/area/centcom/syndicate_mothership/control) "fK" = ( /obj/machinery/hydroponics/constructable, /turf/open/floor/mineral/titanium/tiled, @@ -475,15 +433,6 @@ }, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership) -"ga" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/knife/kitchen, -/obj/structure/sign/poster/contraband/self_ai_liberation{ - pixel_x = -32 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/centcom/syndicate_mothership/control) "gf" = ( /obj/item/toy/plush/lizard_plushie/green{ name = "Spots-The-Operative" @@ -497,6 +446,25 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bombthreat) +"gi" = ( +/obj/structure/sign/poster/contraband/lusty_xenomorph{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/centcom/syndicate_mothership/control) +"gn" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/knife/kitchen, +/obj/structure/sign/poster/contraband/self_ai_liberation{ + pixel_x = -32 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/centcom/syndicate_mothership/control) "go" = ( /obj/machinery/light/cold/directional/east, /obj/machinery/vending/snack/teal, @@ -510,6 +478,10 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) +"gv" = ( +/obj/machinery/light/cold/directional/south, +/turf/open/floor/plating, +/area/centcom/syndicate_mothership/control) "gB" = ( /obj/effect/turf_decal/siding/wideplating/dark{ dir = 8 @@ -533,17 +505,6 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/centcom/syndicate_mothership/control) -"gI" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks{ - dir = 1 - }, -/obj/structure/sign/poster/contraband/andromeda_bitters{ - pixel_y = -32 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/centcom/syndicate_mothership/control) "gJ" = ( /obj/structure/rack, /obj/item/stack/sheet/iron/fifty, @@ -554,12 +515,6 @@ }, /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_chemicalwarfare) -"gM" = ( -/obj/structure/sign/poster/contraband/revolver{ - pixel_y = -32 - }, -/turf/open/floor/mineral/titanium, -/area/centcom/syndicate_mothership/control) "gS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, @@ -591,34 +546,13 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/centcom/syndicate_mothership/control) -"hb" = ( -/obj/effect/turf_decal/siding/wideplating{ +"hp" = ( +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/effect/turf_decal/siding/wideplating, -/obj/machinery/door/airlock/glass_large{ - name = "Disembarkents" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron/smooth_half{ - dir = 4 - }, -/area/centcom/syndicate_mothership/control) -"hc" = ( -/obj/structure/sign/poster/contraband/lamarr{ - pixel_y = -32 - }, -/turf/open/floor/iron/smooth_half{ - dir = 1 - }, -/area/centcom/syndicate_mothership/control) -"hp" = ( -/obj/structure/lattice/catwalk, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/railing{ - dir = 10 +/obj/structure/railing{ + dir = 10 }, /turf/open/lava/plasma/ice_moon, /area/centcom/syndicate_mothership/control) @@ -631,10 +565,34 @@ }, /turf/open/floor/plating/icemoon, /area/centcom/syndicate_mothership/control) +"hG" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer{ + dir = 1 + }, +/obj/structure/sign/poster/contraband/space_cube{ + pixel_y = -32 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/centcom/syndicate_mothership/control) "hN" = ( /obj/machinery/chem_mass_spec, /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_chemicalwarfare) +"hS" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/toy/cards/deck/syndicate{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/effect/spawner/random/aimodule/syndicate, +/turf/open/floor/wood/tile, +/area/centcom/syndicate_mothership/control) "hW" = ( /obj/structure/lattice/catwalk, /obj/effect/turf_decal/stripes/line, @@ -731,48 +689,12 @@ /obj/machinery/vending/dinnerware, /turf/open/floor/catwalk_floor/titanium, /area/centcom/syndicate_mothership/control) -"jd" = ( -/obj/structure/rack, -/obj/machinery/light/cold/directional/west, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/item/stock_parts/micro_laser/high{ - pixel_x = 12 - }, -/obj/item/wrench{ - desc = "A little smidgeon of Freon..."; - name = "Freon" - }, -/obj/item/stock_parts/micro_laser/high{ - pixel_x = -4; - pixel_y = -8 - }, -/obj/item/stock_parts/micro_laser/high{ - pixel_x = 8; - pixel_y = 4 - }, -/obj/item/stock_parts/micro_laser/high{ - pixel_x = -8; - pixel_y = -4 - }, -/obj/item/melee/powerfist, -/turf/open/floor/mineral/plastitanium/red, -/area/centcom/syndicate_mothership/expansion_bombthreat) "je" = ( /obj/effect/turf_decal/siding/wideplating{ dir = 8 }, /turf/open/floor/plating, /area/centcom/syndicate_mothership/control) -"jf" = ( -/obj/structure/sign/poster/contraband/gorlex_recruitment{ - pixel_y = 32 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 8 - }, -/area/centcom/syndicate_mothership/control) "jh" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ chamber_id = "nukiebase"; @@ -782,13 +704,12 @@ }, /turf/open/floor/engine/vacuum, /area/centcom/syndicate_mothership/expansion_bombthreat) -"jq" = ( -/obj/structure/dresser, -/obj/structure/noticeboard/directional/north, -/turf/open/floor/iron/smooth_half{ - dir = 1 +"jn" = ( +/obj/machinery/igniter/incinerator_ordmix{ + id = "syn_ordmix_igniter" }, -/area/centcom/syndicate_mothership/control) +/turf/open/floor/engine/vacuum, +/area/centcom/syndicate_mothership/expansion_bombthreat) "js" = ( /obj/machinery/computer/camera_advanced{ dir = 8; @@ -797,6 +718,17 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/centcom/syndicate_mothership/control) +"jw" = ( +/obj/structure/dresser, +/obj/structure/noticeboard/directional/north, +/obj/item/dyespray{ + pixel_x = -2; + pixel_y = 15 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/centcom/syndicate_mothership/control) "jC" = ( /obj/machinery/vending/boozeomat, /turf/closed/indestructible/syndicate, @@ -807,19 +739,6 @@ }, /turf/open/floor/circuit/red/off, /area/centcom/syndicate_mothership/expansion_bioterrorism) -"jT" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/bottle/beer{ - pixel_x = 5; - pixel_y = -2 - }, -/obj/item/toy/cards/deck/syndicate{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/effect/spawner/random/aimodule/syndicate, -/turf/open/floor/wood/tile, -/area/centcom/syndicate_mothership/control) "jW" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 1 @@ -828,6 +747,13 @@ /obj/structure/noticeboard/directional/north, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bioterrorism) +"jY" = ( +/obj/structure/sign/poster/contraband/masked_men{ + pixel_x = 32 + }, +/obj/machinery/chem_dispenser/fullupgrade, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/centcom/syndicate_mothership/expansion_chemicalwarfare) "kg" = ( /turf/open/misc/ice/icemoon, /area/centcom/syndicate_mothership/control) @@ -855,6 +781,17 @@ "ks" = ( /turf/closed/wall/mineral/diamond, /area/centcom/syndicate_mothership/control) +"ku" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 5 + }, +/obj/structure/table/reinforced/plasmarglass, +/obj/item/storage/backpack/duffelbag/med/surgery{ + pixel_y = -11 + }, +/obj/item/storage/belt/medical, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/centcom/syndicate_mothership/control) "kz" = ( /obj/machinery/door/airlock/maintenance/external{ name = "Bunk Room 2" @@ -875,18 +812,6 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/centcom/syndicate_mothership/control) -"kN" = ( -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/the_big_gas_giant_truth{ - pixel_y = 32 - }, -/turf/open/floor/mineral/plastitanium, -/area/centcom/syndicate_mothership/expansion_chemicalwarfare) "kU" = ( /obj/structure/flora/tree/dead/style_random, /obj/structure/flora/grass/both/style_random, @@ -902,6 +827,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, /turf/open/floor/catwalk_floor/iron, /area/centcom/syndicate_mothership/control) +"kY" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom/syndicate_mothership/control) "la" = ( /obj/structure/lattice/catwalk, /obj/effect/turf_decal/stripes/line{ @@ -927,6 +858,38 @@ dir = 8 }, /area/centcom/syndicate_mothership/control) +"le" = ( +/obj/structure/closet/crate/freezer{ + name = "pantry crate" + }, +/obj/structure/sign/poster/contraband/moffuchis_pizza{ + pixel_y = -32 + }, +/obj/item/reagent_containers/condiment/rice{ + pixel_y = 12 + }, +/obj/item/reagent_containers/condiment/rice{ + pixel_y = 12 + }, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill, +/obj/item/food/grown/wheat, +/obj/item/food/grown/wheat, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/vanillapod, +/obj/item/food/grown/vanillapod, +/obj/item/food/grown/herbs, +/obj/item/food/grown/herbs, +/obj/item/food/grown/cocoapod, +/obj/item/food/grown/cocoapod, +/obj/item/food/grown/aloe, +/obj/item/food/grown/coffee, +/obj/item/food/grown/coffee, +/turf/open/floor/plastic, +/area/centcom/syndicate_mothership/expansion_fridgerummage) "lg" = ( /turf/closed/indestructible/fakedoor{ name = "BUNKER 4337" @@ -941,18 +904,38 @@ /obj/structure/flora/grass/both/style_random, /turf/open/misc/asteroid/snow/airless, /area/centcom/syndicate_mothership) -"lm" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/structure/showcase/machinery/tv{ - desc = "Static fills the screen. If you can find the VCR, you might be able to watch those old Heist Movies again."; - name = "\improper Static Filled Tube(TM) Television" +"ll" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 }, -/obj/structure/sign/poster/contraband/rip_badger{ - pixel_x = 32 +/obj/structure/table/glass/plasmaglass, +/obj/item/reagent_containers/syringe{ + pixel_x = -5; + pixel_y = 12 }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/centcom/syndicate_mothership/control) +/obj/item/reagent_containers/syringe{ + pixel_x = -2; + pixel_y = 13 + }, +/obj/item/reagent_containers/syringe{ + pixel_x = 1; + pixel_y = 14 + }, +/obj/machinery/light/cold/directional/north, +/obj/item/reagent_containers/dropper{ + pixel_x = -4; + pixel_y = -6 + }, +/obj/item/storage/box/monkeycubes{ + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/reagent_containers/cup/bottle/formaldehyde{ + pixel_x = 8; + pixel_y = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom/syndicate_mothership/expansion_bioterrorism) "lo" = ( /obj/effect/turf_decal/siding/thinplating_new/dark, /obj/machinery/camera/autoname/directional/south{ @@ -982,52 +965,6 @@ dir = 1 }, /area/centcom/syndicate_mothership/control) -"lH" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ - name = "Tinted Window"; - opacity = 1 - }, -/obj/structure/table/reinforced/plasmarglass, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -2; - pixel_y = 3 - }, -/obj/item/assembly/signaler{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/assembly/signaler{ - pixel_x = 2; - pixel_y = 5 - }, -/obj/item/assembly/timer{ - pixel_x = 12; - pixel_y = -9 - }, -/obj/item/assembly/timer{ - pixel_x = 15 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -6; - pixel_y = -4 - }, -/obj/item/assembly/signaler{ - pixel_x = 5; - pixel_y = 10 - }, -/obj/item/assembly/timer{ - pixel_x = 18; - pixel_y = 5 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/centcom/syndicate_mothership/expansion_bombthreat) "lQ" = ( /obj/structure/chair/sofa/left/brown{ dir = 4 @@ -1037,29 +974,21 @@ /area/centcom/syndicate_mothership/control) "mb" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 6 - }, -/obj/machinery/camera/autoname/directional/east{ - network = list("nukie") - }, -/obj/machinery/chem_dispenser/mutagensaltpeter, -/turf/open/floor/mineral/plastitanium/red, -/area/centcom/syndicate_mothership/expansion_bioterrorism) -"mt" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/structure/table/glass/plasmaglass, -/obj/item/folder/white, -/obj/item/pen{ - pixel_x = 6; - pixel_y = 5 + dir = 6 }, -/obj/machinery/light/cold/directional/west, -/obj/item/stack/spacecash/c200{ - pixel_y = 17 +/obj/machinery/camera/autoname/directional/east{ + network = list("nukie") }, -/turf/open/floor/mineral/plastitanium, +/obj/machinery/chem_dispenser/mutagensaltpeter, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom/syndicate_mothership/expansion_bioterrorism) +"mh" = ( +/obj/machinery/griddle, +/obj/structure/sign/poster/contraband/syndiemoth{ + pixel_y = 32 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, /area/centcom/syndicate_mothership/control) "my" = ( /obj/effect/landmark/start/nukeop_leader, @@ -1088,38 +1017,6 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bombthreat) -"mG" = ( -/obj/structure/closet/crate/freezer{ - name = "pantry crate" - }, -/obj/structure/sign/poster/contraband/moffuchis_pizza{ - pixel_y = -32 - }, -/obj/item/reagent_containers/condiment/rice{ - pixel_y = 12 - }, -/obj/item/reagent_containers/condiment/rice{ - pixel_y = 12 - }, -/obj/item/reagent_containers/condiment/saltshaker, -/obj/item/reagent_containers/condiment/peppermill, -/obj/item/food/grown/wheat, -/obj/item/food/grown/wheat, -/obj/item/reagent_containers/condiment/sugar, -/obj/item/reagent_containers/condiment/sugar, -/obj/item/food/grown/soybeans, -/obj/item/food/grown/soybeans, -/obj/item/food/grown/vanillapod, -/obj/item/food/grown/vanillapod, -/obj/item/food/grown/herbs, -/obj/item/food/grown/herbs, -/obj/item/food/grown/cocoapod, -/obj/item/food/grown/cocoapod, -/obj/item/food/grown/aloe, -/obj/item/food/grown/coffee, -/obj/item/food/grown/coffee, -/turf/open/floor/plastic, -/area/centcom/syndicate_mothership/expansion_fridgerummage) "mJ" = ( /obj/structure/sign/poster/contraband/free_key, /turf/closed/indestructible/syndicate, @@ -1144,14 +1041,6 @@ }, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/expansion_chemicalwarfare) -"nb" = ( -/obj/machinery/oven/range, -/obj/structure/sign/poster/contraband/eat{ - pixel_x = -32 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/centcom/syndicate_mothership/control) "ng" = ( /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/siding/thinplating_new/dark{ @@ -1164,21 +1053,6 @@ /obj/structure/fans/tiny, /turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) -"nh" = ( -/obj/structure/table/glass/plasmaglass, -/obj/item/stack/sheet/mineral/plasma{ - pixel_y = 15 - }, -/obj/item/grenade/chem_grenade, -/obj/item/stack/cable_coil, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 8; - pixel_y = 14 - }, -/obj/machinery/light/cold/directional/west, -/obj/item/stack/cable_coil, -/turf/open/floor/mineral/titanium/tiled/yellow, -/area/centcom/syndicate_mothership/expansion_chemicalwarfare) "nk" = ( /obj/structure/flora/tree/dead/style_random, /obj/structure/flora/grass/both/style_random, @@ -1227,12 +1101,30 @@ /obj/structure/flora/tree/dead/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/centcom/syndicate_mothership/control) +"oa" = ( +/obj/structure/sign/poster/contraband/lamarr{ + pixel_y = -32 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/centcom/syndicate_mothership/control) "oc" = ( /obj/structure/fence{ dir = 4 }, /turf/open/misc/asteroid/snow/icemoon, /area/centcom/syndicate_mothership/control) +"of" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/sign/poster/contraband/gorlex_recruitment{ + pixel_y = -32 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom/syndicate_mothership/control) "oh" = ( /obj/structure/table/reinforced, /obj/item/syndicatedetonator{ @@ -1251,6 +1143,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2, /turf/open/floor/catwalk_floor/iron_dark, /area/centcom/syndicate_mothership/control) +"oq" = ( +/obj/structure/closet/cardboard, +/obj/structure/sign/poster/contraband/busty_backdoor_xeno_babes_6{ + pixel_x = 32 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/centcom/syndicate_mothership/control) "or" = ( /obj/effect/turf_decal/siding/wideplating/dark{ dir = 1 @@ -1277,12 +1176,34 @@ }, /turf/open/floor/engine/vacuum, /area/centcom/syndicate_mothership/expansion_bombthreat) +"oz" = ( +/obj/structure/dresser, +/obj/structure/noticeboard/directional/south, +/obj/item/dyespray{ + pixel_x = -3; + pixel_y = 13 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/centcom/syndicate_mothership/control) "oD" = ( /obj/effect/turf_decal/siding/red{ dir = 1 }, /turf/open/floor/iron/dark/textured_large, /area/centcom/syndicate_mothership/control) +"oJ" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks{ + dir = 1 + }, +/obj/structure/sign/poster/contraband/andromeda_bitters{ + pixel_y = -32 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/centcom/syndicate_mothership/control) "oK" = ( /obj/machinery/camera/autoname/directional/south{ network = list("nukie") @@ -1291,9 +1212,13 @@ dir = 8 }, /area/centcom/syndicate_mothership/control) -"oN" = ( -/obj/machinery/light/cold/directional/east, -/obj/item/kirbyplants/random, +"oM" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/syndicate_pistol{ + pixel_y = 32 + }, /turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) "oR" = ( @@ -1327,24 +1252,6 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/centcom/syndicate_mothership/control) -"pi" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/structure/sign/poster/contraband/cybersun_six_hundred{ - pixel_x = 32 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/mineral/titanium, -/area/centcom/syndicate_mothership/control) -"pj" = ( -/obj/structure/sign/poster/contraband/lusty_xenomorph{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, -/turf/open/floor/iron/smooth_half{ - dir = 1 - }, -/area/centcom/syndicate_mothership/control) "pl" = ( /obj/structure/flora/rock/icy/style_random, /turf/open/misc/asteroid/snow/airless, @@ -1374,13 +1281,6 @@ /obj/item/bedsheet/syndie, /turf/open/floor/iron/smooth_half, /area/centcom/syndicate_mothership/control) -"pF" = ( -/obj/structure/closet/cardboard, -/obj/structure/sign/poster/contraband/busty_backdoor_xeno_babes_6{ - pixel_x = 32 - }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/centcom/syndicate_mothership/control) "pJ" = ( /obj/machinery/camera/autoname/directional/south{ network = list("nukie") @@ -1394,7 +1294,8 @@ /area/centcom/syndicate_mothership/control) "pM" = ( /obj/machinery/light/cold/directional/south, -/turf/open/floor/plating, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/control) "pS" = ( /obj/structure/chair/greyscale{ @@ -1411,6 +1312,12 @@ }, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/control) +"pV" = ( +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark/textured_half{ + dir = 8 + }, +/area/centcom/syndicate_mothership/control) "pW" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -1422,12 +1329,6 @@ /obj/machinery/hydroponics/constructable, /turf/open/floor/mineral/titanium/tiled, /area/centcom/syndicate_mothership/expansion_bioterrorism) -"qc" = ( -/obj/machinery/igniter/incinerator_ordmix{ - id = "syn_ordmix_igniter" - }, -/turf/open/floor/engine/vacuum, -/area/centcom/syndicate_mothership/expansion_bombthreat) "qh" = ( /obj/item/stack/spacecash/c20, /turf/open/misc/asteroid/snow/icemoon, @@ -1507,15 +1408,6 @@ dir = 4 }, /area/centcom/syndicate_mothership/control) -"qL" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/obj/structure/sign/poster/contraband/syndicate_pistol{ - pixel_y = 32 - }, -/turf/open/floor/mineral/titanium, -/area/centcom/syndicate_mothership/control) "qN" = ( /turf/open/floor/iron/dark/textured_large, /area/centcom/syndicate_mothership/control) @@ -1567,6 +1459,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, /turf/open/floor/iron/smooth, /area/centcom/syndicate_mothership/control) +"rp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/cold/directional/east, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plating, +/area/centcom/syndicate_mothership/expansion_bombthreat) "ru" = ( /obj/effect/turf_decal/siding/wideplating{ dir = 1 @@ -1577,6 +1477,14 @@ }, /turf/open/floor/iron/dark/textured_half, /area/centcom/syndicate_mothership/control) +"rD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/purple, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/mineral/plastitanium, +/area/centcom/syndicate_mothership/expansion_chemicalwarfare) "rG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, @@ -1597,18 +1505,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/control) -"rX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/fun_police{ - pixel_x = -32 - }, -/turf/open/floor/mineral/plastitanium, -/area/centcom/syndicate_mothership/expansion_bombthreat) "sb" = ( /obj/structure/fence/cut/medium{ dir = 4 @@ -1644,10 +1540,6 @@ }, /turf/open/floor/mineral/titanium/tiled/blue, /area/centcom/syndicate_mothership/expansion_bombthreat) -"sl" = ( -/obj/machinery/light/floor/has_bulb, -/turf/open/floor/mineral/plastitanium, -/area/centcom/syndicate_mothership/control) "so" = ( /obj/structure/chair/office{ dir = 1 @@ -1664,49 +1556,10 @@ "sq" = ( /turf/open/misc/asteroid/snow/airless, /area/centcom/syndicate_mothership/control) -"ss" = ( -/obj/structure/table/glass/plasmaglass, -/obj/item/screwdriver{ - pixel_x = 1; - pixel_y = 23 - }, -/obj/item/clothing/glasses/science{ - pixel_x = -5; - pixel_y = 11 - }, -/obj/machinery/reagentgrinder{ - pixel_x = 7; - pixel_y = 5 - }, -/obj/structure/noticeboard/directional/east, -/obj/item/grenade/chem_grenade{ - pixel_x = -4 - }, -/obj/item/grenade/chem_grenade{ - pixel_x = -4 - }, -/obj/item/grenade/chem_grenade{ - pixel_x = -4 - }, -/obj/item/grenade/chem_grenade{ - pixel_x = -4 - }, -/turf/open/floor/mineral/titanium/tiled/yellow, -/area/centcom/syndicate_mothership/expansion_chemicalwarfare) "sv" = ( /obj/machinery/light/small/directional/north, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership) -"sz" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 6 - }, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/structure/sign/poster/contraband/gorlex_recruitment{ - pixel_y = -32 - }, -/turf/open/floor/mineral/plastitanium, -/area/centcom/syndicate_mothership/control) "sE" = ( /obj/effect/turf_decal/siding/wideplating{ dir = 1 @@ -1748,15 +1601,6 @@ "sU" = ( /turf/open/space/basic, /area/space) -"sY" = ( -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/obj/structure/sign/poster/contraband/power{ - pixel_y = 32 - }, -/turf/open/floor/mineral/plastitanium, -/area/centcom/syndicate_mothership/expansion_chemicalwarfare) "tc" = ( /obj/machinery/light/small/directional/south, /obj/structure/cable, @@ -1783,17 +1627,18 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/centcom/syndicate_mothership/control) +"to" = ( +/turf/open/floor/mineral/plastitanium/red, +/area/centcom/syndicate_mothership/control) "ts" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ - name = "Tinted Window"; - opacity = 1 +/obj/structure/chair/sofa/bench/left{ + dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/structure/sign/poster/contraband/smoke{ + pixel_y = 31 }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/plating, -/area/centcom/syndicate_mothership/expansion_bombthreat) +/turf/open/floor/mineral/titanium, +/area/centcom/syndicate_mothership/control) "tu" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/siding/red/corner{ @@ -1812,16 +1657,19 @@ /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 8 }, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/mineral/plastitanium/red, -/area/centcom/syndicate_mothership/expansion_bombthreat) -"tC" = ( -/obj/effect/turf_decal/siding/thinplating, -/obj/machinery/door/window/survival_pod{ - name = "Surgery"; - opacity = 1 +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom/syndicate_mothership/expansion_bombthreat) +"tB" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/closet/syndicate/personal, +/obj/structure/sign/poster/contraband/lusty_xenomorph{ + pixel_y = 32 + }, +/obj/effect/turf_decal/tile/red/full, +/turf/open/floor/iron/dark/textured_half{ + dir = 8 }, -/turf/open/floor/mineral/titanium/tiled/blue, /area/centcom/syndicate_mothership/control) "tJ" = ( /obj/effect/light_emitter{ @@ -1855,6 +1703,19 @@ /obj/structure/statue/uranium/nuke, /turf/open/misc/asteroid/snow/icemoon, /area/centcom/syndicate_mothership/control) +"uJ" = ( +/obj/machinery/computer/atmos_control/noreconnect{ + atmos_chambers = list("nukiebase"="Burn Chamber"); + desc = "Used to monitor the Syndicate Ordnance Laboratory's burn chamber."; + dir = 1; + name = "Ordnance Chamber Monitor" + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/cold/directional/west{ + dir = 2 + }, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/centcom/syndicate_mothership/expansion_bombthreat) "uK" = ( /obj/effect/turf_decal/siding/wideplating{ dir = 1 @@ -1881,6 +1742,23 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/centcom/syndicate_mothership/control) +"vm" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + name = "Tinted Window"; + opacity = 1 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/mineral/titanium/tiled, +/area/centcom/syndicate_mothership/control) +"vs" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 5 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom/syndicate_mothership/control) "vv" = ( /obj/structure/table/reinforced, /obj/item/paper/fluff/stations/centcom/disk_memo{ @@ -1902,38 +1780,6 @@ /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/plating, /area/centcom/syndicate_mothership/control) -"vG" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/structure/table/glass/plasmaglass, -/obj/item/reagent_containers/syringe{ - pixel_x = -5; - pixel_y = 12 - }, -/obj/item/reagent_containers/syringe{ - pixel_x = -2; - pixel_y = 13 - }, -/obj/item/reagent_containers/syringe{ - pixel_x = 1; - pixel_y = 14 - }, -/obj/machinery/light/cold/directional/north, -/obj/item/reagent_containers/dropper{ - pixel_x = -4; - pixel_y = -6 - }, -/obj/item/storage/box/monkeycubes{ - pixel_x = -6; - pixel_y = 5 - }, -/obj/item/reagent_containers/cup/bottle/formaldehyde{ - pixel_x = 8; - pixel_y = 4 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/centcom/syndicate_mothership/expansion_bioterrorism) "vI" = ( /obj/structure/railing, /turf/open/floor/catwalk_floor/iron_smooth{ @@ -2009,15 +1855,6 @@ }, /turf/open/misc/asteroid/snow/airless, /area/centcom/syndicate_mothership) -"wy" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/rebels_unite{ - pixel_y = -32 - }, -/turf/open/floor/mineral/titanium, -/area/centcom/syndicate_mothership/control) "wG" = ( /turf/open/floor/iron/smooth_half{ dir = 1 @@ -2045,10 +1882,6 @@ }, /turf/open/misc/asteroid/snow/airless, /area/centcom/syndicate_mothership) -"xc" = ( -/obj/machinery/smartfridge/chemistry/virology/preloaded, -/turf/closed/indestructible/syndicate, -/area/centcom/syndicate_mothership/expansion_bioterrorism) "xe" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ dir = 6 @@ -2076,15 +1909,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2, /turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) -"xs" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/obj/structure/sign/poster/contraband/punch_shit{ - pixel_y = -32 - }, -/turf/open/floor/mineral/titanium, -/area/centcom/syndicate_mothership/control) "xu" = ( /turf/closed/indestructible/syndicate, /area/centcom/syndicate_mothership/expansion_bioterrorism) @@ -2099,12 +1923,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"xU" = ( -/obj/structure/sign/poster/contraband/moffuchis_pizza{ - pixel_x = -32 - }, -/turf/open/floor/mineral/titanium, -/area/centcom/syndicate_mothership/control) "ya" = ( /turf/open/floor/carpet, /area/centcom/syndicate_mothership/control) @@ -2142,24 +1960,6 @@ /obj/structure/chair/office/light, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bombthreat) -"yy" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ - name = "Tinted Window"; - opacity = 1 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 6 - }, -/obj/structure/table/reinforced/plasmarglass, -/obj/item/reagent_containers/cup/bottle/epinephrine, -/obj/item/reagent_containers/cup/bottle/multiver{ - pixel_x = 6 - }, -/obj/item/reagent_containers/syringe{ - pixel_y = 15 - }, -/turf/open/floor/mineral/titanium/tiled/blue, -/area/centcom/syndicate_mothership/control) "yB" = ( /obj/machinery/light/small/directional/north, /turf/open/misc/asteroid/snow/icemoon, @@ -2174,15 +1974,6 @@ /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/catwalk_floor/titanium, /area/centcom/syndicate_mothership/control) -"yG" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 9 - }, -/obj/structure/sign/poster/contraband/gorlex_recruitment{ - pixel_y = 32 - }, -/turf/open/floor/mineral/plastitanium, -/area/centcom/syndicate_mothership/control) "yK" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 9 @@ -2194,13 +1985,10 @@ /obj/item/storage/medkit/regular, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/control) -"yP" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/machinery/camera/autoname/directional/south{ - network = list("nukie") - }, -/turf/open/floor/mineral/plastitanium, -/area/centcom/syndicate_mothership/control) +"yZ" = ( +/obj/machinery/smartfridge/chemistry/virology/preloaded, +/turf/closed/indestructible/syndicate, +/area/centcom/syndicate_mothership/expansion_bioterrorism) "zi" = ( /obj/structure/chair/office, /turf/open/floor/mineral/titanium/tiled/yellow, @@ -2240,48 +2028,19 @@ /obj/item/kirbyplants/random, /turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) -"zJ" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ - name = "Tinted Window"; - opacity = 1 - }, -/obj/structure/table/reinforced/plasmarglass, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/item/transfer_valve{ - pixel_x = 5 - }, -/obj/item/transfer_valve, -/obj/item/transfer_valve{ - pixel_x = -5 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/centcom/syndicate_mothership/expansion_bombthreat) "zL" = ( /obj/structure/rack, /obj/item/restraints/handcuffs/cable/pink, /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/centcom/syndicate_mothership/control) -"zN" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks/beer{ - dir = 1 - }, -/obj/structure/sign/poster/contraband/space_cube{ - pixel_y = -32 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/centcom/syndicate_mothership/control) "zQ" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/components/tank/nitrogen, /turf/open/space/basic, /area/space/nearstation) "zR" = ( -/mob/living/simple_animal/slime, +/mob/living/basic/slime, /turf/open/floor/circuit/red/off, /area/centcom/syndicate_mothership/expansion_bioterrorism) "zT" = ( @@ -2290,13 +2049,21 @@ }, /turf/open/misc/ice/icemoon, /area/centcom/syndicate_mothership/control) -"zW" = ( -/obj/structure/chair/stool/directional/north, -/obj/effect/landmark/start/nukeop, -/obj/structure/sign/poster/contraband/donk_co{ - pixel_y = -32 +"zV" = ( +/obj/machinery/door/window/survival_pod{ + dir = 8; + name = "Toilet Door"; + opacity = 1 }, -/turf/open/floor/wood/tile, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + name = "Frosted Window"; + opacity = 1 + }, +/obj/structure/toilet/greyscale{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) "Ab" = ( /obj/effect/turf_decal/siding/thinplating_new/light{ @@ -2325,6 +2092,11 @@ }, /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_bombthreat) +"AJ" = ( +/obj/structure/closet/cardboard/metal, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/centcom/syndicate_mothership/control) "AL" = ( /obj/machinery/light/cold/directional/south, /turf/open/floor/iron/smooth_half{ @@ -2381,9 +2153,12 @@ /obj/machinery/chem_master, /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_chemicalwarfare) -"Bk" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/mineral/titanium, +"Bi" = ( +/obj/machinery/light/cold/directional/north, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/control) "Bm" = ( /obj/structure/flora/tree/pine/style_random, @@ -2442,6 +2217,14 @@ "BK" = ( /turf/open/floor/plastic, /area/centcom/syndicate_mothership/expansion_fridgerummage) +"BM" = ( +/obj/machinery/oven/range, +/obj/structure/sign/poster/contraband/eat{ + pixel_x = -32 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/centcom/syndicate_mothership/control) "BR" = ( /obj/structure/table/glass/plasmaglass, /obj/item/storage/pill_bottle{ @@ -2458,6 +2241,16 @@ "Ca" = ( /turf/closed/wall/mineral/wood, /area/centcom/syndicate_mothership/control) +"Cd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/c20r{ + pixel_x = 32 + }, +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/plating, +/area/centcom/syndicate_mothership/expansion_bombthreat) "Ce" = ( /obj/structure/window/reinforced/survival_pod/spawner/directional/east, /obj/effect/turf_decal/siding/thinplating_new/dark{ @@ -2481,14 +2274,12 @@ }, /turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) -"Cm" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/smoke{ - pixel_y = 31 +"Cr" = ( +/obj/structure/sign/poster/contraband/syndiemoth{ + pixel_x = 32 }, -/turf/open/floor/mineral/titanium, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, /area/centcom/syndicate_mothership/control) "Ct" = ( /obj/machinery/door/airlock/hatch{ @@ -2497,15 +2288,56 @@ /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/iron/smooth_edge, /area/centcom/syndicate_mothership/control) +"CC" = ( +/obj/effect/turf_decal/siding/thinplating, +/obj/machinery/door/window/survival_pod{ + name = "Surgery"; + opacity = 1 + }, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/centcom/syndicate_mothership/control) +"CE" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + name = "Tinted Window"; + opacity = 1 + }, +/obj/structure/table/reinforced/plasmarglass, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/item/transfer_valve{ + pixel_x = 5 + }, +/obj/item/transfer_valve, +/obj/item/transfer_valve{ + pixel_x = -5 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom/syndicate_mothership/expansion_bombthreat) "CX" = ( /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership) +"De" = ( +/obj/structure/sign/poster/contraband/gorlex_recruitment{ + pixel_x = -32 + }, +/turf/open/floor/mineral/titanium, +/area/centcom/syndicate_mothership/control) "Dl" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_bombthreat) +"Dn" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/punch_shit{ + pixel_y = -32 + }, +/turf/open/floor/mineral/titanium, +/area/centcom/syndicate_mothership/control) "Du" = ( /obj/docking_port/stationary{ area_type = /area/centcom/syndicate_mothership; @@ -2525,28 +2357,15 @@ /obj/structure/chair/sofa/bench, /obj/machinery/light/cold/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, -/turf/open/floor/stone, -/area/centcom/syndicate_mothership/control) -"DI" = ( -/obj/structure/sign/poster/contraband/masked_men{ - pixel_x = 32 - }, -/obj/machinery/chem_dispenser/fullupgrade, -/turf/open/floor/mineral/titanium/tiled/yellow, -/area/centcom/syndicate_mothership/expansion_chemicalwarfare) +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, +/turf/open/floor/stone, +/area/centcom/syndicate_mothership/control) "DJ" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, /turf/open/floor/plating/snowed/icemoon, /area/centcom/syndicate_mothership/control) -"DN" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark/textured_half{ - dir = 8 - }, -/area/centcom/syndicate_mothership/control) "DY" = ( /obj/structure/table/wood/poker, /obj/machinery/light/warm/directional/north, @@ -2600,10 +2419,11 @@ /turf/open/misc/asteroid/snow/icemoon, /area/centcom/syndicate_mothership/control) "Et" = ( -/obj/machinery/light/cold/directional/east, -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark/textured_large, +/obj/structure/sign/poster/contraband/c20r{ + pixel_y = -32 + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, /area/centcom/syndicate_mothership/control) "Ev" = ( /turf/open/floor/plating/elevatorshaft, @@ -2614,6 +2434,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, /turf/open/floor/catwalk_floor/iron_smooth, /area/centcom/syndicate_mothership/control) +"EG" = ( +/obj/structure/table/reinforced, +/obj/item/knife/combat/survival{ + pixel_x = 7; + pixel_y = 17 + }, +/obj/item/reagent_containers/cup/glass/bottle/rum{ + pixel_x = -5; + pixel_y = 17 + }, +/obj/structure/sign/poster/contraband/red_rum{ + pixel_x = 32 + }, +/obj/machinery/recharger, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/centcom/syndicate_mothership/control) "EH" = ( /obj/structure/lattice/catwalk, /obj/effect/turf_decal/stripes/line, @@ -2622,14 +2459,6 @@ }, /turf/open/lava/plasma/ice_moon, /area/centcom/syndicate_mothership/control) -"EJ" = ( -/obj/machinery/light/small/red/directional/west, -/obj/structure/sign/poster/contraband/soviet_propaganda{ - pixel_x = -32 - }, -/obj/item/stack/sheet/cardboard/fifty, -/turf/open/floor/mineral/titanium/yellow, -/area/centcom/syndicate_mothership/control) "EM" = ( /obj/machinery/atmospherics/pipe/smart/simple/general/hidden{ dir = 4 @@ -2640,20 +2469,6 @@ /obj/structure/barricade/sandbags, /turf/open/misc/asteroid/snow/airless, /area/centcom/syndicate_mothership) -"ET" = ( -/obj/structure/table/glass/plasmaglass, -/obj/item/reagent_containers/cup/beaker/large{ - pixel_x = -5; - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 8; - pixel_y = 2 - }, -/obj/machinery/light/cold/directional/east, -/obj/item/gun/syringe/syndicate, -/turf/open/floor/mineral/titanium/tiled/yellow, -/area/centcom/syndicate_mothership/expansion_chemicalwarfare) "EV" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -2661,6 +2476,14 @@ /obj/effect/turf_decal/siding/purple, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/expansion_chemicalwarfare) +"EZ" = ( +/obj/structure/sign/poster/contraband/energy_swords{ + pixel_y = 32 + }, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/centcom/syndicate_mothership/control) "Fm" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/siding/red/corner{ @@ -2700,12 +2523,6 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /turf/closed/indestructible/syndicate, /area/centcom/syndicate_mothership/expansion_bioterrorism) -"FR" = ( -/obj/machinery/light/floor/has_bulb, -/turf/open/floor/iron/dark/textured_half{ - dir = 4 - }, -/area/centcom/syndicate_mothership/control) "FU" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -2804,6 +2621,12 @@ /obj/structure/flora/grass/both/style_random, /turf/open/misc/asteroid/snow/airless, /area/centcom/syndicate_mothership) +"GC" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/dark/textured_half{ + dir = 4 + }, +/area/centcom/syndicate_mothership/control) "GE" = ( /obj/machinery/vending/cigarette/syndicate, /turf/open/floor/catwalk_floor/titanium, @@ -2849,22 +2672,52 @@ /obj/structure/railing, /turf/open/lava/plasma/ice_moon, /area/centcom/syndicate_mothership/control) -"GV" = ( -/obj/structure/sign/poster/contraband/lizard{ - pixel_x = -32 - }, -/turf/open/floor/mineral/titanium, -/area/centcom/syndicate_mothership/control) -"GX" = ( -/obj/machinery/light/cold/directional/north, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/centcom/syndicate_mothership/control) "Hc" = ( /turf/open/floor/plating/icemoon, /area/centcom/syndicate_mothership/control) +"Hf" = ( +/obj/structure/table/glass/plasmaglass, +/obj/item/pen{ + pixel_x = 9; + pixel_y = 18 + }, +/obj/structure/sign/poster/contraband/syndiemoth{ + pixel_x = -32 + }, +/obj/item/storage/box/beakers{ + pixel_x = -4; + pixel_y = 17 + }, +/obj/item/storage/box/syringes{ + pixel_x = 4; + pixel_y = 17 + }, +/obj/item/assembly/igniter{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/assembly/igniter{ + pixel_x = 7; + pixel_y = 1 + }, +/obj/item/assembly/igniter{ + pixel_x = 7; + pixel_y = -3 + }, +/obj/item/assembly/timer{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/item/assembly/timer{ + pixel_x = -6; + pixel_y = -1 + }, +/obj/item/assembly/timer{ + pixel_x = -6; + pixel_y = -5 + }, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/centcom/syndicate_mothership/expansion_chemicalwarfare) "Ho" = ( /obj/effect/light_emitter{ set_cap = 1; @@ -2883,10 +2736,6 @@ /obj/machinery/shuttle_manipulator, /turf/open/floor/circuit/red, /area/centcom/syndicate_mothership/control) -"Hv" = ( -/obj/machinery/light/floor/has_bulb, -/turf/open/floor/plating, -/area/centcom/syndicate_mothership/control) "HD" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 8 @@ -2921,6 +2770,24 @@ /obj/item/stack/sheet/mineral/plasma, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bioterrorism) +"HE" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + name = "Tinted Window"; + opacity = 1 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 6 + }, +/obj/structure/table/reinforced/plasmarglass, +/obj/item/reagent_containers/cup/bottle/epinephrine, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = 6 + }, +/obj/item/reagent_containers/syringe{ + pixel_y = 15 + }, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/centcom/syndicate_mothership/control) "HJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, @@ -3010,6 +2877,26 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/centcom/syndicate_mothership/control) +"IG" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + name = "Tinted Window"; + opacity = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plating, +/area/centcom/syndicate_mothership/expansion_bombthreat) +"IK" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/rebels_unite{ + pixel_y = -32 + }, +/turf/open/floor/mineral/titanium, +/area/centcom/syndicate_mothership/control) "IL" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/siding/red, @@ -3052,20 +2939,6 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bioterrorism) -"Jz" = ( -/obj/structure/sign/poster/contraband/bountyhunters{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, -/turf/open/floor/iron/smooth, -/area/centcom/syndicate_mothership/control) -"JL" = ( -/obj/machinery/light/cold/directional/south, -/obj/effect/turf_decal/siding/thinplating_new/dark, -/turf/open/floor/mineral/plastitanium, -/area/centcom/syndicate_mothership/control) "JR" = ( /obj/effect/turf_decal/stripes/end{ dir = 8 @@ -3122,10 +2995,29 @@ dir = 4 }, /area/centcom/syndicate_mothership/control) +"KK" = ( +/obj/machinery/shower/directional/south, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/freezer, +/area/centcom/syndicate_mothership/control) "KL" = ( /obj/effect/turf_decal/siding/thinplating_new/dark, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bioterrorism) +"KO" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical/old, +/obj/structure/sign/poster/contraband/pwr_game{ + pixel_y = 32 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/centcom/syndicate_mothership/control) +"KP" = ( +/obj/machinery/light/cold/directional/south, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/centcom/syndicate_mothership/control) "KQ" = ( /obj/structure/railing/corner{ dir = 4 @@ -3214,15 +3106,6 @@ }, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/expansion_bombthreat) -"LK" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 10 - }, -/obj/structure/sign/poster/contraband/energy_swords{ - pixel_x = -32 - }, -/turf/open/floor/mineral/plastitanium, -/area/centcom/syndicate_mothership/control) "LM" = ( /obj/machinery/atmospherics/components/unary/passive_vent{ dir = 8 @@ -3249,31 +3132,114 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/atmospherics/components/trinary/filter{ - dir = 8 +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/centcom/syndicate_mothership/expansion_bombthreat) +"Mb" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/centcom/syndicate_mothership/control) +"Me" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, +/turf/open/floor/catwalk_floor/titanium, +/area/centcom/syndicate_mothership/control) +"Mk" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + name = "Tinted Window"; + opacity = 1 + }, +/obj/structure/table/reinforced/plasmarglass, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = -2; + pixel_y = 3 + }, +/obj/item/assembly/signaler{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/assembly/signaler{ + pixel_x = 2; + pixel_y = 5 + }, +/obj/item/assembly/timer{ + pixel_x = 12; + pixel_y = -9 + }, +/obj/item/assembly/timer{ + pixel_x = 15 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = -6; + pixel_y = -4 + }, +/obj/item/assembly/signaler{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/item/assembly/timer{ + pixel_x = 18; + pixel_y = 5 }, -/turf/open/floor/mineral/titanium/tiled/yellow, +/turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bombthreat) -"Mb" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/centcom/syndicate_mothership/control) -"Me" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, -/turf/open/floor/catwalk_floor/titanium, -/area/centcom/syndicate_mothership/control) "Mo" = ( /obj/structure/fence/cut/medium{ dir = 4 }, /turf/open/misc/asteroid/snow/airless, /area/centcom/syndicate_mothership) +"Mq" = ( +/obj/structure/table/glass/plasmaglass, +/obj/item/screwdriver{ + pixel_x = 1; + pixel_y = 23 + }, +/obj/item/clothing/glasses/science{ + pixel_x = -5; + pixel_y = 11 + }, +/obj/machinery/reagentgrinder{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/structure/noticeboard/directional/east, +/obj/item/grenade/chem_grenade{ + pixel_x = -4 + }, +/obj/item/grenade/chem_grenade{ + pixel_x = -4 + }, +/obj/item/grenade/chem_grenade{ + pixel_x = -4 + }, +/obj/item/grenade/chem_grenade{ + pixel_x = -4 + }, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/centcom/syndicate_mothership/expansion_chemicalwarfare) +"Mr" = ( +/obj/structure/sign/poster/contraband/gorlex_recruitment{ + pixel_y = 32 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 8 + }, +/area/centcom/syndicate_mothership/control) "Ms" = ( /obj/machinery/light/cold/directional/south, /turf/open/floor/iron/dark/textured_half{ @@ -3292,7 +3258,6 @@ /turf/open/floor/iron/smooth, /area/centcom/syndicate_mothership/control) "Mv" = ( -/obj/machinery/computer/camera_advanced/xenobio, /obj/structure/noticeboard/directional/east, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/expansion_bioterrorism) @@ -3323,6 +3288,17 @@ }, /turf/open/floor/plating, /area/centcom/syndicate_mothership/control) +"MR" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + name = "Tinted Window"; + opacity = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plating, +/area/centcom/syndicate_mothership/expansion_bombthreat) "MU" = ( /obj/effect/turf_decal/siding/wideplating/dark{ dir = 8 @@ -3345,13 +3321,6 @@ dir = 4 }, /area/centcom/syndicate_mothership/control) -"Nr" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/machinery/mech_bay_recharge_port, -/turf/open/floor/mineral/titanium, -/area/centcom/syndicate_mothership/control) "Ns" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -3359,13 +3328,9 @@ /obj/machinery/portable_atmospherics/canister, /turf/open/floor/plating, /area/centcom/syndicate_mothership/expansion_bombthreat) -"NA" = ( -/obj/structure/rack, -/obj/item/storage/toolbox/mechanical/old, -/obj/structure/sign/poster/contraband/pwr_game{ - pixel_y = 32 - }, -/turf/open/floor/mineral/titanium/yellow, +"Nz" = ( +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark/textured_large, /area/centcom/syndicate_mothership/control) "NH" = ( /obj/effect/turf_decal/stripes/line{ @@ -3374,22 +3339,6 @@ /obj/machinery/portable_atmospherics/canister, /turf/open/floor/plating, /area/centcom/syndicate_mothership/expansion_bombthreat) -"NM" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8; - name = "Toilet Door"; - opacity = 1 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ - name = "Frosted Window"; - opacity = 1 - }, -/obj/structure/toilet/greyscale{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/mineral/titanium, -/area/centcom/syndicate_mothership/control) "NP" = ( /obj/structure/railing/corner, /turf/open/misc/asteroid/snow/icemoon, @@ -3428,13 +3377,11 @@ }, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership) -"Ov" = ( -/turf/open/floor/mineral/plastitanium, +"Or" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/plating, /area/centcom/syndicate_mothership/control) -"Ow" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, +"Ov" = ( /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/control) "Ox" = ( @@ -3469,18 +3416,18 @@ /turf/open/floor/catwalk_floor/iron_dark, /area/centcom/syndicate_mothership/control) "OR" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 +/obj/effect/turf_decal/siding/wideplating{ + dir = 1 }, -/obj/structure/sign/poster/contraband/fun_police{ - pixel_x = -32 +/obj/effect/turf_decal/siding/wideplating, +/obj/machinery/door/airlock/glass_large{ + name = "Disembarkents" }, -/obj/machinery/light/cold/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/smooth_half{ + dir = 4 }, -/turf/open/floor/mineral/plastitanium, -/area/centcom/syndicate_mothership/expansion_bombthreat) +/area/centcom/syndicate_mothership/control) "OS" = ( /obj/structure/chair/stool/directional/south, /obj/structure/sign/map/right{ @@ -3511,7 +3458,6 @@ /obj/effect/turf_decal/stripes/end{ dir = 8 }, -/obj/machinery/monkey_recycler, /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_bioterrorism) "Pc" = ( @@ -3520,33 +3466,9 @@ }, /turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) -"Pf" = ( -/obj/structure/chair/sofa/right/brown{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/revolver{ - pixel_x = -32 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/centcom/syndicate_mothership/control) "Ph" = ( /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bioterrorism) -"Pi" = ( -/obj/structure/sign/poster/contraband/c20r{ - pixel_y = -32 - }, -/obj/structure/cable, -/turf/open/floor/iron/smooth, -/area/centcom/syndicate_mothership/control) -"Pj" = ( -/obj/machinery/door/window/survival_pod{ - name = "Frosted Door"; - opacity = 1 - }, -/turf/open/floor/iron/freezer, -/area/centcom/syndicate_mothership/control) "Pu" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -3633,6 +3555,14 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/centcom/syndicate_mothership/control) +"Qq" = ( +/obj/machinery/light/small/red/directional/west, +/obj/structure/sign/poster/contraband/soviet_propaganda{ + pixel_x = -32 + }, +/obj/item/stack/sheet/cardboard/fifty, +/turf/open/floor/mineral/titanium/yellow, +/area/centcom/syndicate_mothership/control) "Qr" = ( /obj/structure/cable, /turf/open/floor/iron/smooth, @@ -3641,6 +3571,10 @@ /obj/structure/railing, /turf/open/misc/asteroid/snow/icemoon, /area/centcom/syndicate_mothership/control) +"Qw" = ( +/obj/machinery/light/cold/directional/west, +/turf/open/floor/mineral/titanium, +/area/centcom/syndicate_mothership/control) "Qy" = ( /obj/structure/table/wood, /obj/item/food/nachos{ @@ -3650,6 +3584,19 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/centcom/syndicate_mothership/control) +"QK" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/fun_police{ + pixel_x = -32 + }, +/obj/machinery/light/cold/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom/syndicate_mothership/expansion_bombthreat) "QM" = ( /obj/effect/light_emitter{ set_cap = 1; @@ -3664,22 +3611,17 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/centcom/syndicate_mothership/control) +"QP" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/mech_bay_recharge_port, +/turf/open/floor/mineral/titanium, +/area/centcom/syndicate_mothership/control) "Rd" = ( /obj/structure/cable, /turf/open/floor/catwalk_floor/iron, /area/centcom/syndicate_mothership/control) -"Rf" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/structure/closet/syndicate/personal, -/obj/structure/sign/poster/contraband/gorlex_recruitment{ - pixel_y = 32 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/dark/textured_half{ - dir = 8 - }, -/area/centcom/syndicate_mothership/control) "Rs" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 1 @@ -3689,6 +3631,25 @@ }, /turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) +"Ru" = ( +/obj/structure/chair/sofa/right/brown{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/revolver{ + pixel_x = -32 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/centcom/syndicate_mothership/control) +"Rw" = ( +/obj/structure/sign/poster/contraband/bountyhunters{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, +/turf/open/floor/iron/smooth, +/area/centcom/syndicate_mothership/control) "RA" = ( /obj/effect/turf_decal/siding/wideplating{ dir = 1 @@ -3705,6 +3666,34 @@ "RD" = ( /turf/closed/indestructible/syndicate, /area/centcom/syndicate_mothership/expansion_bombthreat) +"RG" = ( +/obj/structure/rack, +/obj/machinery/light/cold/directional/west, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/item/stock_parts/micro_laser/high{ + pixel_x = 12 + }, +/obj/item/wrench{ + desc = "A little smidgeon of Freon..."; + name = "Freon" + }, +/obj/item/stock_parts/micro_laser/high{ + pixel_x = -4; + pixel_y = -8 + }, +/obj/item/stock_parts/micro_laser/high{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/item/stock_parts/micro_laser/high{ + pixel_x = -8; + pixel_y = -4 + }, +/obj/item/melee/powerfist, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom/syndicate_mothership/expansion_bombthreat) "RL" = ( /obj/effect/light_emitter{ set_cap = 1; @@ -3717,11 +3706,20 @@ /obj/effect/baseturf_helper/asteroid/snow, /turf/closed/indestructible/syndicate, /area/centcom/syndicate_mothership/expansion_bioterrorism) -"RX" = ( -/obj/machinery/light/cold/directional/south, -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, +"RV" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/machinery/camera/autoname/directional/south{ + network = list("nukie") + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom/syndicate_mothership/control) +"RY" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/landmark/start/nukeop, +/obj/structure/sign/poster/contraband/donk_co{ + pixel_y = -32 + }, +/turf/open/floor/wood/tile, /area/centcom/syndicate_mothership/control) "Sc" = ( /obj/structure/railing, @@ -3793,6 +3791,15 @@ /obj/item/mop, /turf/open/floor/catwalk_floor/iron_smooth, /area/centcom/syndicate_mothership/control) +"Sx" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/structure/sign/poster/contraband/energy_swords{ + pixel_x = -32 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom/syndicate_mothership/control) "SD" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 4 @@ -3800,18 +3807,13 @@ /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 8 }, -/turf/open/floor/mineral/plastitanium/red, -/area/centcom/syndicate_mothership/expansion_bombthreat) -"SJ" = ( -/obj/effect/turf_decal/siding/wideplating/dark, -/obj/structure/chair/sofa/bench/right, -/obj/structure/sign/poster/contraband/donut_corp{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, -/turf/open/floor/stone, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom/syndicate_mothership/expansion_bombthreat) +"SH" = ( +/obj/structure/sign/poster/contraband/revolver{ + pixel_y = -32 + }, +/turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) "SK" = ( /obj/structure/fence/cut/large, @@ -3829,6 +3831,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, /turf/closed/indestructible/opsglass, /area/centcom/syndicate_mothership/control) +"SN" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/mineral/plastitanium, +/area/centcom/syndicate_mothership/control) +"SP" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom/syndicate_mothership/control) "SR" = ( /obj/structure/railing, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, @@ -3836,14 +3848,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, /turf/open/floor/catwalk_floor/iron_dark, /area/centcom/syndicate_mothership/control) -"SY" = ( -/obj/structure/sign/poster/contraband/energy_swords{ - pixel_y = 32 - }, -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/centcom/syndicate_mothership/control) "Ta" = ( /turf/closed/indestructible/fakedoor{ name = "Sub-Laboratory Elevator" @@ -3966,19 +3970,28 @@ }, /turf/open/misc/asteroid/snow/airless, /area/centcom/syndicate_mothership) -"TY" = ( -/turf/open/floor/mineral/plastitanium/red, +"Ui" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/showcase/machinery/tv{ + desc = "Static fills the screen. If you can find the VCR, you might be able to watch those old Heist Movies again."; + name = "\improper Static Filled Tube(TM) Television" + }, +/obj/structure/sign/poster/contraband/rip_badger{ + pixel_x = 32 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, /area/centcom/syndicate_mothership/control) -"Ul" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/structure/closet/syndicate/personal, -/obj/structure/sign/poster/contraband/lusty_xenomorph{ +"Uk" = ( +/obj/effect/turf_decal/siding/wideplating/dark, +/obj/structure/chair/sofa/bench/right, +/obj/structure/sign/poster/contraband/donut_corp{ pixel_y = 32 }, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/dark/textured_half{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, +/turf/open/floor/stone, /area/centcom/syndicate_mothership/control) "Un" = ( /obj/effect/turf_decal/stripes/corner{ @@ -4010,35 +4023,51 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/plating, /area/centcom/syndicate_mothership/control) -"Vb" = ( -/obj/effect/turf_decal/stripes/line{ +"UN" = ( +/obj/effect/turf_decal/siding/purple{ dir = 1 }, -/obj/effect/turf_decal/siding/purple, -/obj/machinery/light/cold/directional/south, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/the_big_gas_giant_truth{ + pixel_y = 32 + }, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/expansion_chemicalwarfare) -"Vm" = ( -/obj/structure/flora/rock/pile/style_random, -/turf/open/misc/asteroid/snow/icemoon, -/area/centcom/syndicate_mothership/control) -"Vr" = ( +"US" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 5 + dir = 9 }, -/turf/open/floor/mineral/plastitanium, -/area/centcom/syndicate_mothership/control) -"VA" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ - name = "Tinted Window"; - opacity = 1 +/obj/structure/table/glass/plasmaglass, +/obj/machinery/reagentgrinder{ + pixel_x = -5; + pixel_y = 12 }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = -7; + pixel_y = -8 }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/plating, -/area/centcom/syndicate_mothership/expansion_bombthreat) +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = 9; + pixel_y = -7 + }, +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, +/obj/structure/sign/poster/contraband/kudzu{ + pixel_y = 32 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 10; + pixel_y = 5 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom/syndicate_mothership/expansion_bioterrorism) +"Vm" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/centcom/syndicate_mothership/control) "VC" = ( /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/dark/textured_half{ @@ -4081,14 +4110,6 @@ }, /turf/open/lava/plasma/ice_moon, /area/centcom/syndicate_mothership/control) -"VW" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/light/cold/directional/east, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/plating, -/area/centcom/syndicate_mothership/expansion_bombthreat) "Wc" = ( /obj/machinery/vending/coffee, /obj/effect/turf_decal/siding/thinplating_new/dark{ @@ -4096,6 +4117,18 @@ }, /turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) +"Wl" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/closet/syndicate/personal, +/obj/structure/sign/poster/contraband/gorlex_recruitment{ + pixel_y = 32 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/full, +/turf/open/floor/iron/dark/textured_half{ + dir = 8 + }, +/area/centcom/syndicate_mothership/control) "Wo" = ( /obj/effect/light_emitter{ set_cap = 1; @@ -4221,16 +4254,11 @@ /obj/structure/flora/tree/pine/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/centcom/syndicate_mothership/control) -"XD" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ - name = "Frosted Window"; - opacity = 1 - }, -/obj/item/soap/syndie, -/obj/structure/sign/poster/contraband/got_wood{ - pixel_x = 32 +"XH" = ( +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 }, -/turf/open/floor/iron/freezer, +/turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) "XL" = ( /obj/machinery/light/cold/directional/east, @@ -4273,6 +4301,12 @@ "Ye" = ( /turf/closed/indestructible/rock/snow, /area/centcom/syndicate_mothership) +"Yi" = ( +/obj/machinery/light/cold/directional/east, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/textured_large, +/area/centcom/syndicate_mothership/control) "Yk" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -4302,35 +4336,6 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_smooth, /area/centcom/syndicate_mothership/control) -"YI" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 9 - }, -/obj/structure/table/glass/plasmaglass, -/obj/machinery/reagentgrinder{ - pixel_x = -5; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/beaker/large{ - pixel_x = -7; - pixel_y = -8 - }, -/obj/item/reagent_containers/cup/beaker/cryoxadone{ - pixel_x = 9; - pixel_y = -7 - }, -/obj/structure/sign/poster/contraband/lizard{ - pixel_x = -32 - }, -/obj/structure/sign/poster/contraband/kudzu{ - pixel_y = 32 - }, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 10; - pixel_y = 5 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/centcom/syndicate_mothership/expansion_bioterrorism) "YJ" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 8 @@ -4349,6 +4354,13 @@ /obj/structure/weightmachine/weightlifter, /turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) +"YR" = ( +/obj/machinery/door/window/survival_pod{ + name = "Frosted Door"; + opacity = 1 + }, +/turf/open/floor/iron/freezer, +/area/centcom/syndicate_mothership/control) "YS" = ( /obj/structure/flora/grass/both/style_random, /obj/structure/railing{ @@ -4356,6 +4368,21 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/centcom/syndicate_mothership/control) +"YT" = ( +/obj/structure/table/glass/plasmaglass, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = 15 + }, +/obj/item/grenade/chem_grenade, +/obj/item/stack/cable_coil, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 8; + pixel_y = 14 + }, +/obj/machinery/light/cold/directional/west, +/obj/item/stack/cable_coil, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/centcom/syndicate_mothership/expansion_chemicalwarfare) "YX" = ( /obj/structure/railing{ dir = 6 @@ -4397,6 +4424,22 @@ /obj/structure/flora/grass/both/style_random, /turf/open/misc/asteroid/snow/airless, /area/centcom/syndicate_mothership) +"Zu" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/table/glass/plasmaglass, +/obj/item/folder/white, +/obj/item/pen{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/machinery/light/cold/directional/west, +/obj/item/stack/spacecash/c200{ + pixel_y = 17 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom/syndicate_mothership/control) "Zv" = ( /obj/structure/flora/tree/pine/style_random, /obj/structure/flora/grass/both/style_random, @@ -4406,6 +4449,11 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/centcom/syndicate_mothership/control) +"ZC" = ( +/obj/machinery/light/cold/directional/east, +/obj/item/kirbyplants/random, +/turf/open/floor/mineral/titanium, +/area/centcom/syndicate_mothership/control) "ZE" = ( /obj/effect/turf_decal/stripes/end{ dir = 4 @@ -4435,49 +4483,6 @@ "ZO" = ( /turf/closed/indestructible/opsglass, /area/centcom/syndicate_mothership/expansion_bioterrorism) -"ZV" = ( -/obj/structure/table/glass/plasmaglass, -/obj/item/pen{ - pixel_x = 9; - pixel_y = 18 - }, -/obj/structure/sign/poster/contraband/syndiemoth{ - pixel_x = -32 - }, -/obj/item/storage/box/beakers{ - pixel_x = -4; - pixel_y = 17 - }, -/obj/item/storage/box/syringes{ - pixel_x = 4; - pixel_y = 17 - }, -/obj/item/assembly/igniter{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/assembly/igniter{ - pixel_x = 7; - pixel_y = 1 - }, -/obj/item/assembly/igniter{ - pixel_x = 7; - pixel_y = -3 - }, -/obj/item/assembly/timer{ - pixel_x = -6; - pixel_y = 3 - }, -/obj/item/assembly/timer{ - pixel_x = -6; - pixel_y = -1 - }, -/obj/item/assembly/timer{ - pixel_x = -6; - pixel_y = -5 - }, -/turf/open/floor/mineral/titanium/tiled/yellow, -/area/centcom/syndicate_mothership/expansion_chemicalwarfare) "ZW" = ( /obj/structure/lattice/catwalk, /obj/effect/turf_decal/stripes/line, @@ -4766,8 +4771,8 @@ nQ AR BR Sm -nh -ZV +YT +Hf dx nQ Ox @@ -4776,7 +4781,7 @@ Ox xu xu xu -xc +yZ xu RT fk @@ -4876,7 +4881,7 @@ DZ DZ DZ xu -YI +US HD oi MH @@ -5069,7 +5074,7 @@ sU sU Ox nQ -sY +fd BE Tz bU @@ -5176,13 +5181,13 @@ FG KD qX qX -Vb +rD nQ DZ Ta DZ xu -vG +ll Ph Jq gV @@ -5280,9 +5285,9 @@ iO Mt EV nQ -yG -Ow -LK +bv +kY +Sx ZO XT xg @@ -5375,7 +5380,7 @@ sU sU Ox nQ -kN +UN yf yf yf @@ -5383,7 +5388,7 @@ yf na PD zE -TY +to lt ws Wz @@ -5485,10 +5490,10 @@ Ge Ge xf zE -TY +to lt ZO -aC +bg mb Mv nL @@ -5581,14 +5586,14 @@ Ye nQ nQ AW -DI -ET -ss +jY +dk +Mq hN PD zE -TY -yP +to +RV RD RD RD @@ -5688,16 +5693,16 @@ nQ nQ nQ nQ -GX -TY -JL +Bi +to +pM RD SD So -jd -lH -rX -OR +RG +Mk +aT +QK RD RD RD @@ -5785,22 +5790,22 @@ ub vX DZ oW -do +vm yK -mt +Zu In VK zE -TY +to lt FM wM ee yp -zJ +CE VF If -fE +bz lC yb Uq @@ -5887,13 +5892,13 @@ PN qO DZ iA -tC +CC Zg pU lt XQ zE -TY +to lt Lu ae @@ -5905,7 +5910,7 @@ LF cA RD PM -qc +jn RD Ox sU @@ -5988,14 +5993,14 @@ Bm uT PN DZ -bE -yy +ku +HE rS iH Bn VK zE -TY +to lt FM iL @@ -6096,9 +6101,9 @@ DZ ek ek ek -Vr -cQ -sz +vs +SP +of RD Gf gh @@ -6106,7 +6111,7 @@ yi Gf LY te -aR +uJ kW oy oy @@ -6192,9 +6197,9 @@ VK VK DZ aM -ga +gn Cf -nb +BM ek qs ek @@ -6205,7 +6210,7 @@ RD NH Tl nR -VA +IG AA ZG Oh @@ -6293,7 +6298,7 @@ VK VK iX DZ -cC +mh uX uX uX @@ -6305,9 +6310,9 @@ Yx JR RD Ns -fo -VW -ts +Cd +rp +MR Yk XV sj @@ -6398,9 +6403,9 @@ Lx uX uX uX -gI +oJ ek -mG +le ek zp Yx @@ -6500,7 +6505,7 @@ DZ gE my uX -zN +hG ek Id ek @@ -6508,13 +6513,13 @@ ZE Yx dN DZ -fu -Pj -fH -Bk -GV +KK +YR +De +Qw +XH gs -xU +bJ RD RD RD @@ -6610,13 +6615,13 @@ DZ GF DZ DZ -fu -XD +KK +ck IQ bo bo -NM -NM +zV +zV DZ Ox Ox @@ -6809,7 +6814,7 @@ ld ld KH Ez -Jz +Rw px px Qr @@ -6820,7 +6825,7 @@ tc mJ DY lQ -Pf +Ru VK KA ZL @@ -7019,11 +7024,11 @@ Wp kF YF DZ -SY +EZ HJ kX HJ -lm +Ui El VK YZ @@ -7216,17 +7221,17 @@ mK er TS DZ -SJ +Uk Wp Wp -Pi +Et DZ Sv DZ KW gS Ca -pj +gi KW DZ To @@ -7315,8 +7320,8 @@ bC DZ OS TG -jT -zW +hS +RY DZ Dy Wp @@ -7325,11 +7330,11 @@ Qr Ct pf DZ -jq +jw Ek Ca dq -dI +oz DZ YZ Eo @@ -7428,7 +7433,7 @@ DZ ad DZ pD -hc +oa Ca wG pD @@ -7931,7 +7936,7 @@ uT uT VK qp -DN +pV Ms Oi VK @@ -8033,7 +8038,7 @@ uT PN VK qp -eo +bH VC Oi VK @@ -8339,7 +8344,7 @@ uT uT VK qp -jf +Mr oK Oi VK @@ -8441,7 +8446,7 @@ uT uT VK qp -DN +pV Ms Oi VK @@ -8948,7 +8953,7 @@ VK VK VK DZ -Cm +ts GI IM wG @@ -9044,12 +9049,12 @@ qw qw qw ng -hb -FR +OR +GC TC TC -FR -hb +GC +OR ZZ Me wc @@ -9147,10 +9152,10 @@ qw qw ng qJ -FR +GC TC TC -FR +GC qJ ZZ Me @@ -9246,7 +9251,7 @@ uT bW qw qw -pM +gv DZ DZ VK @@ -9254,7 +9259,7 @@ Xv KE VK DZ -qL +oM ij zH wG @@ -9350,7 +9355,7 @@ qw qw qw VK -eh +AJ ay so uX @@ -9474,7 +9479,7 @@ Vm WC XC VK -sl +SN VK mV WC @@ -9555,14 +9560,14 @@ qw qw AN LS -cc +Cr uX ZH -RX +KP DZ Fp go -pi +cr wG AL DZ @@ -9654,13 +9659,13 @@ uT bW Zk qw -pM +gv DZ DZ DZ js sQ -aH +EG DZ DZ qp @@ -9765,19 +9770,19 @@ DZ DZ DZ pK -EJ +Qq VK ZZ ZZ dn qN qN -ao +Nz Wu ov or zE -sl +SN Ov Ov Ov @@ -9860,13 +9865,13 @@ qw qw qw VH -gM +SH DZ WU dO OO DZ -NA +KO FN VK ZZ @@ -9964,7 +9969,7 @@ qw Py sp DZ -Ul +tB ol cT DZ @@ -10064,7 +10069,7 @@ qw qw qw Rs -wy +IK DZ Ld ol @@ -10081,7 +10086,7 @@ au LB iV ov -Nr +QP DZ Ox sq @@ -10168,7 +10173,7 @@ qw VH ZZ DZ -Rf +Wl Ib Ib en @@ -10268,11 +10273,11 @@ qw UE Sg Py -xs +Dn DZ Ld XL -pF +oq VK ZZ ZZ @@ -10482,13 +10487,13 @@ Zt VK qw VK -oN +ZC pr ya PF ya oD -Et +Yi DZ DZ DZ @@ -10684,7 +10689,7 @@ HW HW tJ VK -Hv +Or VK Ho VK diff --git a/_maps/templates/medium_shuttle4.dmm b/_maps/templates/medium_shuttle4.dmm index 0071a71a1e99..67a5617da6b5 100644 --- a/_maps/templates/medium_shuttle4.dmm +++ b/_maps/templates/medium_shuttle4.dmm @@ -54,7 +54,7 @@ /turf/open/floor/oldshuttle, /area/ruin/powered/shuttle/medium_4) "r" = ( -/obj/machinery/power/generator, +/obj/machinery/power/thermoelectric_generator, /turf/open/floor/oldshuttle, /area/ruin/powered/shuttle/medium_4) "s" = ( diff --git a/_maps/virtual_domains/ash_drake.dmm b/_maps/virtual_domains/ash_drake.dmm index 50fbac8696ab..6056136a278a 100644 --- a/_maps/virtual_domains/ash_drake.dmm +++ b/_maps/virtual_domains/ash_drake.dmm @@ -21,7 +21,7 @@ /obj/machinery/light/small/blacklight/directional/south, /obj/effect/baseturf_helper/virtual_domain, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/virtual_domain/powered) +/area/virtual_domain) "i" = ( /obj/structure/marker_beacon/jade, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, @@ -35,7 +35,7 @@ /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) "q" = ( -/mob/living/simple_animal/hostile/megafauna/dragon/virtual_domain, +/mob/living/simple_animal/hostile/megafauna/dragon, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) "s" = ( diff --git a/_maps/virtual_domains/beach_bar.dmm b/_maps/virtual_domains/beach_bar.dmm index b9a7990e454f..6d0420d9b3d9 100644 --- a/_maps/virtual_domains/beach_bar.dmm +++ b/_maps/virtual_domains/beach_bar.dmm @@ -1,4 +1,11 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ac" = ( +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/mayonnaise, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/turf/open/floor/wood, +/area/virtual_domain/powered) "ag" = ( /turf/open/floor/carpet/red, /area/virtual_domain/powered) @@ -15,15 +22,6 @@ /obj/machinery/grill, /turf/open/floor/wood, /area/virtual_domain/powered) -"ax" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain{ - pixel_y = 7; - pixel_x = 4 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain, -/turf/open/floor/wood, -/area/virtual_domain/powered) "aE" = ( /turf/open/floor/pod/light, /area/virtual_domain/powered) @@ -36,6 +34,9 @@ /obj/item/stack/sheet/mineral/coal/ten, /turf/open/floor/plating, /area/virtual_domain/powered) +"bd" = ( +/turf/open/floor/iron/grimy, +/area/virtual_domain/powered) "bf" = ( /mob/living/basic/crab{ name = "Jonny" @@ -119,6 +120,15 @@ }, /turf/open/floor/wood, /area/virtual_domain/powered) +"do" = ( +/obj/item/food/meat/rawbacon, +/obj/item/food/meat/rawbacon, +/obj/item/food/meat/rawcutlet, +/obj/item/food/meat/rawcutlet, +/obj/item/food/meat/slab/rawcrab, +/obj/item/food/meat/slab/rawcrab, +/turf/open/floor/wood, +/area/virtual_domain/powered) "dx" = ( /obj/effect/turf_decal/sand, /obj/effect/turf_decal/stripes/asteroid/line{ @@ -149,35 +159,31 @@ /obj/machinery/light/directional/west, /turf/open/floor/pod/light, /area/virtual_domain/powered) -"fN" = ( +"gh" = ( +/obj/structure/flora/bush/stalky/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/water/beach, +/area/virtual_domain/powered) +"gl" = ( +/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, +/area/lavaland/surface/outdoors/virtual_domain) +"gx" = ( /obj/structure/table/wood, /obj/item/reagent_containers/pill/happy, /obj/item/toy/figure/bartender{ pixel_x = -8; pixel_y = -1 }, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain{ - pixel_y = 8; - pixel_x = 5 +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/pina_colada{ + pixel_y = 5; + pixel_x = 6 }, /turf/open/floor/wood, /area/virtual_domain/powered) -"gh" = ( -/obj/structure/flora/bush/stalky/style_random, -/obj/structure/flora/bush/sparsegrass/style_random, -/turf/open/water/beach, -/area/virtual_domain/powered) -"gl" = ( -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) "hk" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/pod/light, /area/virtual_domain/powered) -"hy" = ( -/obj/machinery/light/directional/south, -/turf/open/misc/beach/sand/coastline_b, -/area/virtual_domain/powered) "hE" = ( /obj/structure/sign/departments/restroom/directional/east, /turf/open/floor/wood, @@ -188,13 +194,6 @@ }, /turf/open/floor/wood, /area/virtual_domain/powered) -"is" = ( -/obj/effect/turf_decal/sand, -/obj/item/coin/gold, -/obj/structure/railing, -/obj/machinery/media/jukebox, -/turf/open/floor/sepia, -/area/virtual_domain/powered) "iz" = ( /turf/closed/indestructible/binary, /area/lavaland/surface/outdoors/virtual_domain) @@ -217,6 +216,10 @@ /obj/structure/flora/rock/pile/jungle/style_random, /turf/open/misc/beach/sand, /area/virtual_domain/powered) +"js" = ( +/obj/machinery/light/directional/south, +/turf/open/misc/beach/sand/coastline_b, +/area/virtual_domain/powered) "jy" = ( /obj/effect/turf_decal/sand{ density = 1 @@ -276,21 +279,25 @@ /obj/item/canvas/twentythree_twentythree, /turf/open/misc/beach/sand, /area/virtual_domain/powered) +"nO" = ( +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/virtual_domain/powered) "nP" = ( /obj/item/stack/sheet/iron/fifty, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/virtual_domain/powered) +"oy" = ( +/obj/effect/mob_spawn/ghost_role/human/bartender{ + dir = 4 + }, +/turf/open/floor/wood, +/area/virtual_domain/powered) "oP" = ( /obj/structure/table/wood, /obj/machinery/reagentgrinder, /turf/open/floor/wood, /area/virtual_domain/powered) -"pi" = ( -/obj/machinery/vending/cigarette/beach, -/obj/effect/turf_decal/sand, -/turf/open/floor/iron, -/area/virtual_domain/powered) "pr" = ( /turf/template_noop, /area/template_noop) @@ -306,13 +313,6 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/misc/beach/sand, /area/virtual_domain/powered) -"qd" = ( -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/mayonnaise, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/turf/open/floor/wood, -/area/virtual_domain/powered) "qR" = ( /obj/effect/spawner/structure/window, /obj/structure/curtain, @@ -325,15 +325,6 @@ }, /turf/open/misc/beach/sand, /area/virtual_domain/powered) -"ra" = ( -/obj/item/food/meat/rawbacon, -/obj/item/food/meat/rawbacon, -/obj/item/food/meat/rawcutlet, -/obj/item/food/meat/rawcutlet, -/obj/item/food/meat/slab/rawcrab, -/obj/item/food/meat/slab/rawcrab, -/turf/open/floor/wood, -/area/virtual_domain/powered) "rc" = ( /obj/machinery/light/directional/east, /turf/open/floor/wood, @@ -350,10 +341,6 @@ /obj/item/canvas/twentythree_twentythree, /turf/open/misc/beach/sand, /area/virtual_domain/powered) -"rs" = ( -/obj/machinery/light/directional/east, -/turf/open/misc/beach/sand/coastline_b, -/area/virtual_domain/powered) "rT" = ( /obj/item/toy/seashell, /turf/open/misc/beach/sand, @@ -481,6 +468,9 @@ "xw" = ( /turf/open/floor/pod/dark, /area/virtual_domain/powered) +"xz" = ( +/turf/open/misc/beach/sand/coastline_b, +/area/virtual_domain/powered) "xJ" = ( /obj/structure/closet/cabinet, /obj/item/storage/backpack/duffelbag, @@ -504,6 +494,11 @@ /obj/item/clothing/glasses/sunglasses, /turf/open/floor/wood, /area/virtual_domain/powered) +"xT" = ( +/obj/machinery/vending/cigarette/beach, +/obj/effect/turf_decal/sand, +/turf/open/floor/iron, +/area/virtual_domain/powered) "xW" = ( /turf/open/space/basic, /area/space) @@ -546,15 +541,6 @@ /obj/machinery/food_cart, /turf/open/misc/beach/sand, /area/virtual_domain/powered) -"yx" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain{ - pixel_x = -4; - pixel_y = 8 - }, -/turf/open/floor/wood, -/area/virtual_domain/powered) "yB" = ( /obj/item/instrument/guitar, /turf/open/floor/carpet/blue, @@ -567,6 +553,12 @@ /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/carpet/red, /area/virtual_domain/powered) +"zc" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/misc/beach/sand/coastline_b, +/area/virtual_domain/powered) "zw" = ( /obj/structure/punching_bag, /turf/open/floor/pod/dark, @@ -575,6 +567,10 @@ /obj/structure/marker_beacon/indigo, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) +"zQ" = ( +/obj/machinery/light/directional/east, +/turf/open/misc/beach/sand/coastline_b, +/area/virtual_domain/powered) "zU" = ( /obj/structure/flora/rock/pile/style_random, /turf/open/misc/beach/sand, @@ -606,15 +602,6 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/virtual_domain/powered) -"AS" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/misc/beach/sand/coastline_b, -/area/virtual_domain/powered) -"AZ" = ( -/turf/open/misc/beach/sand/coastline_b, -/area/virtual_domain/powered) "Br" = ( /obj/structure/table/wood/poker, /obj/item/toy/cards/deck/cas{ @@ -668,15 +655,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/wood, /area/virtual_domain/powered) -"CW" = ( -/obj/effect/turf_decal/sand, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/obj/structure/railing, -/turf/open/floor/sepia, -/area/virtual_domain/powered) "Db" = ( /obj/machinery/barsign/all_access, /turf/closed/wall/mineral/wood/nonmetal, @@ -760,13 +738,28 @@ /obj/item/storage/medkit/brute, /turf/open/floor/wood, /area/virtual_domain/powered) -"GQ" = ( -/turf/open/floor/iron/grimy, +"Hl" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/structure/railing, +/turf/open/floor/sepia, /area/virtual_domain/powered) "Hs" = ( /obj/machinery/shower/directional/west, /turf/open/floor/iron/white, /area/virtual_domain/powered) +"Hu" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/pina_colada{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/pina_colada, +/turf/open/floor/wood, +/area/virtual_domain/powered) "HF" = ( /obj/machinery/deepfryer, /turf/open/floor/wood, @@ -886,11 +879,6 @@ /obj/structure/sign/warning/gas_mask/directional/north, /turf/open/misc/beach/sand, /area/virtual_domain/powered) -"OO" = ( -/obj/effect/turf_decal/sand, -/obj/structure/railing, -/turf/open/floor/sepia, -/area/virtual_domain/powered) "OR" = ( /obj/machinery/light/directional/south, /turf/open/misc/beach/sand, @@ -919,6 +907,13 @@ /obj/machinery/griddle, /turf/open/floor/wood, /area/virtual_domain/powered) +"Qm" = ( +/obj/effect/turf_decal/sand, +/obj/item/coin/gold, +/obj/structure/railing, +/obj/machinery/media/jukebox, +/turf/open/floor/sepia, +/area/virtual_domain/powered) "Qu" = ( /obj/structure/curtain, /turf/open/floor/iron/white, @@ -1018,15 +1013,18 @@ /obj/structure/dresser, /turf/open/floor/wood, /area/virtual_domain/powered) -"Ww" = ( -/turf/open/water/beach, -/area/virtual_domain/powered) -"WC" = ( -/obj/effect/mob_spawn/ghost_role/human/bartender{ - dir = 4 +"Wr" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/pina_colada, +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/pina_colada{ + pixel_x = -5; + pixel_y = 5 }, /turf/open/floor/wood, /area/virtual_domain/powered) +"Ww" = ( +/turf/open/water/beach, +/area/virtual_domain/powered) "WL" = ( /obj/machinery/light/directional/north, /turf/open/floor/wood, @@ -1072,6 +1070,11 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/virtual_domain/powered) +"Yz" = ( +/obj/effect/turf_decal/sand, +/obj/structure/railing, +/turf/open/floor/sepia, +/area/virtual_domain/powered) "YI" = ( /obj/machinery/door/airlock/maintenance{ name = "Supply Room" @@ -1553,7 +1556,7 @@ bf Bw Fn Ev -WC +oy iR kG di @@ -1683,9 +1686,9 @@ qc Fn Fn SD -ax -yx -fN +Hu +Wr +gx Fn Fn Al @@ -1729,7 +1732,7 @@ dx kn kn kn -CW +Hl Fn Al gl @@ -1755,7 +1758,7 @@ BJ kT Fn as -pi +xT Ir IP YN @@ -1772,7 +1775,7 @@ uU lS lS lS -OO +Yz Fn Al gl @@ -1815,7 +1818,7 @@ uU lS NX lS -is +Qm Fn Al gl @@ -1858,7 +1861,7 @@ uU lS lS lS -OO +Yz Fn Al gl @@ -1901,7 +1904,7 @@ uU uU uU uU -OO +Yz Fn Fn gl @@ -1939,13 +1942,13 @@ TJ wb wD wD -AS -AS -AS -AS -AS -AS -hy +zc +zc +zc +zc +zc +zc +js Fn gl gl @@ -1982,13 +1985,13 @@ yl ag wD wD -AZ +xz KZ Ww Ww Ww cG -AZ +xz Fn Al Al @@ -2017,7 +2020,7 @@ TG TG TG TG -ra +do BM wD wD @@ -2025,13 +2028,13 @@ Au wD rT wD -AZ +xz Ww Ww Ww Ww Ww -AZ +xz Fn Al iz @@ -2047,7 +2050,7 @@ iz (23,1,1) = {" iz Al -xb +nO Fn Cb wD @@ -2056,7 +2059,7 @@ wD BM HF TG -qd +ac BM aw TG @@ -2068,13 +2071,13 @@ YJ YJ wD wD -AZ +xz Ww Ww Ww Ww Ww -AZ +xz Fn Al iz @@ -2090,7 +2093,7 @@ xW (24,1,1) = {" iz Al -xb +nO Fn wD Gz @@ -2111,13 +2114,13 @@ bQ wD wD wD -AZ +xz Ww Ww KZ KZ Ww -hy +js Fn Al iz @@ -2133,7 +2136,7 @@ xW (25,1,1) = {" iz Al -xb +nO Fn OK Gz @@ -2154,13 +2157,13 @@ XP yB wD wD -AZ +xz KZ Ww KZ gh Ww -AZ +xz Fn Al iz @@ -2176,7 +2179,7 @@ xW (26,1,1) = {" iz Al -xb +nO Fn Nr wD @@ -2197,13 +2200,13 @@ XL wD wD wD -AZ +xz Ww Ww Ww Ww Ww -AZ +xz Fn Al iz @@ -2240,13 +2243,13 @@ xq jy wD wD -AZ +xz Ww cG Ww Ww KZ -AZ +xz Fn Al iz @@ -2283,13 +2286,13 @@ CA Uh wD qW -AZ +xz Ww Ww Ww Ww Ww -hy +js Fn Al iz @@ -2325,14 +2328,14 @@ wD wD wD Jt -AZ -AZ -rs -AZ -AZ -AZ -AZ -AZ +xz +xz +zQ +xz +xz +xz +xz +xz Fn Al iz @@ -2628,7 +2631,7 @@ YI Fn Fn Fn -GQ +bd aE aE aE diff --git a/_maps/virtual_domains/blood_drunk_miner.dmm b/_maps/virtual_domains/blood_drunk_miner.dmm index c3369a1c822d..bf673bd6dfa0 100644 --- a/_maps/virtual_domains/blood_drunk_miner.dmm +++ b/_maps/virtual_domains/blood_drunk_miner.dmm @@ -27,7 +27,7 @@ /obj/machinery/light/small/blacklight/directional/south, /obj/effect/baseturf_helper/virtual_domain, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/virtual_domain/powered) +/area/virtual_domain) "i" = ( /obj/structure/stone_tile{ dir = 4 @@ -171,7 +171,7 @@ /obj/structure/stone_tile/surrounding/cracked{ dir = 6 }, -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/virtual_domain, +/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner, /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors/virtual_domain) "T" = ( diff --git a/_maps/virtual_domains/breeze_bay.dmm b/_maps/virtual_domains/breeze_bay.dmm new file mode 100644 index 000000000000..7c86ac2b75c6 --- /dev/null +++ b/_maps/virtual_domains/breeze_bay.dmm @@ -0,0 +1,832 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain/powered) +"d" = ( +/obj/structure/chair/wood, +/turf/open/floor/wood/large, +/area/virtual_domain/powered) +"e" = ( +/turf/open/floor/carpet/red, +/area/virtual_domain/powered) +"g" = ( +/obj/item/toy/beach_ball/branded, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"i" = ( +/turf/open/water/beach, +/area/virtual_domain/powered) +"k" = ( +/obj/effect/landmark/bitrunning/loot_signal, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"m" = ( +/obj/item/fishing_rod{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/fishing_rod, +/obj/item/fishing_rod{ + pixel_y = 5; + pixel_x = -5 + }, +/obj/structure/table/wood, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"o" = ( +/obj/structure/flora/tree/jungle/style_5, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"p" = ( +/turf/open/floor/carpet/blue, +/area/virtual_domain/powered) +"s" = ( +/obj/structure/fluff/beach_umbrella/cap, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"t" = ( +/obj/structure/fluff/beach_umbrella/syndi, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"v" = ( +/obj/effect/baseturf_helper/virtual_domain, +/obj/effect/landmark/bitrunning/safehouse_spawn, +/turf/template_noop, +/area/virtual_domain/safehouse) +"y" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"z" = ( +/mob/living/basic/crab, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"B" = ( +/obj/structure/flora/tree/jungle/style_6, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"C" = ( +/obj/structure/flora/tree/jungle/style_2, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"D" = ( +/turf/open/floor/carpet/green, +/area/virtual_domain/powered) +"F" = ( +/obj/structure/fluff/beach_umbrella/engine, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"G" = ( +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"H" = ( +/obj/structure/flora/tree/jungle/style_4, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"I" = ( +/turf/template_noop, +/area/virtual_domain/safehouse) +"J" = ( +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"K" = ( +/obj/structure/flora/tree/jungle, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"L" = ( +/obj/item/fishing_line, +/obj/item/fishing_hook, +/obj/item/fishing_hook, +/obj/item/fishing_hook, +/obj/structure/closet/crate, +/obj/item/bait_can/worm, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"O" = ( +/obj/structure/flora/rock/style_random, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"P" = ( +/turf/open/floor/holofloor/beach/coast_t, +/area/virtual_domain/powered) +"Q" = ( +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water/beach, +/area/virtual_domain/powered) +"R" = ( +/obj/structure/closet/crate/freezer{ + name = "Cooler" + }, +/obj/item/reagent_containers/cup/glass/ice, +/obj/item/reagent_containers/cup/glass/colocup, +/obj/item/reagent_containers/cup/glass/colocup, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + desc = "Beer advertised to be the best in space."; + name = "Masterbrand Beer" + }, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + desc = "Beer advertised to be the best in space."; + name = "Masterbrand Beer" + }, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + desc = "Beer advertised to be the best in space."; + name = "Masterbrand Beer" + }, +/obj/item/reagent_containers/cup/glass/bottle/beer/light, +/obj/item/reagent_containers/cup/glass/bottle/beer/light, +/obj/item/reagent_containers/cup/glass/bottle/beer/light, +/obj/item/clothing/head/soft/fishing_hat, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"S" = ( +/obj/structure/flora/tree/jungle/style_3, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"U" = ( +/obj/structure/flora/tree/palm/style_random, +/turf/open/misc/beach/sand, +/area/virtual_domain/powered) +"X" = ( +/turf/open/floor/wood/large, +/area/virtual_domain/powered) +"Z" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/indestructible/binary, +/area/virtual_domain/powered) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +"} +(2,1,1) = {" +a +K +G +y +J +J +J +J +J +J +J +z +P +i +i +i +i +i +i +i +Q +i +i +i +a +"} +(3,1,1) = {" +a +J +O +J +J +I +I +I +I +I +v +J +P +Q +i +i +i +i +i +i +i +i +i +i +a +"} +(4,1,1) = {" +a +J +C +J +J +I +I +I +I +I +I +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(5,1,1) = {" +a +J +y +J +J +I +I +I +I +I +I +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(6,1,1) = {" +a +S +J +J +J +I +I +I +I +I +I +y +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(7,1,1) = {" +a +G +G +J +J +I +I +I +I +I +I +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(8,1,1) = {" +a +J +H +g +J +I +I +I +I +I +I +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(9,1,1) = {" +a +G +y +J +J +I +I +I +I +I +I +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(10,1,1) = {" +a +o +J +J +J +J +J +J +J +J +J +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(11,1,1) = {" +a +J +J +J +J +J +J +J +J +J +J +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(12,1,1) = {" +a +J +B +y +J +J +J +U +J +J +J +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(13,1,1) = {" +a +J +J +J +J +s +J +J +J +J +k +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(14,1,1) = {" +a +K +y +J +J +p +p +J +J +J +m +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(15,1,1) = {" +a +J +J +J +J +t +J +J +J +J +L +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(16,1,1) = {" +a +J +C +J +J +e +e +J +J +J +J +J +P +i +i +i +i +X +X +i +i +i +i +i +a +"} +(17,1,1) = {" +a +G +J +J +J +F +J +J +J +J +J +J +P +i +i +i +i +X +X +i +i +i +i +i +a +"} +(18,1,1) = {" +a +S +G +J +J +D +D +J +J +J +J +J +X +X +X +X +X +X +X +X +X +X +i +i +a +"} +(19,1,1) = {" +a +J +J +J +J +R +J +J +J +J +J +J +X +X +X +X +X +X +X +X +d +X +i +i +a +"} +(20,1,1) = {" +a +J +H +J +J +J +J +J +J +J +J +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(21,1,1) = {" +a +J +O +J +J +J +J +J +J +J +J +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(22,1,1) = {" +a +o +J +y +J +J +J +J +J +U +J +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(23,1,1) = {" +a +J +G +J +J +J +J +J +J +y +J +J +P +i +i +i +i +i +i +i +i +i +Q +i +a +"} +(24,1,1) = {" +a +J +B +J +z +J +y +J +J +J +J +J +P +i +Q +i +i +i +i +i +i +i +i +i +a +"} +(25,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/virtual_domains/bubblegum.dmm b/_maps/virtual_domains/bubblegum.dmm index 3381b1735398..a801fa491874 100644 --- a/_maps/virtual_domains/bubblegum.dmm +++ b/_maps/virtual_domains/bubblegum.dmm @@ -29,7 +29,7 @@ /obj/machinery/light/small/blacklight/directional/south, /obj/effect/baseturf_helper/virtual_domain, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/virtual_domain/powered) +/area/virtual_domain) "x" = ( /obj/structure/marker_beacon/olive, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, @@ -43,7 +43,7 @@ /turf/template_noop, /area/virtual_domain/safehouse) "C" = ( -/mob/living/simple_animal/hostile/megafauna/bubblegum/virtual_domain, +/mob/living/simple_animal/hostile/megafauna/bubblegum, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) "F" = ( @@ -134,6 +134,16 @@ F F F F +F +F +F +F +F +F +F +F +F +F R "} (2,1,1) = {" @@ -182,16 +192,492 @@ Z Z Z Z -F -"} -(3,1,1) = {" -F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(3,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(4,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(5,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(6,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(7,1,1) = {" +F +Z +Z +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(8,1,1) = {" +F +Z +Z +F +Z +Z +Z +a +a +Z +Z +Z +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +Z +a +a +a +a +a +a +a +a +Z +Z +a +a +a +a +a +a +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(9,1,1) = {" +F +Z +Z +F +Z +Z +Z +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +Z +Z +Z +Z +F +"} +(10,1,1) = {" +F +Z +Z +Z +Z +Z +Z +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +p +Z +Z +Z +Z +F +Z +F +"} +(11,1,1) = {" +F +Z +Z +Z +Z +Z Z a a -Z -Z -Z a a a @@ -208,9 +694,6 @@ a a a a -Z -Z -Z a a a @@ -219,22 +702,38 @@ a a a a -Z -Z +a +G +a +a +a +a +a a a a a a a +a +p +p +Z Z Z Z F +Z +F "} -(4,1,1) = {" +(12,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -249,6 +748,7 @@ a a a a +x a a a @@ -270,19 +770,28 @@ a a a a +Z a a a a -a -a -a +p +Z +Z +Z +Z +Z Z F "} -(5,1,1) = {" +(13,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -319,24 +828,38 @@ a a a a +Z +Z a a a -a -a -p +Z +Z +Z +Z +Z +Z Z F "} -(6,1,1) = {" +(14,1,1) = {" F Z +Z +Z +Z +Z +Z a a a a a a +p +p +p +p a a a @@ -358,9 +881,6 @@ a a a a -G -a -a a a a @@ -371,19 +891,34 @@ a a a a -p -p +Z +Z +Z +Z +Z +Z Z F "} -(7,1,1) = {" +(15,1,1) = {" F Z +Z +Z +Z +Z +Z +Z a a a a a +Z +Z +Z +p +a a a a @@ -393,7 +928,6 @@ a a a a -x a a a @@ -416,36 +950,90 @@ a a a Z +Z +Z +Z +Z +Z +Z +F +"} +(16,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +a a a a a -p Z -F -"} -(8,1,1) = {" -F Z +Z +p +a +a +a +a +a +a +a +a +a a a a a a a +Z +Z +a +a a a a a a a +p +p +a +a +a a a +Z +Z +Z +Z +Z +Z +F +"} +(17,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z a a a a a +p +Z +p +p a a a @@ -468,23 +1056,39 @@ Z a a a +a +a +a +a +p +a +a +a +a +a +Z +Z +Z +Z Z Z F "} -(9,1,1) = {" +(18,1,1) = {" F Z +Z +Z +Z +Z +Z +Z a a a a a a -p -p -p -p a a a @@ -504,11 +1108,15 @@ a a a a +Z +Z +Z a a a a a +M a a a @@ -518,21 +1126,27 @@ a a Z Z +Z +Z +Z +Z F "} -(10,1,1) = {" +(19,1,1) = {" F Z Z +Z +Z +Z +Z +a +a a a a a a -Z -Z -Z -p a a a @@ -552,6 +1166,10 @@ a a a a +Z +Z +Z +a a a a @@ -566,21 +1184,31 @@ a a Z Z +Z +Z +Z +Z F "} -(11,1,1) = {" +(20,1,1) = {" F Z Z +Z +Z +Z +Z +a +a +a +a +a +a a a a a a -Z -Z -Z -p a a a @@ -596,8 +1224,6 @@ a a a a -Z -Z a a a @@ -606,29 +1232,35 @@ a a a a -p -p +a +c a a a a a +a +Z +Z +Z +Z +Z Z F "} -(12,1,1) = {" +(21,1,1) = {" F Z Z +Z +Z +Z +Z a a a a a -p -Z -p -p a a a @@ -645,9 +1277,10 @@ a a a a +I +a +a a -Z -Z a a a @@ -655,19 +1288,32 @@ a a a a -p a a a a a +a +a +a +a +a +Z +Z +Z +Z +Z Z F "} -(13,1,1) = {" +(22,1,1) = {" F Z Z +Z +Z +Z +Z a a a @@ -679,6 +1325,10 @@ a a a a +W +a +a +a a a a @@ -693,15 +1343,11 @@ a a a a -Z -Z -Z a a a a a -M a a a @@ -709,12 +1355,23 @@ a a a a +a +Z +Z +Z +Z +Z Z F "} -(14,1,1) = {" +(23,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -741,9 +1398,6 @@ a a a a -Z -Z -Z a a a @@ -757,12 +1411,25 @@ a a a a +a +a +a +Z +Z +Z +Z +Z Z F "} -(15,1,1) = {" +(24,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -798,24 +1465,35 @@ a a a a -c a a a a a a +a +Z +Z +Z +Z +Z Z F "} -(16,1,1) = {" +(25,1,1) = {" F Z +Z +F +Z +Z +Z a a a a a +z a a a @@ -832,7 +1510,6 @@ a a a a -I a a a @@ -854,11 +1531,21 @@ a a a Z +Z +Z +Z +Z +Z F "} -(17,1,1) = {" +(26,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -870,13 +1557,6 @@ a a a a -W -a -a -a -a -a -a a a a @@ -900,13 +1580,30 @@ a a a a +w +S +S +S +S +S +T a Z +Z +Z +Z +Z +F F "} -(18,1,1) = {" +(27,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -942,19 +1639,29 @@ a a a a +S +S +S +S +S +S a -a -a -a -a -a -a +Z +Z +Z +Z +Z Z F "} -(19,1,1) = {" +(28,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -974,6 +1681,7 @@ a a a a +C a a a @@ -989,27 +1697,29 @@ a a a a +S +S +S +S +S +S a -a -a -a -a -a -a -a +Z +Z +Z +Z +Z Z F "} -(20,1,1) = {" +(29,1,1) = {" F Z -a -a -a -a -a -z -a +Z +Z +Z +Z +Z a a a @@ -1042,15 +1752,33 @@ a a a a +X a a +S +S +S +S +S +S a Z +Z +Z +Z +Z +Z F "} -(21,1,1) = {" +(30,1,1) = {" F Z +Z +Z +Z +Z +Z +a a a a @@ -1085,20 +1813,29 @@ a a a a -w S S S S S -T +S a Z +Z +Z +Z +Z +Z F "} -(22,1,1) = {" +(31,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -1142,11 +1879,21 @@ S S a Z +Z +Z +Z +Z +Z F "} -(23,1,1) = {" +(32,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -1166,7 +1913,6 @@ a a a a -C a a a @@ -1182,19 +1928,30 @@ a a a a +w S S S S S -S +A a Z +Z +Z +Z +Z +Z F "} -(24,1,1) = {" +(33,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -1207,6 +1964,10 @@ a a a a +f +a +a +a a a a @@ -1227,27 +1988,35 @@ a a a a -X a a -S -S -S -S -S -S a +a +a +a +Z +Z +Z +Z +Z Z F "} -(25,1,1) = {" +(34,1,1) = {" F Z +Z +Z +Z +Z +Z +a a a a a a +Z a a a @@ -1263,6 +2032,7 @@ a a a a +r a a a @@ -1278,25 +2048,35 @@ a a a a -S -S -S -S -S -S a +a +a +a +Z +Z +Z +Z +Z Z F "} -(26,1,1) = {" +(35,1,1) = {" F Z +Z +Z +Z +Z +Z a a a a a a +Z +Z +Z a a a @@ -1326,24 +2106,37 @@ a a a a -S -S -S -S -S -S a +a +a +a +Z +Z +Z +Z +Z Z F "} -(27,1,1) = {" +(36,1,1) = {" F Z +Z +Z +Z +Z +Z +a a a a a a +Z +Z +Z +a +a a a a @@ -1373,20 +2166,24 @@ a a a a -w -S -S -S -S -S -A a +a +Z +Z +Z +Z +Z Z F "} -(28,1,1) = {" +(37,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -1394,12 +2191,12 @@ a a a a +Z a a a a a -f a a a @@ -1430,12 +2227,21 @@ a a a Z +Z +Z +Z +Z +Z F "} -(29,1,1) = {" +(38,1,1) = {" F Z -a +Z +Z +Z +Z +Z a a a @@ -1457,7 +2263,6 @@ a a a a -r a a a @@ -1471,6 +2276,8 @@ a a a a +d +a a a a @@ -1478,20 +2285,29 @@ a a a Z +Z +Z +Z +Z +Z F "} -(30,1,1) = {" +(39,1,1) = {" F Z +Z +Z +Z +Z +Z +Z a a a a +Z a a -Z -Z -Z a a a @@ -1512,6 +2328,7 @@ a a a a +Z a a a @@ -1526,22 +2343,28 @@ a a a Z +Z +Z +Z +Z +Z F "} -(31,1,1) = {" +(40,1,1) = {" F Z +Z +Z +Z +Z +Z +Z a a a a a a -Z -Z -Z -a -a a a a @@ -1553,6 +2376,7 @@ a a a a +X a a a @@ -1561,6 +2385,9 @@ a a a a +Z +Z +Z a a a @@ -1574,11 +2401,22 @@ a a a Z +Z +Z +Z +Z +Z F "} -(32,1,1) = {" +(41,1,1) = {" F Z +Z +Z +Z +Z +Z +Z a a a @@ -1586,10 +2424,6 @@ a a a a -Z -a -a -a a a a @@ -1609,6 +2443,9 @@ a a a a +Z +Z +Z a a a @@ -1622,17 +2459,27 @@ a a a Z +Z +Z +Z +Z +Z F "} -(33,1,1) = {" +(42,1,1) = {" +F +Z +Z F Z +Z +Z +Z a a a a a -Z a a a @@ -1661,7 +2508,6 @@ a a a a -d a a a @@ -1670,40 +2516,50 @@ a a a Z +Z +Z +Z +Z +Z +Z F "} -(34,1,1) = {" +(43,1,1) = {" F Z Z -a -a -a -a Z +Z +Z +Z +a a a +p +p a a a a a +g a a a a +Z a a a a a a +p a a a a a -Z a a a @@ -1718,15 +2574,27 @@ a a a Z +Z +Z +Z +Z +Z +Z F "} -(35,1,1) = {" +(44,1,1) = {" F Z Z +Z +Z +Z +Z a a a +p +p a a a @@ -1736,23 +2604,22 @@ a a a a +Z +Z +Z a a a a a -X -a -a +p +p a a a a a a -Z -Z -Z a a a @@ -1766,13 +2633,23 @@ a a a Z +Z +Z +Z +Z +Z F "} -(36,1,1) = {" +(45,1,1) = {" F Z Z +Z +Z +Z +Z a +c a a a @@ -1798,9 +2675,6 @@ a a a a -Z -Z -Z a a a @@ -1813,13 +2687,26 @@ a a a a +a +a +a +Z +Z +Z +Z +Z Z F "} -(37,1,1) = {" +(46,1,1) = {" F Z Z +Z +Z +Z +Z +a a a a @@ -1853,6 +2740,7 @@ a a a a +Y a a a @@ -1862,34 +2750,32 @@ a a Z Z +Z +Z +Z +Z F "} -(38,1,1) = {" +(47,1,1) = {" F Z +Z +Z +Z +Z +Z a a a -p -p -a -a -a -a -a -g -a a a a -Z a a a a a a -p a a a @@ -1908,18 +2794,9 @@ a a a a -Z -Z -F -"} -(39,1,1) = {" -F -Z a a a -p -p a a a @@ -1932,227 +2809,360 @@ a Z Z Z +Z +Z +Z +F +"} +(48,1,1) = {" +F +Z +Z +Z +Z +Z +Z a +Z +Z +Z +Z a a a a -p -p a +Z +Z +Z +Z a a a +Z +Z +Z +Z +Z a a a a a a +Z +Z +Z +Z a a a a a a +Z +Z a a Z +Z +Z +Z +Z +Z +F +"} +(49,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +Z +Z +Z +Z +F +"} +(50,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(51,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z F "} -(40,1,1) = {" +(52,1,1) = {" F Z -a -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Z +Z +Z +Z Z F -"} -(41,1,1) = {" F Z -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -Y -a -a -a -a -a -a -a +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z Z F -"} -(42,1,1) = {" +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z F Z -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Z +Z +Z +Z +Z +Z +Z +Z Z F "} -(43,1,1) = {" +(53,1,1) = {" F Z -a Z Z Z Z -a -a -a -a -a Z Z Z Z -a -a -a Z Z Z Z Z -a -a -a -a -a -a Z Z Z Z -a -a -a -a -a -a Z Z -a -a +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z Z F "} -(44,1,1) = {" +(54,1,1) = {" F Z Z @@ -2191,16 +3201,36 @@ Z Z Z Z +F +Z +Z +Z +Z +Z +Z +Z +Z Z Z Z +F Z Z Z Z F "} -(45,1,1) = {" +(55,1,1) = {" +F +F +F +F +F +F +F +F +F +F F F F diff --git a/_maps/virtual_domains/colossus.dmm b/_maps/virtual_domains/colossus.dmm index a9c3c6e6d79e..fe97dcace428 100644 --- a/_maps/virtual_domains/colossus.dmm +++ b/_maps/virtual_domains/colossus.dmm @@ -30,7 +30,7 @@ /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) "p" = ( -/mob/living/simple_animal/hostile/megafauna/colossus/virtual_domain, +/mob/living/simple_animal/hostile/megafauna/colossus, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) "q" = ( @@ -41,7 +41,7 @@ /obj/machinery/light/small/blacklight/directional/south, /obj/effect/baseturf_helper/virtual_domain, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/virtual_domain/powered) +/area/virtual_domain) "s" = ( /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors/virtual_domain) diff --git a/_maps/virtual_domains/hierophant.dmm b/_maps/virtual_domains/hierophant.dmm index 02b11ad4e1ef..81f8a9f97a73 100644 --- a/_maps/virtual_domains/hierophant.dmm +++ b/_maps/virtual_domains/hierophant.dmm @@ -37,7 +37,7 @@ /turf/closed/indestructible/binary, /area/lavaland/surface/outdoors/virtual_domain) "E" = ( -/mob/living/simple_animal/hostile/megafauna/hierophant/virtual_domain, +/mob/living/simple_animal/hostile/megafauna/hierophant, /turf/open/indestructible/hierophant/two, /area/lavaland/surface/outdoors/virtual_domain) "H" = ( @@ -51,7 +51,7 @@ /obj/machinery/light/small/blacklight/directional/south, /obj/effect/baseturf_helper/virtual_domain, /turf/open/indestructible/hierophant, -/area/virtual_domain/powered) +/area/virtual_domain) "S" = ( /obj/effect/mob_spawn/corpse/human/miner, /turf/open/indestructible/hierophant, diff --git a/_maps/virtual_domains/wendigo.dmm b/_maps/virtual_domains/wendigo.dmm index 17bcb48d688b..dcce722cbbd0 100644 --- a/_maps/virtual_domains/wendigo.dmm +++ b/_maps/virtual_domains/wendigo.dmm @@ -58,7 +58,7 @@ /turf/open/misc/asteroid/snow/ice/icemoon, /area/icemoon/underground/explored/virtual_domain) "H" = ( -/mob/living/simple_animal/hostile/megafauna/wendigo/virtual_domain, +/mob/living/simple_animal/hostile/megafauna/wendigo, /turf/open/indestructible/necropolis{ initial_gas_mix = "ICEMOON_ATMOS" }, diff --git a/_maps/~monkestation/RandomBars/Box/bloody_bar.dmm b/_maps/~monkestation/RandomBars/Box/bloody_bar.dmm new file mode 100644 index 000000000000..7b84c5b35631 --- /dev/null +++ b/_maps/~monkestation/RandomBars/Box/bloody_bar.dmm @@ -0,0 +1,615 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ae" = ( +/obj/machinery/light_switch/directional/west, +/obj/machinery/light/directional/west, +/turf/open/floor/cult, +/area/station/commons/lounge) +"ak" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/cult, +/area/station/commons/lounge) +"bi" = ( +/obj/structure/table/wood/fancy/red, +/obj/item/toy/plush/moth/tyriaplush, +/turf/open/floor/cult, +/area/station/commons/lounge) +"cT" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/cult, +/area/station/commons/lounge) +"em" = ( +/turf/closed/wall/mineral/cult/artificer, +/area/station/service/theater) +"es" = ( +/obj/machinery/computer/slot_machine, +/obj/machinery/light/directional/east, +/turf/open/floor/cult, +/area/station/commons/lounge) +"eu" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/cult, +/area/station/commons/lounge) +"eO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/cult, +/area/station/commons/lounge) +"fa" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/wood/large, +/area/station/service/theater) +"fk" = ( +/obj/structure/chair/wood, +/obj/effect/landmark/start/hangover, +/turf/open/floor/cult, +/area/station/commons/lounge) +"fK" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/cult, +/area/station/commons/lounge) +"gf" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/cult/unruned/glass/friendly{ + name = "Bar" + }, +/turf/open/floor/cult, +/area/station/commons/lounge) +"gA" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/cult, +/area/station/commons/lounge) +"ja" = ( +/obj/machinery/computer/slot_machine, +/turf/open/floor/cult, +/area/station/commons/lounge) +"jf" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/commons/lounge) +"jL" = ( +/obj/structure/table/wood/fancy/red, +/obj/item/instrument/saxophone, +/obj/item/instrument/trombone, +/turf/open/floor/wood/large, +/area/station/service/theater) +"kL" = ( +/turf/template_noop, +/area/template_noop) +"lu" = ( +/obj/machinery/barsign/directional/north, +/turf/open/floor/cult, +/area/station/commons/lounge) +"ng" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/cult, +/area/station/commons/lounge) +"pq" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/commons/lounge) +"qb" = ( +/obj/machinery/media/jukebox, +/obj/machinery/light/directional/north, +/turf/open/floor/cult, +/area/station/commons/lounge) +"rV" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/cult, +/area/station/commons/lounge) +"sW" = ( +/obj/structure/chair/wood, +/turf/open/floor/cult, +/area/station/commons/lounge) +"ta" = ( +/obj/structure/table/wood/fancy/red, +/obj/item/clothing/suit/hooded/cultrobes, +/turf/open/floor/cult, +/area/station/commons/lounge) +"ue" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/cult, +/area/station/commons/lounge) +"uS" = ( +/obj/structure/table/wood/fancy/red, +/turf/open/floor/cult, +/area/station/commons/lounge) +"uV" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/cult, +/area/station/commons/lounge) +"vb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/cult, +/area/station/commons/lounge) +"vj" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/computer/slot_machine, +/turf/open/floor/cult, +/area/station/commons/lounge) +"wp" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/cult, +/area/station/commons/lounge) +"wz" = ( +/obj/structure/sign/poster/contraband/clown/directional/west, +/obj/structure/table/wood/fancy/red, +/obj/item/instrument/accordion, +/turf/open/floor/wood/large, +/area/station/service/theater) +"wM" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/cult, +/area/station/commons/lounge) +"zU" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/machinery/light/small/directional/south, +/turf/open/floor/cult, +/area/station/commons/lounge) +"AZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/cult, +/area/station/commons/lounge) +"Bl" = ( +/turf/open/floor/cult, +/area/station/commons/lounge) +"BO" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/service/theater) +"Dy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/mob/living/carbon/human/species/monkey/punpun, +/turf/open/floor/cult, +/area/station/commons/lounge) +"DC" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/restaurant_portal/restaurant, +/turf/open/floor/cult, +/area/station/commons/lounge) +"DJ" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/cult, +/area/station/commons/lounge) +"DZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/cult, +/area/station/commons/lounge) +"FK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/cult, +/area/station/commons/lounge) +"FQ" = ( +/obj/structure/table/wood/fancy/red, +/obj/item/instrument/guitar{ + pixel_x = -7 + }, +/obj/item/instrument/eguitar{ + pixel_x = 5 + }, +/obj/item/instrument/banjo, +/turf/open/floor/wood/large, +/area/station/service/theater) +"FU" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/cult, +/area/station/commons/lounge) +"Gh" = ( +/turf/closed/wall/mineral/cult/artificer, +/area/station/commons/lounge) +"GT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/cult, +/area/station/commons/lounge) +"Hb" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/service/theater) +"HA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/cult, +/area/station/commons/lounge) +"HQ" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/window/left/directional/north{ + name = "Theater Stage" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/large, +/area/station/service/theater) +"Ie" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/cult, +/area/station/commons/lounge) +"Iy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/cult, +/area/station/commons/lounge) +"KM" = ( +/turf/open/floor/wood/large, +/area/station/service/theater) +"MR" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/cult, +/area/station/commons/lounge) +"Pb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/service/theater) +"Pt" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/light/directional/east, +/turf/open/floor/cult, +/area/station/commons/lounge) +"PC" = ( +/obj/structure/table/wood/fancy/red, +/obj/item/clothing/head/utility/hardhat/cakehat, +/turf/open/floor/cult, +/area/station/commons/lounge) +"QE" = ( +/obj/structure/table/wood/fancy/red, +/obj/item/toy/plush/narplush, +/turf/open/floor/cult, +/area/station/commons/lounge) +"RN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/service/theater) +"Sg" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 + }, +/turf/open/floor/cult, +/area/station/commons/lounge) +"Uu" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/wood/large, +/area/station/service/theater) +"UA" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Service - Theater"; + name = "service camera" + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/wood/large, +/area/station/service/theater) +"UC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/cult, +/area/station/commons/lounge) +"UN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/cult, +/area/station/commons/lounge) +"UO" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/cult, +/area/station/commons/lounge) +"VJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/cult, +/area/station/commons/lounge) +"VT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/large, +/area/station/service/theater) +"WG" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/light/small/directional/east, +/turf/open/floor/cult, +/area/station/commons/lounge) +"WM" = ( +/obj/machinery/firealarm/directional/west, +/obj/structure/musician/piano, +/obj/machinery/light/directional/west, +/turf/open/floor/wood/large, +/area/station/service/theater) +"Yj" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table/wood/fancy/red, +/obj/item/instrument/violin, +/turf/open/floor/wood/large, +/area/station/service/theater) +"ZK" = ( +/obj/machinery/restaurant_portal/bar, +/turf/open/floor/cult, +/area/station/commons/lounge) + +(1,1,1) = {" +Gh +Bl +ue +Bl +DJ +gA +wp +gA +ae +Bl +wM +Bl +Bl +AZ +Bl +Bl +kL +"} +(2,1,1) = {" +Gh +lu +ue +ue +ue +ue +Dy +ue +ue +ue +ue +VJ +UN +ak +ue +ue +kL +"} +(3,1,1) = {" +Gh +Bl +eu +Bl +FU +Ie +ue +Ie +Ie +Bl +FK +eO +ja +vj +es +Sg +kL +"} +(4,1,1) = {" +jf +cT +Bl +Bl +QE +uS +ue +uS +uS +Bl +Bl +zU +em +em +em +em +kL +"} +(5,1,1) = {" +Gh +DC +Bl +Bl +gA +gA +Iy +gA +wp +Bl +UO +Bl +Yj +FQ +WM +jL +wz +"} +(6,1,1) = {" +Gh +qb +Bl +Bl +Bl +uV +vb +GT +GT +GT +HA +GT +HQ +VT +BO +KM +KM +"} +(7,1,1) = {" +Gh +ZK +Bl +fk +uS +fK +ue +sW +ta +ng +MR +Bl +Hb +Pb +KM +KM +KM +"} +(8,1,1) = {" +jf +Bl +Bl +sW +bi +fK +ue +sW +uS +fK +rV +Bl +Hb +RN +KM +KM +UA +"} +(9,1,1) = {" +Gh +Bl +Bl +Bl +Pt +DZ +ue +UC +WG +Bl +Bl +Bl +Hb +KM +KM +KM +fa +"} +(10,1,1) = {" +Gh +sW +uS +ng +Gh +gf +pq +gf +Gh +fk +PC +fK +Hb +KM +Uu +KM +KM +"} +(11,1,1) = {" +Gh +jf +jf +jf +Gh +kL +kL +kL +Gh +jf +jf +jf +em +em +em +em +em +"} diff --git a/_maps/~monkestation/RandomBars/Box/clockwork_bar.dmm b/_maps/~monkestation/RandomBars/Box/clockwork_bar.dmm new file mode 100644 index 000000000000..90443a09eef4 --- /dev/null +++ b/_maps/~monkestation/RandomBars/Box/clockwork_bar.dmm @@ -0,0 +1,593 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ca" = ( +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"cr" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/bronze{ + name = "Bar" + }, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"cu" = ( +/obj/structure/chair/bronze{ + dir = 1 + }, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"du" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"dN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"fp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"fq" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Service - Theater"; + name = "service camera" + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"gg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"hB" = ( +/obj/structure/fluff/clockwork/alloy_shards/medium, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"if" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"il" = ( +/obj/structure/chair/bronze{ + dir = 4 + }, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"jv" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"kq" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"ll" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/computer/slot_machine, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"mm" = ( +/obj/structure/chair/bronze, +/obj/effect/landmark/start/hangover, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"ol" = ( +/obj/structure/chair/bronze{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"oF" = ( +/obj/machinery/firealarm/directional/west, +/obj/structure/musician/piano, +/obj/machinery/light/directional/west, +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"oH" = ( +/obj/structure/fluff/clockwork/alloy_shards, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"qn" = ( +/obj/structure/chair/bronze{ + dir = 8 + }, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"qG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"qZ" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"rC" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/light/directional/east, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"si" = ( +/obj/structure/chair/bronze, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"sH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/fluff/clockwork/clockgolem_remains, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"tn" = ( +/obj/effect/spawner/structure/window/bronze, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/commons/lounge) +"tZ" = ( +/obj/machinery/computer/slot_machine, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"uV" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/light/small/directional/east, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"xT" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/window/left/directional/north{ + name = "Theater Stage" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"yC" = ( +/obj/machinery/computer/slot_machine, +/obj/machinery/light/directional/east, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"zp" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"Bm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"Cz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"DS" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/bronze{ + dir = 1 + }, +/obj/structure/table/bronze, +/obj/item/instrument/violin, +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"Ef" = ( +/turf/closed/wall/mineral/bronze, +/area/station/service/theater) +"FG" = ( +/obj/structure/table/bronze, +/obj/item/instrument/saxophone, +/obj/item/instrument/trombone, +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"Go" = ( +/obj/effect/spawner/structure/window/bronze, +/turf/open/floor/plating, +/area/station/commons/lounge) +"Ie" = ( +/obj/structure/sign/poster/contraband/clown/directional/west, +/obj/structure/table/bronze, +/obj/item/instrument/accordion, +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"Iw" = ( +/obj/machinery/media/jukebox, +/obj/machinery/light/directional/north, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"Jy" = ( +/obj/structure/table/bronze, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"JZ" = ( +/obj/structure/chair/bronze{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"LI" = ( +/obj/structure/chair/bronze{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"LJ" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"Mm" = ( +/obj/machinery/light_switch/directional/west, +/obj/machinery/light/directional/west, +/obj/structure/fluff/clockwork/alloy_shards/small, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"MB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"Oh" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/machinery/light/small/directional/south, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"Ov" = ( +/obj/machinery/barsign/directional/north, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"OD" = ( +/turf/closed/wall/mineral/bronze, +/area/station/commons/lounge) +"Pz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"PH" = ( +/obj/structure/table/bronze, +/obj/item/toy/plush/moth/ookplush, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"PP" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"Rd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"Rp" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/bronze{ + dir = 1 + }, +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"RG" = ( +/obj/machinery/restaurant_portal/bar, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"Sf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/mob/living/carbon/human/species/monkey/punpun, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"Tu" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/restaurant_portal/restaurant, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"TL" = ( +/turf/open/floor/bronze, +/area/station/commons/lounge) +"TO" = ( +/obj/structure/table/bronze, +/obj/item/instrument/guitar{ + pixel_x = -7 + }, +/obj/item/instrument/eguitar{ + pixel_x = 5 + }, +/obj/item/instrument/banjo, +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"Ui" = ( +/obj/structure/fluff/clockwork/alloy_shards/large, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"Uz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"UM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"Wj" = ( +/turf/template_noop, +/area/template_noop) +"Ww" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/bronze/flat, +/area/station/service/theater) +"Ya" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 + }, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"ZX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/bronze, +/area/station/commons/lounge) +"ZZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/bronze, +/area/station/commons/lounge) + +(1,1,1) = {" +OD +TL +qG +TL +LJ +qn +LI +qn +Mm +TL +PP +TL +TL +Cz +TL +TL +Wj +"} +(2,1,1) = {" +OD +Ov +qG +qG +qG +qG +Sf +qG +qG +qG +qG +gg +Rd +Uz +qG +sH +Wj +"} +(3,1,1) = {" +OD +TL +dN +TL +ol +il +qG +il +il +TL +ZZ +UM +tZ +ll +yC +Ya +Wj +"} +(4,1,1) = {" +Go +kq +TL +Ui +Jy +Jy +qG +Jy +PH +TL +TL +Oh +Ef +Ef +Ef +Ef +Wj +"} +(5,1,1) = {" +OD +Tu +TL +TL +qn +qn +fp +qn +LI +oH +TL +TL +DS +TO +oF +FG +Ie +"} +(6,1,1) = {" +OD +Iw +TL +TL +TL +oH +if +du +du +du +du +du +xT +Bm +qZ +ca +ca +"} +(7,1,1) = {" +OD +RG +TL +mm +Jy +cu +qG +si +Jy +JZ +TL +TL +Rp +Pz +ca +ca +ca +"} +(8,1,1) = {" +Go +TL +TL +si +Jy +cu +qG +si +Jy +cu +hB +TL +Rp +Ww +ca +ca +fq +"} +(9,1,1) = {" +OD +TL +TL +TL +rC +ZX +qG +MB +uV +TL +TL +TL +Rp +ca +ca +ca +zp +"} +(10,1,1) = {" +OD +si +Jy +JZ +OD +cr +tn +cr +OD +mm +Jy +cu +Rp +ca +jv +ca +ca +"} +(11,1,1) = {" +OD +Go +Go +Go +OD +Wj +Wj +Wj +OD +Go +Go +Go +Ef +Ef +Ef +Ef +Ef +"} diff --git a/_maps/~monkestation/RandomBars/Box/default_bar.dmm b/_maps/~monkestation/RandomBars/Box/default_bar.dmm new file mode 100644 index 000000000000..cc7c9b7ef3d3 --- /dev/null +++ b/_maps/~monkestation/RandomBars/Box/default_bar.dmm @@ -0,0 +1,662 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ae" = ( +/obj/structure/sign/poster/contraband/clown/directional/west, +/obj/structure/table/wood, +/obj/item/instrument/accordion, +/turf/open/floor/wood, +/area/station/service/theater) +"az" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron, +/area/station/commons/lounge) +"bN" = ( +/obj/machinery/firealarm/directional/west, +/obj/structure/musician/piano, +/obj/machinery/light/directional/west, +/turf/open/floor/wood, +/area/station/service/theater) +"cD" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/chair/stool/bar/directional/west, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/lounge) +"cH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Bar" + }, +/turf/open/floor/iron/textured, +/area/station/commons/lounge) +"cL" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/commons/lounge) +"dp" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/wood, +/area/station/service/theater) +"dy" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron, +/area/station/commons/lounge) +"ei" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"en" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"eq" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/mob/living/carbon/human/species/monkey/punpun, +/turf/open/floor/iron, +/area/station/commons/lounge) +"eR" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/restaurant_portal/bar, +/turf/open/floor/iron, +/area/station/commons/lounge) +"fx" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/chair, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron, +/area/station/commons/lounge) +"gW" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/window/left/directional/north{ + name = "Theater Stage" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/service/theater) +"hG" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"hJ" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/wood, +/area/station/service/theater) +"jD" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/commons/lounge) +"kE" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"mi" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"mB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"rt" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/item/instrument/violin, +/turf/open/floor/wood, +/area/station/service/theater) +"sw" = ( +/obj/structure/table/wood, +/obj/item/instrument/guitar{ + pixel_x = -7 + }, +/obj/item/instrument/eguitar{ + pixel_x = 5 + }, +/obj/item/instrument/banjo, +/turf/open/floor/wood, +/area/station/service/theater) +"sZ" = ( +/turf/template_noop, +/area/template_noop) +"tH" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/commons/lounge) +"uC" = ( +/obj/structure/table/wood, +/obj/item/instrument/saxophone, +/obj/item/instrument/trombone, +/turf/open/floor/wood, +/area/station/service/theater) +"uI" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/chair/stool/bar/directional/west, +/turf/open/floor/iron, +/area/station/commons/lounge) +"vg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/service/theater) +"vO" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/computer/slot_machine, +/turf/open/floor/iron, +/area/station/commons/lounge) +"xm" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/chair, +/turf/open/floor/iron, +/area/station/commons/lounge) +"zm" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron, +/area/station/commons/lounge) +"zF" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/commons/lounge) +"zQ" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/barsign/directional/north, +/turf/open/floor/iron, +/area/station/commons/lounge) +"Ca" = ( +/turf/closed/wall, +/area/station/commons/lounge) +"Cg" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/lounge) +"CA" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/lounge) +"CQ" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"Dt" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron, +/area/station/commons/lounge) +"DR" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/chair, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/lounge) +"DV" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/lounge) +"DZ" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/light_switch/directional/west, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/commons/lounge) +"Ea" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Service - Theater"; + name = "service camera" + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/wood, +/area/station/service/theater) +"Ep" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/firealarm/directional/east, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/commons/lounge) +"EF" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/lounge) +"EP" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/restaurant_portal/restaurant, +/turf/open/floor/iron, +/area/station/commons/lounge) +"FT" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"Gu" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/table, +/obj/item/clothing/head/utility/hardhat/cakehat, +/turf/open/floor/iron, +/area/station/commons/lounge) +"HF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"Ip" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/commons/lounge) +"IP" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/computer/slot_machine, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/commons/lounge) +"Jm" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/computer/slot_machine, +/turf/open/floor/iron, +/area/station/commons/lounge) +"JF" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"Kk" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/commons/lounge) +"Ly" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/table/wood/poker, +/turf/open/floor/iron, +/area/station/commons/lounge) +"LM" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"Nm" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"NZ" = ( +/turf/open/floor/wood, +/area/station/service/theater) +"Od" = ( +/turf/closed/wall, +/area/station/service/theater) +"On" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"OE" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/lounge) +"OS" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"PD" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/commons/lounge) +"QZ" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"Tq" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck, +/obj/item/clothing/mask/cigarette/cigar, +/turf/open/floor/iron, +/area/station/commons/lounge) +"TB" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/table, +/turf/open/floor/iron, +/area/station/commons/lounge) +"Uq" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/commons/lounge) +"WG" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/media/jukebox, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/commons/lounge) +"XC" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/lounge) +"ZX" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck, +/turf/open/floor/iron, +/area/station/commons/lounge) + +(1,1,1) = {" +Ca +tH +EF +tH +PD +uI +cD +uI +DZ +tH +XC +tH +tH +ei +tH +tH +sZ +"} +(2,1,1) = {" +Ca +zQ +EF +EF +EF +EF +eq +EF +EF +EF +EF +hG +jD +LM +EF +EF +sZ +"} +(3,1,1) = {" +Ca +tH +kE +tH +DV +On +EF +On +On +tH +Nm +QZ +vO +Jm +IP +JF +sZ +"} +(4,1,1) = {" +zF +Dt +tH +tH +TB +TB +EF +Ly +Tq +tH +tH +cL +Od +Od +Od +Od +sZ +"} +(5,1,1) = {" +Ca +EP +tH +tH +FT +FT +dy +FT +CA +tH +tH +tH +rt +sw +bN +uC +ae +"} +(6,1,1) = {" +Ca +WG +tH +tH +tH +tH +Kk +OE +OE +OE +OE +OE +gW +vg +en +NZ +NZ +"} +(7,1,1) = {" +Ca +eR +tH +DR +ZX +az +EF +fx +TB +Cg +tH +tH +mi +mB +NZ +NZ +NZ +"} +(8,1,1) = {" +zF +tH +tH +xm +Ly +CQ +EF +xm +TB +CQ +tH +tH +mi +HF +NZ +NZ +Ea +"} +(9,1,1) = {" +Ca +tH +tH +tH +Ep +Ip +EF +OS +zm +tH +tH +tH +mi +NZ +NZ +NZ +dp +"} +(10,1,1) = {" +Ca +fx +TB +Cg +Ca +cH +Uq +cH +Ca +DR +Gu +az +mi +NZ +hJ +NZ +NZ +"} +(11,1,1) = {" +Ca +zF +zF +zF +Ca +sZ +sZ +sZ +Ca +zF +zF +zF +Od +Od +Od +Od +Od +"} diff --git a/_maps/~monkestation/RandomBars/Box/vietmoth_bar.dmm b/_maps/~monkestation/RandomBars/Box/vietmoth_bar.dmm new file mode 100644 index 000000000000..cecab9206f0f --- /dev/null +++ b/_maps/~monkestation/RandomBars/Box/vietmoth_bar.dmm @@ -0,0 +1,671 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ak" = ( +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/floor/grass, +/area/station/commons/lounge) +"cc" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/window/left/directional/north{ + name = "Theater Stage" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/grass, +/area/station/service/theater) +"ck" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/grass, +/area/station/commons/lounge) +"cI" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/grass, +/area/station/commons/lounge) +"dx" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/grass, +/area/station/commons/lounge) +"ew" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/restaurant_portal/restaurant, +/turf/open/floor/grass, +/area/station/commons/lounge) +"fg" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/grass, +/area/station/commons/lounge) +"fm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/water/jungle, +/area/station/commons/lounge) +"gy" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/misc/dirt/jungle, +/area/station/service/theater) +"gM" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/station/commons/lounge) +"gY" = ( +/obj/machinery/media/jukebox, +/obj/machinery/light/directional/north, +/turf/open/floor/grass, +/area/station/commons/lounge) +"hS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/turf/open/floor/grass, +/area/station/commons/lounge) +"ir" = ( +/obj/structure/flora/bush/large/style_random, +/turf/open/floor/grass, +/area/station/commons/lounge) +"jB" = ( +/turf/open/misc/dirt/jungle, +/area/station/service/theater) +"jK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/grass, +/area/station/commons/lounge) +"kD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/grass, +/area/station/service/theater) +"lY" = ( +/obj/structure/bonfire/prelit, +/turf/open/misc/dirt/jungle, +/area/station/commons/lounge) +"mB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/grass, +/area/station/service/theater) +"mC" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/grass, +/area/station/commons/lounge) +"mL" = ( +/turf/open/water/jungle, +/area/station/commons/lounge) +"mP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/flora/rock/pile/jungle/large/style_random, +/obj/structure/flora/tree/jungle/style_random, +/turf/open/floor/grass, +/area/station/commons/lounge) +"nj" = ( +/turf/open/floor/grass, +/area/station/commons/lounge) +"nB" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/grass, +/area/station/commons/lounge) +"nI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/mob/living/carbon/human/species/monkey/punpun, +/turf/open/floor/grass, +/area/station/commons/lounge) +"nN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/grass, +/area/station/commons/lounge) +"nR" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/grass, +/area/station/commons/lounge) +"nU" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/machinery/light/small/directional/south, +/turf/open/floor/grass, +/area/station/commons/lounge) +"oa" = ( +/obj/machinery/computer/slot_machine, +/obj/machinery/light/directional/east, +/turf/open/floor/grass, +/area/station/commons/lounge) +"op" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/grass, +/area/station/commons/lounge) +"pg" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/leavy/style_random, +/turf/open/floor/grass, +/area/station/commons/lounge) +"po" = ( +/obj/machinery/light_switch/directional/west, +/obj/machinery/light/directional/west, +/obj/structure/flora/bush/jungle/b/style_random, +/turf/open/floor/grass, +/area/station/commons/lounge) +"py" = ( +/obj/machinery/barsign/directional/north, +/turf/open/floor/grass, +/area/station/commons/lounge) +"pP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/grass, +/area/station/service/theater) +"qi" = ( +/obj/structure/chair/wood, +/turf/open/floor/grass, +/area/station/commons/lounge) +"tT" = ( +/obj/structure/barricade/wooden, +/obj/structure/barricade/wooden/crude, +/obj/machinery/door/firedoor, +/turf/open/misc/dirt/jungle, +/area/station/commons/lounge) +"tU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/grass, +/area/station/commons/lounge) +"uo" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/item/instrument/violin, +/turf/open/floor/grass, +/area/station/service/theater) +"vc" = ( +/turf/closed/wall/mineral/wood, +/area/station/service/theater) +"vv" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/wood{ + name = "Bar" + }, +/turf/open/misc/dirt/jungle, +/area/station/commons/lounge) +"vy" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/grass, +/area/station/commons/lounge) +"wd" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/grass, +/area/station/service/theater) +"wF" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/station/commons/lounge) +"wM" = ( +/obj/structure/table/wood, +/obj/item/instrument/guitar{ + pixel_x = -7 + }, +/obj/item/instrument/eguitar{ + pixel_x = 5 + }, +/obj/item/instrument/banjo, +/turf/open/floor/grass, +/area/station/service/theater) +"xk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/grass, +/area/station/commons/lounge) +"xK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/grass, +/area/station/commons/lounge) +"yJ" = ( +/turf/template_noop, +/area/template_noop) +"zh" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/computer/slot_machine, +/turf/open/floor/grass, +/area/station/commons/lounge) +"zv" = ( +/obj/structure/table/wood, +/obj/item/instrument/saxophone, +/obj/item/instrument/trombone, +/turf/open/floor/grass, +/area/station/service/theater) +"AS" = ( +/obj/machinery/computer/slot_machine, +/turf/open/floor/grass, +/area/station/commons/lounge) +"Bs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/flora/rock/pile/jungle/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/station/commons/lounge) +"BD" = ( +/obj/machinery/restaurant_portal/bar, +/turf/open/floor/grass, +/area/station/commons/lounge) +"CE" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/floor/grass, +/area/station/commons/lounge) +"CX" = ( +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/floor/grass, +/area/station/commons/lounge) +"Dd" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/grass, +/area/station/service/theater) +"Dg" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/grass, +/area/station/commons/lounge) +"EB" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 + }, +/turf/open/floor/grass, +/area/station/commons/lounge) +"FS" = ( +/obj/structure/table/wood, +/turf/open/floor/grass, +/area/station/commons/lounge) +"GX" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/grass, +/area/station/commons/lounge) +"Hh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/barricade/wooden, +/obj/structure/barricade/wooden/crude, +/obj/machinery/door/firedoor, +/turf/open/misc/dirt/jungle, +/area/station/commons/lounge) +"HA" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/grass, +/area/station/commons/lounge) +"HI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/grass, +/area/station/commons/lounge) +"Im" = ( +/obj/structure/sign/poster/contraband/clown/directional/west, +/obj/structure/table/wood, +/obj/item/instrument/accordion, +/turf/open/floor/grass, +/area/station/service/theater) +"Kc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/grass, +/area/station/commons/lounge) +"Ke" = ( +/obj/structure/flora/rock/style_random, +/turf/open/floor/grass, +/area/station/commons/lounge) +"Mu" = ( +/obj/machinery/light/directional/east, +/turf/open/misc/dirt/jungle, +/area/station/service/theater) +"MI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/water/jungle, +/area/station/commons/lounge) +"NP" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Service - Theater"; + name = "service camera" + }, +/obj/machinery/airalarm/directional/south, +/turf/open/misc/dirt/jungle, +/area/station/service/theater) +"Ol" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/misc/dirt/jungle, +/area/station/service/theater) +"Oz" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/grass, +/area/station/commons/lounge) +"OP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/grass, +/area/station/commons/lounge) +"OY" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/light/small/directional/west, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/station/commons/lounge) +"QO" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/floor/grass, +/area/station/commons/lounge) +"QW" = ( +/obj/machinery/firealarm/directional/west, +/obj/structure/musician/piano, +/obj/machinery/light/directional/west, +/turf/open/floor/grass, +/area/station/service/theater) +"TV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/grass, +/area/station/commons/lounge) +"Ub" = ( +/turf/closed/wall/mineral/wood, +/area/station/commons/lounge) +"Yt" = ( +/obj/structure/chair/wood, +/obj/effect/landmark/start/hangover, +/turf/open/floor/grass, +/area/station/commons/lounge) +"YM" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/grass, +/area/station/commons/lounge) +"ZB" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/station/commons/lounge) +"ZC" = ( +/turf/open/floor/grass, +/area/station/service/theater) + +(1,1,1) = {" +Ub +nj +jK +nj +OY +Oz +nR +Oz +po +nj +YM +ir +nj +OP +gM +CE +yJ +"} +(2,1,1) = {" +Ub +py +jK +Bs +jK +jK +nI +jK +jK +jK +jK +HI +tU +xK +jK +jK +yJ +"} +(3,1,1) = {" +Ub +CX +TV +nj +vy +nj +jK +QO +dx +dx +Dg +xk +AS +zh +oa +EB +yJ +"} +(4,1,1) = {" +tT +nB +nj +nj +FS +nj +mP +nj +FS +FS +nj +nU +vc +vc +vc +vc +yJ +"} +(5,1,1) = {" +Ub +ew +QO +nj +Oz +nj +hS +fg +nR +Oz +pg +CE +uo +wM +QW +zv +Im +"} +(6,1,1) = {" +Ub +gY +nj +lY +Ke +mL +MI +fm +fm +fm +fm +Kc +cc +mB +Dd +ZC +ZC +"} +(7,1,1) = {" +Ub +BD +mL +mL +mL +mL +ck +qi +FS +HA +mL +mL +wd +kD +ZC +jB +jB +"} +(8,1,1) = {" +tT +mL +mL +Yt +FS +cI +jK +wF +nj +nj +ZB +ak +wd +pP +jB +jB +NP +"} +(9,1,1) = {" +Ub +gM +ir +nj +mC +op +jK +nN +GX +nj +nj +nj +gy +jB +jB +jB +Ol +"} +(10,1,1) = {" +Ub +qi +FS +HA +Ub +vv +Hh +vv +Ub +Yt +FS +cI +gy +jB +Mu +jB +jB +"} +(11,1,1) = {" +Ub +tT +tT +tT +Ub +yJ +yJ +yJ +Ub +tT +tT +tT +vc +vc +vc +vc +vc +"} diff --git a/_maps/~monkestation/RandomBars/Icebox/BarSM.dmm b/_maps/~monkestation/RandomBars/Icebox/BarSM.dmm index f8788aacd9df..a283cdc68cd6 100644 --- a/_maps/~monkestation/RandomBars/Icebox/BarSM.dmm +++ b/_maps/~monkestation/RandomBars/Icebox/BarSM.dmm @@ -887,7 +887,7 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/modular_computer/console/preset/engineering, +/obj/machinery/modular_computer/preset/engineering, /obj/machinery/light/directional/north, /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 1 diff --git a/_maps/~monkestation/RandomBars/Icebox/Drunkopsbar.dmm b/_maps/~monkestation/RandomBars/Icebox/Drunkopsbar.dmm index cf6416cd6971..5b6c97d5451a 100644 --- a/_maps/~monkestation/RandomBars/Icebox/Drunkopsbar.dmm +++ b/_maps/~monkestation/RandomBars/Icebox/Drunkopsbar.dmm @@ -340,7 +340,7 @@ /obj/effect/turf_decal/stripes/red/line{ dir = 4 }, -/obj/machinery/modular_computer/console/preset/civilian{ +/obj/machinery/modular_computer/preset/civilian{ dir = 8; name = "BarDropship Helm Console" }, diff --git a/_maps/~monkestation/RandomBars/Icebox/MaidCafe.dmm b/_maps/~monkestation/RandomBars/Icebox/MaidCafe.dmm index af9f0779017d..b8ab052d803f 100644 --- a/_maps/~monkestation/RandomBars/Icebox/MaidCafe.dmm +++ b/_maps/~monkestation/RandomBars/Icebox/MaidCafe.dmm @@ -93,12 +93,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/large, /area/station/commons/lounge) -"mu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood/large, -/area/station/commons/lounge) "mC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -880,7 +874,7 @@ zS zS VG zS -mu +zS zS Bx if diff --git a/_maps/~monkestation/RandomBars/Icebox/clockwork_icebox.dmm b/_maps/~monkestation/RandomBars/Icebox/clockwork_icebox.dmm index 6c2673db4cbf..e2dfb4976558 100644 --- a/_maps/~monkestation/RandomBars/Icebox/clockwork_icebox.dmm +++ b/_maps/~monkestation/RandomBars/Icebox/clockwork_icebox.dmm @@ -107,7 +107,6 @@ "eZ" = ( /obj/structure/table/bronze, /obj/item/gun/ballistic/revolver/russian, -/obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/carpet/lone, /area/station/service/theater) diff --git a/_maps/~monkestation/RandomBars/Icebox/green_bar_disco.dmm b/_maps/~monkestation/RandomBars/Icebox/green_bar_disco.dmm index eabb73fcdd7b..6a4bc206155b 100644 --- a/_maps/~monkestation/RandomBars/Icebox/green_bar_disco.dmm +++ b/_maps/~monkestation/RandomBars/Icebox/green_bar_disco.dmm @@ -220,7 +220,6 @@ dir = 6 }, /obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/carpet/green, /area/station/service/theater) "lG" = ( diff --git a/_maps/~monkestation/RandomBars/Icebox/icebox_bar_abductor.dmm b/_maps/~monkestation/RandomBars/Icebox/icebox_bar_abductor.dmm index 5552c41c1ff8..5a588d418ebb 100644 --- a/_maps/~monkestation/RandomBars/Icebox/icebox_bar_abductor.dmm +++ b/_maps/~monkestation/RandomBars/Icebox/icebox_bar_abductor.dmm @@ -619,7 +619,6 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/circuit, /area/station/service/theater) "EH" = ( diff --git a/_maps/~monkestation/RandomBars/Icebox/icebox_bar_arcade.dmm b/_maps/~monkestation/RandomBars/Icebox/icebox_bar_arcade.dmm index 2d9d1ad43a2a..40a48926706b 100644 --- a/_maps/~monkestation/RandomBars/Icebox/icebox_bar_arcade.dmm +++ b/_maps/~monkestation/RandomBars/Icebox/icebox_bar_arcade.dmm @@ -209,7 +209,6 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/eighties, /area/station/service/theater) "kp" = ( diff --git a/_maps/~monkestation/RandomBars/Tram/tram_bar_beachside.dmm b/_maps/~monkestation/RandomBars/Tram/tram_bar_beachside.dmm index 65031b8a08fa..041c608df6f3 100644 --- a/_maps/~monkestation/RandomBars/Tram/tram_bar_beachside.dmm +++ b/_maps/~monkestation/RandomBars/Tram/tram_bar_beachside.dmm @@ -426,8 +426,7 @@ "nN" = ( /obj/structure/ladder, /obj/machinery/door/window/left/directional/north{ - name = "Bar Backroom Access"; - req_one_access = list("bar") + name = "Bar Backroom Access" }, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/east, @@ -605,8 +604,7 @@ name = "Kitchen Counter Shutters" }, /obj/machinery/door/window/left/directional/west{ - name = "Kitchen"; - req_one_access = list("kitchen") + name = "Kitchen" }, /obj/effect/mapping_helpers/airlock/access/all/service/kitchen, /turf/open/floor/wood, @@ -820,7 +818,6 @@ /area/station/commons/lounge) "zo" = ( /obj/machinery/door/window/left/directional/south{ - req_one_access = list("kitchen"); name = "Kitchen" }, /obj/effect/turf_decal/siding/wood, @@ -877,8 +874,7 @@ /area/station/commons/lounge) "AC" = ( /obj/machinery/door/window/left/directional/east{ - name = "Bar"; - req_one_access = list("bar") + name = "Bar" }, /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -1558,7 +1554,6 @@ /area/station/commons/lounge) "TG" = ( /obj/machinery/door/window/left/directional/south{ - req_one_access = list("kitchen"); name = "Kitchen Coldroom Access" }, /obj/effect/turf_decal/siding/wood{ diff --git a/_maps/~monkestation/RandomBars/Tram/tram_bar_biodome.dmm b/_maps/~monkestation/RandomBars/Tram/tram_bar_biodome.dmm index bb15b80a1539..53e84271edb1 100644 --- a/_maps/~monkestation/RandomBars/Tram/tram_bar_biodome.dmm +++ b/_maps/~monkestation/RandomBars/Tram/tram_bar_biodome.dmm @@ -959,6 +959,9 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/commons/lounge) +"yk" = ( +/turf/open/openspace, +/area/station/service/kitchen) "yp" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/security) @@ -2605,7 +2608,7 @@ nL (15,1,1) = {" sk vP -aL +yk js nY Bq diff --git a/_maps/~monkestation/RandomBars/Tram/tram_rvb_bar.dmm b/_maps/~monkestation/RandomBars/Tram/tram_rvb_bar.dmm index 7eb1e1e8b868..e161d9ce8ff8 100644 --- a/_maps/~monkestation/RandomBars/Tram/tram_rvb_bar.dmm +++ b/_maps/~monkestation/RandomBars/Tram/tram_rvb_bar.dmm @@ -1810,7 +1810,7 @@ /area/station/commons/lounge) "BV" = ( /obj/effect/spawner/structure/window, -/turf/open/space/basic, +/turf/open/floor/plating, /area/station/commons/lounge) "Cd" = ( /obj/machinery/door/airlock/public/glass{ diff --git a/_maps/~monkestation/RandomEngines/BoxStation/empty.dmm b/_maps/~monkestation/RandomEngines/BoxStation/empty.dmm new file mode 100644 index 000000000000..31f0358d300b --- /dev/null +++ b/_maps/~monkestation/RandomEngines/BoxStation/empty.dmm @@ -0,0 +1,983 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/open/floor/iron, +/area/station/engineering/main) +"b" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"c" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/main) +"e" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/main) +"f" = ( +/turf/template_noop, +/area/template_noop) +"h" = ( +/turf/closed/wall/r_wall, +/area/space/nearstation) +"i" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engine Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/main) +"l" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Engineering Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"m" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"o" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"r" = ( +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space/nearstation) +"t" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"v" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/engineering/main) +"z" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"A" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"B" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"C" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine) +"D" = ( +/obj/machinery/light/directional/north, +/obj/machinery/airalarm/directional/north, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"E" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/main) +"F" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engine Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/iron/textured, +/area/station/engineering/main) +"I" = ( +/turf/open/floor/plating/airless, +/area/space/nearstation) +"J" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Engine Room" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/main) +"K" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"L" = ( +/obj/structure/grille, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"M" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"N" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/engineering/main) +"Q" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"R" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/main) +"W" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"Y" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/main) +"Z" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) + +(1,1,1) = {" +R +B +B +B +B +R +f +A +A +A +A +A +A +A +A +A +f +f +L +L +L +f +f +m +f +f +"} +(2,1,1) = {" +i +M +M +B +b +R +A +A +m +A +m +A +m +A +m +A +A +A +L +h +L +f +f +m +f +f +"} +(3,1,1) = {" +R +Q +M +B +B +R +f +A +m +A +m +A +m +A +m +A +f +f +L +h +L +f +f +m +f +f +"} +(4,1,1) = {" +R +K +M +W +B +E +A +A +m +A +m +A +m +A +m +A +A +A +L +h +L +f +f +m +m +f +"} +(5,1,1) = {" +R +D +M +B +B +E +f +A +m +A +m +A +m +A +m +A +f +f +L +h +L +f +f +f +m +f +"} +(6,1,1) = {" +R +K +M +o +B +E +A +A +m +A +m +A +m +A +m +A +A +A +L +h +L +f +f +f +m +f +"} +(7,1,1) = {" +R +B +M +B +B +R +f +A +m +A +m +A +m +A +m +A +f +f +L +h +L +f +L +L +m +m +"} +(8,1,1) = {" +R +B +M +B +b +R +A +A +m +A +m +A +m +A +m +A +A +A +L +h +L +A +h +L +L +f +"} +(9,1,1) = {" +R +B +M +B +B +R +f +A +m +A +m +A +m +A +m +A +f +f +L +L +L +f +h +h +L +f +"} +(10,1,1) = {" +R +Y +J +Y +R +R +R +R +R +Y +R +Y +Y +R +A +f +f +f +A +f +A +f +f +A +f +f +"} +(11,1,1) = {" +R +a +c +a +a +a +a +a +a +a +a +a +a +R +R +R +R +R +R +R +R +L +L +L +L +A +"} +(12,1,1) = {" +R +a +c +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +R +f +L +h +L +f +"} +(13,1,1) = {" +Y +a +c +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +R +f +L +h +L +f +"} +(14,1,1) = {" +Y +a +c +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +R +A +L +h +L +A +"} +(15,1,1) = {" +R +a +c +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +R +f +L +h +L +f +"} +(16,1,1) = {" +R +v +c +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +R +f +L +h +L +f +"} +(17,1,1) = {" +F +a +e +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +R +A +L +h +L +A +"} +(18,1,1) = {" +Y +a +e +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +R +f +L +h +L +f +"} +(19,1,1) = {" +F +a +e +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +R +A +L +h +L +A +"} +(20,1,1) = {" +R +N +e +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +R +f +L +h +L +f +"} +(21,1,1) = {" +R +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +R +f +L +h +L +f +"} +(22,1,1) = {" +Y +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +R +A +L +h +L +A +"} +(23,1,1) = {" +Y +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +R +f +L +h +L +f +"} +(24,1,1) = {" +R +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +R +f +L +h +L +f +"} +(25,1,1) = {" +R +a +a +t +a +a +a +a +a +a +a +a +a +R +R +R +R +R +R +R +R +A +L +L +L +A +"} +(26,1,1) = {" +C +Z +l +z +C +C +a +a +a +a +a +a +a +Y +I +I +I +I +I +I +I +f +f +A +f +f +"} +(27,1,1) = {" +f +f +f +f +f +C +a +a +a +a +a +a +a +R +r +r +r +A +A +A +A +A +A +A +A +A +"} +(28,1,1) = {" +f +f +f +f +f +C +a +a +a +a +a +a +a +R +f +f +A +f +A +h +L +f +f +f +f +f +"} +(29,1,1) = {" +f +f +f +f +f +C +R +R +R +R +Y +Y +Y +R +A +A +A +A +A +h +L +f +f +f +f +f +"} diff --git a/_maps/~monkestation/RandomEngines/BoxStation/particle_accelerator.dmm b/_maps/~monkestation/RandomEngines/BoxStation/particle_accelerator.dmm new file mode 100644 index 000000000000..2f0e2963e6ae --- /dev/null +++ b/_maps/~monkestation/RandomEngines/BoxStation/particle_accelerator.dmm @@ -0,0 +1,1621 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"aW" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/main) +"bj" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/engineering/main) +"bv" = ( +/obj/structure/particle_accelerator/particle_emitter/center, +/turf/open/floor/plating, +/area/station/engineering/main) +"cp" = ( +/obj/machinery/camera/emp_proof/directional/north{ + c_tag = "Engineering - Station Particle Accelerator, Northeast"; + name = "engineering camera"; + dir = 9 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"cA" = ( +/obj/machinery/camera/emp_proof/directional/south{ + name = "engineering camera"; + c_tag = "Engineering - Station Particle Accelerator, Southeast" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"dc" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/cable/multilayer/connected, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"dd" = ( +/obj/effect/turf_decal/bot_red, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"di" = ( +/obj/structure/cable/layer1, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"dV" = ( +/turf/open/floor/plating/airless, +/area/station/maintenance/department/engine) +"fX" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Engine Access Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/structure/cable/layer1, +/turf/open/floor/plating, +/area/station/engineering/main) +"ge" = ( +/obj/structure/cable, +/obj/machinery/power/smes/engineering, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"go" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "particle_accelerator"; + name = "Particle Accelerator Shutters"; + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/main) +"gu" = ( +/turf/open/floor/plating, +/area/station/engineering/main) +"gV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/poddoor{ + id = "engine_storage"; + name = "Engine Storage" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"gX" = ( +/obj/machinery/field/generator, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"hl" = ( +/obj/structure/cable/layer1, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"hn" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"hq" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"hr" = ( +/obj/machinery/camera/emp_proof/directional/west{ + c_tag = "Engineering - Station Particle Accelerator, West"; + name = "engineering camera" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"hA" = ( +/obj/structure/sign/warning/directional/west, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"hE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"hI" = ( +/obj/machinery/power/emitter, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"il" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"iV" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/main) +"jL" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"jV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/particle_accelerator/end_cap, +/turf/open/floor/plating, +/area/station/engineering/main) +"kk" = ( +/obj/structure/foamedmetal, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"kr" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) +"ks" = ( +/obj/structure/sign/warning/directional/south, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"kH" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/main) +"kV" = ( +/obj/item/stack/cable_coil, +/turf/open/floor/plating, +/area/station/engineering/main) +"lC" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "particle_accelerator"; + name = "Particle Accelerator Shutters" + }, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/main) +"mE" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/engineering/main) +"mJ" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/closet/radiation, +/turf/open/floor/iron, +/area/station/engineering/main) +"mK" = ( +/obj/structure/particle_accelerator/power_box, +/turf/open/floor/plating, +/area/station/engineering/main) +"na" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/button/door/directional/north{ + id = "particle_accelerator"; + name = "Particle Accelerator Shutters Control"; + req_access = list("engineering") + }, +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - Particle Accelerator Chamber"; + name = "engineering camera" + }, +/turf/open/floor/plating, +/area/station/engineering/main) +"nq" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/main) +"nN" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"os" = ( +/obj/machinery/power/emitter{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"oN" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"pQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/engineering/main) +"pW" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/engineering/main) +"qo" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/main) +"qp" = ( +/obj/structure/particle_accelerator/particle_emitter/right, +/turf/open/floor/plating, +/area/station/engineering/main) +"rD" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"rU" = ( +/obj/machinery/light/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"sM" = ( +/obj/effect/turf_decal/bot_white/right, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"sN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/main) +"tq" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Engine Access Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/engineering/main) +"tJ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/main) +"tQ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Engine Access Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/cable/layer1, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/station/engineering/main) +"ug" = ( +/obj/machinery/light/directional/north, +/obj/machinery/airalarm/directional/north, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"vF" = ( +/obj/structure/chair/stool/directional/north, +/turf/open/floor/plating, +/area/station/engineering/main) +"vQ" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"vZ" = ( +/obj/machinery/power/energy_accumulator/grounding_rod, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"wD" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engine SMES Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/main) +"wK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/main) +"wX" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"xj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/engineering/main) +"xu" = ( +/obj/structure/cable/multilayer/connected, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"xR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/main) +"yg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/poddoor{ + id = "external_engine_storage"; + name = "External Engine Storage" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"yD" = ( +/obj/effect/turf_decal/bot_red, +/obj/structure/cable, +/obj/machinery/power/emitter/welded{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"zd" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/main) +"zk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Engineering Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"zF" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Engine SMES Room" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/main) +"zZ" = ( +/obj/effect/turf_decal/bot_red, +/obj/structure/cable, +/obj/machinery/power/emitter/welded{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"AW" = ( +/obj/machinery/camera/emp_proof/directional/north{ + c_tag = "Engineering - Station Particle Accelerator, Northeast"; + name = "engineering camera" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Cp" = ( +/obj/structure/table, +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - SMES, Engine"; + name = "engineering camera" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"Cq" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/main) +"Cs" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"CY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"Da" = ( +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Df" = ( +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"Ds" = ( +/obj/effect/turf_decal/bot_red, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"DP" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Engine Access Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/station/engineering/main) +"El" = ( +/turf/closed/wall/r_wall, +/area/space/nearstation) +"Fj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/engineering/main) +"Fz" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/main) +"FH" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/machinery/button/door/directional/west{ + id = "engine_storage"; + name = "Engine Storage Control"; + req_access = list("engineering") + }, +/obj/structure/tank_holder/oxygen/yellow, +/turf/open/floor/plating, +/area/station/engineering/main) +"FJ" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"FS" = ( +/obj/structure/girder/reinforced, +/obj/structure/grille, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Gv" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/field/generator/anchored, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"GK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"GW" = ( +/turf/template_noop, +/area/template_noop) +"Hi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"Hj" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/table, +/obj/item/storage/toolbox/electrical, +/turf/open/floor/iron, +/area/station/engineering/main) +"HB" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"HF" = ( +/obj/machinery/power/rad_collector, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"HP" = ( +/obj/structure/cable/layer1, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"HX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "particle_accelerator"; + name = "Particle Accelerator Shutters"; + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/main) +"Kd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/button/door/directional/west{ + id = "particle_accelerator"; + name = "Particle Accelerator Shutters Control"; + req_access = list("engineering") + }, +/turf/open/floor/plating, +/area/station/engineering/main) +"Lo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/layer1, +/turf/open/floor/plating, +/area/station/engineering/main) +"Lt" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/table, +/obj/item/crowbar/red, +/turf/open/floor/iron, +/area/station/engineering/main) +"MB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/main) +"MS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/button/door/directional/east{ + id = "particle_accelerator"; + name = "Particle Accelerator Shutters Control"; + req_access = list("engineering") + }, +/obj/structure/cable, +/obj/item/weldingtool, +/turf/open/floor/plating, +/area/station/engineering/main) +"Nd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/engineering/main) +"NO" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/main) +"NU" = ( +/obj/machinery/power/energy_accumulator/tesla_coil, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"NW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/engineering/main) +"Pl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/main) +"Px" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/sign/warning/directional/south, +/obj/structure/table, +/obj/item/clothing/suit/utility/radiation, +/obj/item/clothing/head/utility/radiation, +/obj/item/clothing/glasses/meson, +/obj/item/geiger_counter, +/turf/open/floor/iron, +/area/station/engineering/main) +"PG" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/main) +"PV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/vacuum/external/directional/north, +/turf/open/floor/plating, +/area/station/engineering/main) +"QT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/main) +"Ra" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/structure/tank_holder/oxygen/yellow, +/turf/open/floor/plating, +/area/station/engineering/main) +"Rw" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/item/folder/yellow, +/turf/open/floor/iron, +/area/station/engineering/main) +"RH" = ( +/obj/machinery/camera/emp_proof/directional/east{ + c_tag = "Engineering - Station Particle Accelerator, East"; + name = "engineering camera" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"SB" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"TF" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/main) +"UL" = ( +/obj/structure/particle_accelerator/fuel_chamber, +/turf/open/floor/plating, +/area/station/engineering/main) +"Va" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space, +/area/space/nearstation) +"Vh" = ( +/obj/structure/particle_accelerator/particle_emitter/left, +/turf/open/floor/plating, +/area/station/engineering/main) +"VS" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"WJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plating, +/area/station/engineering/main) +"Xr" = ( +/obj/machinery/particle_accelerator/control_box, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/main) +"YE" = ( +/obj/effect/turf_decal/bot_white/left, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Zm" = ( +/obj/structure/sign/warning/directional/east, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Zp" = ( +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Zx" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine) +"ZH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/main) +"ZW" = ( +/obj/machinery/camera/emp_proof/directional/south{ + name = "engineering camera"; + c_tag = "Engineering - Station Particle Accelerator, Southeast"; + dir = 5 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) + +(1,1,1) = {" +PG +oN +oN +oN +oN +PG +GW +GW +GW +GW +GW +GW +GW +wX +GW +GW +Cs +GW +GW +wX +GW +GW +GW +Cs +GW +GW +"} +(2,1,1) = {" +wD +aD +Hi +hq +rU +PG +GW +wX +GW +GW +GW +wX +GW +El +El +El +yg +El +El +El +wX +Va +GW +Cs +GW +GW +"} +(3,1,1) = {" +PG +hn +hl +oN +ge +PG +wX +wX +wX +GW +wX +wX +GW +El +HF +HF +Zp +NU +NU +El +GW +Va +GW +Cs +GW +GW +"} +(4,1,1) = {" +PG +HB +hl +hE +vQ +aW +wX +wX +wX +wX +wX +wX +wX +El +HF +HF +Zp +vZ +vZ +El +GW +Va +GW +Cs +GW +GW +"} +(5,1,1) = {" +PG +ug +hl +Df +xu +aW +wX +wX +wX +wX +wX +wX +wX +El +HF +HF +Zp +NU +NU +El +GW +Va +GW +Cs +GW +GW +"} +(6,1,1) = {" +PG +Cp +GK +CY +jL +aW +wX +wX +GW +wX +wX +wX +wX +El +hI +gX +Zp +gX +os +El +GW +Va +GW +Cs +GW +GW +"} +(7,1,1) = {" +PG +oN +GK +oN +ge +PG +wX +GW +GW +wX +wX +GW +GW +El +Zp +Zp +Zp +Zp +Zp +El +GW +Va +GW +Cs +Cs +Cs +"} +(8,1,1) = {" +PG +oN +GK +hq +rU +PG +GW +GW +GW +wX +GW +GW +GW +El +Zp +Zp +Zp +Zp +Zp +El +GW +Va +GW +wX +GW +GW +"} +(9,1,1) = {" +PG +oN +GK +oN +PG +PG +PG +El +El +El +El +El +El +El +El +gV +El +gV +El +El +El +El +El +El +El +El +"} +(10,1,1) = {" +PG +aW +zF +aW +PG +FH +PG +Zp +Zp +Zp +Zp +Zp +Zp +hA +Zp +Zp +hr +Zp +Zp +hA +Zp +Zp +wX +wX +wX +El +"} +(11,1,1) = {" +Fz +mE +iV +bj +PG +PV +PG +Zp +Zp +Zp +Zp +Zp +Zp +HP +HP +HP +HP +HP +HP +HP +Zp +Zp +Zp +Zp +wX +El +"} +(12,1,1) = {" +Fz +Fz +iV +kH +tQ +Lo +fX +di +di +di +HP +HP +HP +HP +Zp +Zp +di +Zp +Zp +HP +HP +HP +HP +Zp +wX +El +"} +(13,1,1) = {" +Fz +Fz +kr +rD +Cq +pQ +PG +cp +Zp +Zp +HP +Zp +Zp +VS +Zp +Zp +di +Zp +Zp +VS +Zp +Zp +HP +Zp +Zp +El +"} +(14,1,1) = {" +Lt +Hj +kr +Px +PG +NO +Cq +Zp +Zp +Zp +HP +Zp +Zp +zZ +Zp +VS +HP +VS +Zp +zZ +Zp +Zp +HP +Zp +ZW +El +"} +(15,1,1) = {" +PG +PG +HX +PG +PG +Cq +Cq +Cq +Zp +Da +HP +VS +dd +Gv +Zp +sM +dc +YE +Zp +Gv +dd +VS +HP +HP +ks +El +"} +(16,1,1) = {" +PG +Fj +Pl +Kd +WJ +ZH +xj +Cq +Zp +Da +Zp +Zp +Zp +Zp +FJ +Zp +wX +Zp +FJ +Zp +Zp +Zp +Zp +HP +Zp +El +"} +(17,1,1) = {" +lC +NW +QT +Xr +vF +Vh +pW +Cq +Zp +HP +Zp +Zp +VS +sM +Zp +wX +wX +wX +Zp +YE +VS +Zp +Zp +HP +Zp +El +"} +(18,1,1) = {" +PG +na +jV +UL +mK +bv +tJ +nq +VS +HP +di +di +HP +dc +wX +wX +Ds +wX +wX +dc +HP +di +di +HP +wX +El +"} +(19,1,1) = {" +lC +NW +QT +gu +kV +qp +tJ +Cq +Zp +HP +Zp +Zp +VS +YE +Zp +wX +wX +wX +Zp +sM +VS +Zp +Zp +HP +Zp +El +"} +(20,1,1) = {" +PG +Nd +MB +MS +wK +xR +sN +Cq +Zp +Da +Zp +Zp +Zp +Zp +FJ +Zp +wX +Zp +FJ +Zp +Zp +Zp +Zp +HP +Zp +El +"} +(21,1,1) = {" +PG +PG +go +PG +PG +Cq +Cq +Cq +Zp +Da +HP +VS +dd +Gv +Zp +YE +dc +sM +Zp +Gv +dd +VS +HP +HP +ks +El +"} +(22,1,1) = {" +mJ +Rw +qo +Px +PG +zd +Cq +Zp +Zp +Zp +HP +Zp +Zp +yD +Zp +VS +HP +VS +Zp +yD +Zp +Zp +HP +Zp +cA +El +"} +(23,1,1) = {" +Fz +Fz +qo +rD +Cq +pQ +PG +AW +Zp +Zp +HP +Zp +Zp +VS +Zp +Zp +di +Zp +Zp +VS +Zp +Zp +HP +Zp +Zp +El +"} +(24,1,1) = {" +Fz +Fz +TF +Fz +DP +pQ +tq +Zp +Zp +Zp +HP +HP +HP +HP +Zp +Zp +di +Zp +Zp +HP +HP +HP +HP +Zp +wX +El +"} +(25,1,1) = {" +Fz +mE +TF +SB +PG +PV +PG +Zp +Zp +Zp +Zp +Zp +Zp +HP +HP +HP +HP +HP +HP +HP +Zp +Zp +Zp +Zp +wX +El +"} +(26,1,1) = {" +Zx +il +zk +nN +Zx +Ra +PG +Zp +Zp +Zp +Zp +Zp +Zp +Zm +Zp +Zp +RH +Zp +Zp +Zm +Zp +Zp +wX +wX +wX +El +"} +(27,1,1) = {" +GW +GW +GW +GW +Zx +Zx +Zx +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +"} +(28,1,1) = {" +GW +GW +GW +GW +GW +dV +Zx +kk +kk +kk +kk +kk +kk +FS +GW +GW +wX +GW +wX +wX +wX +wX +wX +wX +wX +GW +"} +(29,1,1) = {" +GW +GW +GW +GW +GW +GW +GW +GW +GW +GW +GW +GW +GW +GW +wX +wX +wX +wX +wX +wX +wX +GW +GW +GW +GW +GW +"} diff --git a/_maps/~monkestation/RandomEngines/BoxStation/supermatter.dmm b/_maps/~monkestation/RandomEngines/BoxStation/supermatter.dmm new file mode 100644 index 000000000000..a824d5e3dd3c --- /dev/null +++ b/_maps/~monkestation/RandomEngines/BoxStation/supermatter.dmm @@ -0,0 +1,2344 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ak" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/machinery/power/energy_accumulator/tesla_coil/anchored, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"ap" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"aU" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Emitter Room" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"aW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"aX" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"bk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"bq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, +/obj/machinery/status_display/evac/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"bs" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"bz" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Gas to Cooling Loop" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"bF" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"bM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"cs" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"cx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/status_display/evac/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"cS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"dw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/structure/cable/layer1, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"dy" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Gas to Chamber" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"dC" = ( +/obj/machinery/power/emitter/welded{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"dP" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/button/door/directional/south{ + id = "engsm"; + name = "Radiation Shutters Control"; + req_access = list("engineering") + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"eb" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Engineering Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"ee" = ( +/obj/machinery/atmospherics/components/binary/valve/digital/on{ + dir = 4; + name = "Output Release" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"eo" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"ez" = ( +/obj/structure/reflector/box/anchored{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"fc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter) +"fd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"fi" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"fp" = ( +/obj/structure/cable, +/obj/machinery/power/smes/engineering, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"fB" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 + }, +/turf/open/space/basic, +/area/space/nearstation) +"fF" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"fI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"gu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"gA" = ( +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"gB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"gF" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"gO" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"hr" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"hA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"hE" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/turf/open/space/basic, +/area/space/nearstation) +"hI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/machinery/status_display/ai/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"ik" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"iF" = ( +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space/nearstation) +"iH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"iZ" = ( +/obj/structure/rack, +/obj/item/crowbar/red, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"jv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"jx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/structure/window/reinforced/plasma/spawner/directional/west, +/obj/machinery/power/energy_accumulator/tesla_coil/anchored, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"jC" = ( +/obj/machinery/light/directional/south, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"jM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/clothing/suit/utility/radiation, +/obj/item/clothing/head/utility/radiation, +/obj/item/geiger_counter, +/obj/item/clothing/glasses/meson, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"jQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"kd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"kx" = ( +/obj/structure/table, +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - SMES, Engine"; + name = "engineering camera" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"kz" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter) +"kX" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/main) +"ld" = ( +/obj/machinery/meter, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"lr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"lz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"lB" = ( +/obj/structure/girder, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"mb" = ( +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"mg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"mn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"mq" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"mv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"mI" = ( +/obj/structure/closet/radiation, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"mL" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/turf/open/space/basic, +/area/space/nearstation) +"mO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/obj/structure/cable/multilayer/connected, +/turf/open/floor/plating, +/area/station/engineering/supermatter) +"ny" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter/room) +"nG" = ( +/obj/structure/reflector/single/anchored{ + dir = 5 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"oc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"oh" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"ou" = ( +/obj/machinery/light/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"oO" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"oS" = ( +/obj/machinery/power/supermatter_crystal/engine, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"oW" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"pv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/engineering/glass/critical{ + heat_proof = 1; + name = "Supermatter Chamber" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"pC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/camera/directional/west{ + c_tag = "Engineering Supermatter Port"; + network = list("ss13","engine") + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"pJ" = ( +/obj/structure/table, +/obj/item/analyzer, +/obj/item/pipe_dispenser, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"pR" = ( +/obj/structure/reflector/double/anchored{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"pU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"pW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/obj/effect/turf_decal/delivery, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"qh" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/supermatter/room) +"qm" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"qt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/structure/cable/layer1, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"rr" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"rs" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Atmos to Loop" + }, +/obj/structure/cable, +/obj/structure/cable/layer1, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"rz" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Engineering Emitter Room Starboard"; + network = list("ss13","engine") + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"rF" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/turf/open/space/basic, +/area/space/nearstation) +"tm" = ( +/obj/structure/cable/layer1, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"tw" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "External Gas to Loop" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"tU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"ua" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Mix Bypass" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"uh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"uD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"uK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"uQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"uV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"vt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"vE" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"vH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"wc" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/machinery/meter, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"wE" = ( +/obj/item/radio/intercom/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"wP" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Gas to Filter" + }, +/obj/machinery/airalarm/engine{ + dir = 8; + pixel_x = -23 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"wQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"xv" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"xD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"xP" = ( +/turf/template_noop, +/area/template_noop) +"yo" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/turf/open/space/basic, +/area/space/nearstation) +"yF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"yK" = ( +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"ze" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Engineering Supermatter Chamber"; + network = list("engine"); + dir = 9 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"zA" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"zE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"zV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"zW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, +/obj/structure/cable, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Ae" = ( +/obj/machinery/firealarm/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Ah" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Ao" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"Au" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Engineering Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"AT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"AV" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Emitter Room" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Br" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Cooling Loop to Gas" + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Bs" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Gas to Mix" + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Bw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/obj/structure/cable/multilayer/connected, +/turf/open/floor/plating, +/area/station/engineering/supermatter) +"BJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"BL" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter/room) +"BW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Co" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"CM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/machinery/power/energy_accumulator/grounding_rod/anchored, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"CU" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/machinery/camera/directional/south{ + c_tag = "Engineering Supermatter Fore"; + network = list("ss13","engine"); + pixel_x = 23 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"CW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Dc" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix to Gas" + }, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Dp" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"DM" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"DQ" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"DX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter) +"DZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/structure/window/reinforced/plasma/spawner/directional/west, +/obj/machinery/power/energy_accumulator/grounding_rod/anchored, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"Ew" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/meter, +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/status_display/ai/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"EI" = ( +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"EU" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"EX" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) +"Fu" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/directional/south, +/obj/structure/sign/warning/radiation/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"FD" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"FF" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"FL" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/supermatter) +"FP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/structure/sign/delamination_counter/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Gq" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"GG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/engineering/supermatter) +"GP" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/main) +"Ho" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"HF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/engineering/supermatter) +"HQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Engineering Supermatter Starboard"; + network = list("ss13","engine") + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"HS" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter) +"Ie" = ( +/obj/machinery/power/emitter/welded{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"Ik" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plating, +/area/station/engineering/supermatter) +"Iz" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Engine SMES Room" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/supermatter/room) +"IA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"IC" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"IK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"IV" = ( +/obj/structure/table, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"JK" = ( +/obj/structure/cable, +/obj/structure/cable/layer1, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Kd" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"Kh" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Kl" = ( +/obj/structure/grille, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Kw" = ( +/obj/structure/sign/warning/fire, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter) +"KA" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"La" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Lj" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 6 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Lk" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"Lm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Mu" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engine SMES Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/main) +"MB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"MT" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine) +"MV" = ( +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Ng" = ( +/obj/structure/reflector/single/anchored{ + dir = 9 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"NA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"NW" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"Oj" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"Ok" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter/room) +"OE" = ( +/obj/machinery/atmospherics/components/binary/valve{ + dir = 4; + name = "Output to Waste" + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"OK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/machinery/light_switch/directional/north, +/obj/item/tank/internals/emergency_oxygen/engi{ + pixel_x = 5 + }, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/glasses/meson/engine, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"OZ" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"Pd" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Gas to Filter" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"PZ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/engineering/glass/critical{ + heat_proof = 1; + name = "Supermatter Chamber" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"Qi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/radio/intercom/directional/north, +/obj/item/storage/toolbox/mechanical, +/obj/item/analyzer, +/obj/item/pipe_dispenser, +/obj/item/flashlight, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Ql" = ( +/turf/closed/wall/r_wall, +/area/space/nearstation) +"QB" = ( +/obj/machinery/airalarm/directional/west, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"QL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"QO" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"QS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"QX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Rp" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space/basic, +/area/space/nearstation) +"RA" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Sf" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Sh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + name = "Cooling Loop Bypass" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Sr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Su" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Tg" = ( +/obj/machinery/light/directional/north, +/obj/machinery/airalarm/directional/north, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"Tk" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter) +"TB" = ( +/obj/item/radio/intercom/directional/west, +/obj/machinery/camera/directional/west{ + c_tag = "Engineering Emitter Room Port"; + network = list("ss13","engine") + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"TH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"TK" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) +"TL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"TP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"Un" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"UD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"UK" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space/basic, +/area/space/nearstation) +"Vb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Ve" = ( +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"Vr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"VC" = ( +/obj/structure/rack, +/obj/item/wrench, +/obj/item/weldingtool, +/obj/item/clothing/head/utility/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"VI" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"Wh" = ( +/obj/structure/cable/multilayer/connected, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"Wi" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"WL" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"Xo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Xu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"XP" = ( +/obj/machinery/meter, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"XU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"Ya" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Yz" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"YK" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/turf/open/space/basic, +/area/space/nearstation) +"YQ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"YV" = ( +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"YW" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"YZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter) +"Zg" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 8; + filter_type = list(/datum/gas/nitrogen) + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"Zw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) + +(1,1,1) = {" +GP +oO +oO +oO +oO +GP +xP +hE +rF +hE +Rp +Rp +Rp +Rp +Rp +rF +oW +xP +Kl +Kl +Kl +xP +xP +oW +xP +xP +"} +(2,1,1) = {" +Mu +bM +MB +gO +ou +GP +Kd +TK +DM +TK +yo +rF +yo +rF +yo +fB +Kd +Kd +Kl +Ql +Kl +xP +xP +oW +xP +xP +"} +(3,1,1) = {" +GP +EU +tm +oO +fp +GP +xP +TK +DM +TK +EX +TK +EX +TK +mL +rF +xP +xP +Kl +Ql +Kl +xP +xP +oW +xP +xP +"} +(4,1,1) = {" +GP +FD +tm +VI +Lk +kX +Kd +TK +DM +TK +EX +TK +EX +TK +yo +fB +Kd +Kd +Kl +Ql +Kl +xP +xP +oW +oW +xP +"} +(5,1,1) = {" +GP +Tg +tm +yK +Wh +kX +xP +TK +DM +TK +EX +TK +EX +TK +mL +rF +xP +xP +Kl +Ql +Kl +xP +xP +xP +oW +xP +"} +(6,1,1) = {" +GP +kx +uh +Ao +QO +kX +Kd +TK +DM +TK +EX +TK +EX +TK +yo +fB +Kd +Kd +Kl +Ql +Kl +xP +xP +xP +oW +xP +"} +(7,1,1) = {" +GP +oO +uh +oO +fp +GP +xP +TK +DM +TK +EX +TK +EX +TK +mL +rF +xP +xP +Kl +Ql +Kl +xP +Kl +Kl +oW +oW +"} +(8,1,1) = {" +GP +oO +uh +gO +ou +GP +Kd +TK +DM +TK +EX +TK +EX +YK +UK +fB +Kd +Kd +Kl +Ql +Kl +Kd +Ql +Kl +Kl +xP +"} +(9,1,1) = {" +GP +oO +uh +oO +oO +GP +xP +TK +NW +fB +FF +YK +mq +Kd +Kd +Kd +oW +xP +Kl +Kl +Kl +xP +Ql +Ql +Kl +xP +"} +(10,1,1) = {" +BL +cs +Iz +cs +BL +BL +BL +ny +BL +cs +ny +cs +cs +BL +Kd +xP +xP +xP +Kd +xP +Kd +xP +xP +Kd +xP +xP +"} +(11,1,1) = {" +BL +lr +BJ +Lm +lz +Lm +pC +bz +gB +Lm +Br +xD +uK +BL +BL +BL +BL +BL +BL +BL +BL +Kd +Kl +Kl +Kl +Kd +"} +(12,1,1) = {" +BL +Su +oc +wQ +wQ +wQ +wQ +IA +gA +mb +zW +Xu +KA +jv +BL +IV +TB +QB +MV +VC +BL +xP +Kl +Ql +Kl +xP +"} +(13,1,1) = {" +cs +Su +TL +Sf +Ah +Ah +hI +Xo +dw +Sh +bq +La +RA +AT +cs +MV +MV +cS +MV +MV +BL +xP +Kl +Ql +Kl +xP +"} +(14,1,1) = {" +cs +zV +TL +ld +hr +YW +HS +GG +Bw +GG +HS +Su +mv +Un +AV +NA +NA +uQ +Ve +qm +BL +Kd +Kl +Ql +Kl +Kd +"} +(15,1,1) = {" +BL +Qi +TL +IC +wc +YW +HS +ze +EI +YV +HS +jQ +Zg +Gq +cs +UD +YQ +dC +dC +YQ +BL +xP +Kl +Ql +Kl +xP +"} +(16,1,1) = {" +BL +OK +TL +Fu +HS +HS +YZ +ak +CM +ak +HS +FP +vt +Ya +BL +Yz +MV +MV +MV +MV +BL +xP +Kl +Ql +Kl +xP +"} +(17,1,1) = {" +qh +Su +TL +CU +fc +wP +kz +XU +XU +XU +Tk +fd +BW +hA +cs +pR +MV +MV +Ng +MV +BL +Kd +Kl +Ql +Kl +Kd +"} +(18,1,1) = {" +cs +Su +TL +Pd +pv +IK +PZ +YV +oS +YV +FL +rr +pW +TP +cs +ez +MV +ez +lB +MV +BL +xP +Kl +Ql +Kl +xP +"} +(19,1,1) = {" +qh +Su +TL +dP +DX +dy +kz +yF +yF +yF +Kw +CW +iH +bk +cs +MV +MV +MV +nG +MV +BL +Kd +Kl +Ql +Kl +Kd +"} +(20,1,1) = {" +BL +jM +TL +XP +HS +Kw +YZ +jx +DZ +jx +HS +QX +vt +Ya +BL +Yz +MV +MV +MV +MV +BL +xP +Kl +Ql +Kl +xP +"} +(21,1,1) = {" +BL +jM +TL +Dp +tw +zA +HS +YV +EI +YV +HS +jQ +vt +Ya +cs +uD +vE +Ie +vE +DQ +BL +xP +Kl +Ql +Kl +xP +"} +(22,1,1) = {" +cs +tU +TL +Dp +tw +zA +HS +HF +mO +Ik +HS +jQ +fI +OE +aU +ik +ik +Vr +Ve +qm +BL +Kd +Kl +Ql +Kl +Kd +"} +(23,1,1) = {" +cs +Su +zE +fF +Zw +Zw +cx +Ho +qt +ua +Ew +Kh +ap +bs +cs +MV +MV +Wi +MV +MV +BL +xP +Kl +Ql +Kl +xP +"} +(24,1,1) = {" +BL +Su +uV +rs +JK +JK +JK +Dc +gA +mb +Bs +QS +aX +ee +BL +Lj +rz +Ae +wE +iZ +BL +xP +Kl +Ql +Kl +xP +"} +(25,1,1) = {" +BL +vH +pU +QL +kd +HQ +Vb +TH +gu +gu +TH +Sr +Co +Ok +BL +BL +BL +BL +BL +BL +BL +Kd +Kl +Kl +Kl +Kd +"} +(26,1,1) = {" +MT +Oj +Au +WL +MT +MT +BL +bF +xv +xv +aW +xv +pJ +mg +mn +mn +mn +mn +mn +mn +fi +xP +xP +Kd +xP +xP +"} +(27,1,1) = {" +xP +xP +xP +xP +xP +MT +xv +aW +aW +aW +aW +xv +jC +BL +iF +iF +iF +Kd +Kd +Kd +Kd +Kd +Kd +Kd +Kd +Kd +"} +(28,1,1) = {" +xP +xP +xP +xP +xP +eb +xv +OZ +eo +oh +oh +gF +mI +BL +xP +xP +Kd +xP +Kd +Ql +Kl +xP +xP +xP +xP +xP +"} +(29,1,1) = {" +xP +xP +xP +xP +xP +MT +BL +BL +BL +BL +BL +BL +BL +BL +Kd +Kd +Kd +Kd +Kd +Ql +Kl +xP +xP +xP +xP +xP +"} diff --git a/_maps/~monkestation/RandomEngines/BoxStation/teg.dmm b/_maps/~monkestation/RandomEngines/BoxStation/teg.dmm new file mode 100644 index 000000000000..ace6efc2f4f7 --- /dev/null +++ b/_maps/~monkestation/RandomEngines/BoxStation/teg.dmm @@ -0,0 +1,2312 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/power/thermoelectric_generator, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/circuit/green, +/area/station/engineering/atmospherics_engine) +"ar" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 10 + }, +/obj/machinery/meter, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"aw" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"ax" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/atmospherics_engine) +"aC" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/turf/open/space/basic, +/area/space/nearstation) +"aD" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"aM" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"bc" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high/empty, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"bk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"bl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"bp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"bU" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/heat_exchanging/junction, +/turf/open/floor/plating, +/area/station/engineering/atmospherics_engine) +"cj" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"cn" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/turf/open/space/basic, +/area/space/nearstation) +"cp" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"cq" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/obj/structure/sign/nanotrasen{ + pixel_y = -32 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"cx" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"dh" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"ds" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"dy" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"dB" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 + }, +/turf/open/space/basic, +/area/space/nearstation) +"dU" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"dX" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"eC" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"eE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable/layer1, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"eK" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"eQ" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Mix to Burn" + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"ff" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space/basic, +/area/space/nearstation) +"fq" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/space/basic, +/area/space/nearstation) +"fr" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"ft" = ( +/obj/structure/sign/warning/secure_area/directional/east, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"fS" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space/basic, +/area/space/nearstation) +"fT" = ( +/obj/machinery/atmospherics/components/binary/circulator{ + dir = 8 + }, +/turf/open/floor/circuit/green, +/area/station/engineering/atmospherics_engine) +"gd" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"gl" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/main) +"gs" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) +"gD" = ( +/obj/effect/turf_decal/bot, +/obj/structure/sign/warning/no_smoking/directional/north, +/obj/machinery/light/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"gG" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"gT" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space/basic, +/area/space/nearstation) +"gZ" = ( +/obj/machinery/light/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"hg" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"hs" = ( +/obj/structure/grille, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"hL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"hM" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/machinery/sparker/directional/west{ + id = "teg_igniter" + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmospherics_engine) +"if" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"ig" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"iy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"iI" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"ja" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"jg" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/window/left/directional/south{ + name = "Gas Canister Storage"; + req_access = list("engineering") + }, +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"km" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/effect/mapping_helpers/apc/full_charge, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"ku" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Engineering Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"kN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, +/obj/machinery/meter, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"kV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 1 + }, +/obj/machinery/meter, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"lb" = ( +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"lm" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"lp" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"lv" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"ly" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"lA" = ( +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Burn to Hot" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"lH" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/turf/open/space/basic, +/area/space/nearstation) +"lY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"mc" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"md" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine) +"mh" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmospherics_engine) +"ml" = ( +/turf/template_noop, +/area/template_noop) +"mm" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"mx" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"mG" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + dir = 8; + name = "Cold Loop to Space" + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"mH" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"mJ" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"mW" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"nf" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"nh" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible, +/obj/machinery/atmospherics/components/binary/pump{ + name = "Burn Bypass"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"nw" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"nx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"os" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"ot" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"oA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"oK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"pg" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"pt" = ( +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible, +/obj/machinery/meter, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"qj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"qJ" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"qO" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"re" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/structure/table/reinforced, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/multitool, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"rh" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "Burn Chamber" + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"rs" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 10 + }, +/obj/machinery/meter, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"ry" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Space Bypass" + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"rA" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"rK" = ( +/obj/structure/cable, +/obj/machinery/power/smes/engineering, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"rZ" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmospherics_engine) +"so" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"sJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table/reinforced, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/glasses/meson/engine, +/obj/item/tank/internals/emergency_oxygen/engi, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"sX" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"tp" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix to Engine" + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"ts" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable/layer1, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"tw" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Burn Byproducts" + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"tI" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"tP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engine SMES Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/iron/textured, +/area/station/engineering/atmospherics_engine) +"tU" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"ug" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/glasses/meson/engine, +/obj/item/tank/internals/emergency_oxygen/engi, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"up" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"uv" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"ux" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/space/basic, +/area/space/nearstation) +"vr" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/right/directional/south{ + name = "Gas Canister Storage"; + req_access = list("engineering") + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"vs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable/layer1, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"vD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable/multilayer/connected, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"vF" = ( +/turf/closed/wall/r_wall, +/area/space/nearstation) +"vP" = ( +/obj/machinery/atmospherics/components/trinary/mixer, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"vW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"vX" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"wb" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"wi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"wu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"wx" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"wK" = ( +/obj/effect/turf_decal/bot, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/sign/poster/official/safety_eye_protection{ + pixel_y = 32 + }, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"wL" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"wP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"wU" = ( +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"xr" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/plating, +/area/station/engineering/atmospherics_engine) +"yc" = ( +/obj/structure/table, +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - SMES, Engine"; + name = "engineering camera" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"yw" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"yF" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"yO" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"yS" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmospherics_engine) +"zy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"zB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"zR" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "Hot Loop" + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"zY" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 6 + }, +/obj/machinery/meter, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Aa" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Ak" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"AM" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"AP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"AZ" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 + }, +/obj/machinery/sparker/directional/east{ + id = "teg_igniter" + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmospherics_engine) +"Bf" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Bg" = ( +/obj/structure/table/reinforced, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/book/manual/wiki/engineering_hacking{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/book/manual/wiki/engineering_guide, +/obj/item/book/manual/wiki/engineering_construction{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Bh" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"BG" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"CB" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"CH" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"CN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/meter, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"CY" = ( +/obj/machinery/light/directional/east, +/obj/structure/sign/warning/engine_safety/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/closet/firecloset, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Df" = ( +/obj/effect/turf_decal/bot, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/sign/poster/official/safety_eye_protection{ + pixel_y = 32 + }, +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Dj" = ( +/obj/effect/turf_decal/bot, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Dk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/brown/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Dm" = ( +/obj/machinery/light/directional/east, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/item/bot_assembly/firebot, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Dq" = ( +/obj/machinery/door/poddoor{ + id = "teg_vent"; + name = "TEG Vent" + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmospherics_engine) +"Dt" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/turf/open/space/basic, +/area/space/nearstation) +"DS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"EF" = ( +/obj/machinery/light/directional/west, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"EV" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) +"EY" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/atmospherics/components/binary/valve/digital{ + dir = 8; + name = "Space to Cold Loop" + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"FS" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Gh" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Gk" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "Cold Loop" + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Go" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Gr" = ( +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"GJ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"GY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/machinery/meter, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Hk" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engine SMES Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/main) +"HM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"HO" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Hot to Burn" + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"HY" = ( +/obj/structure/sign/warning/secure_area, +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine) +"Im" = ( +/obj/structure/sign/warning/secure_area, +/turf/closed/wall/r_wall, +/area/station/engineering/atmospherics_engine) +"IJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmospherics_engine) +"IL" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Jj" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"Jo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"JE" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/atmospherics_engine) +"Kd" = ( +/obj/machinery/atmospherics/components/binary/pump, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Kk" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"KF" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1 + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmospherics_engine) +"KK" = ( +/obj/structure/sign/nanotrasen{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Lj" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Lr" = ( +/obj/structure/rack, +/obj/item/crowbar/large, +/obj/item/flashlight, +/obj/item/pipe_dispenser, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"LC" = ( +/obj/machinery/atmospherics/components/binary/circulator/cold{ + dir = 4 + }, +/turf/open/floor/circuit/green, +/area/station/engineering/atmospherics_engine) +"LD" = ( +/obj/machinery/light/directional/north, +/obj/machinery/airalarm/directional/north, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"LQ" = ( +/obj/machinery/light/directional/east, +/obj/structure/sign/warning/no_smoking/directional/east, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"LZ" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/turf/open/space/basic, +/area/space/nearstation) +"Mh" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Mk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Engineering Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"Mu" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"MD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"MW" = ( +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"Nj" = ( +/obj/machinery/button/door/directional/south{ + id = "teg_vent"; + name = "TEG Vent Control"; + req_access = list("engineering"); + pixel_x = 6 + }, +/obj/machinery/button/ignition{ + id = "teg_igniter"; + pixel_x = -6; + pixel_y = -24 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"No" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/turf/open/floor/plating, +/area/station/engineering/atmospherics_engine) +"NF" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 9 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Ot" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"OD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"OH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"OO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Pq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Pv" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + name = "Mix to Burn" + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"QA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"QE" = ( +/turf/closed/wall, +/area/station/engineering/atmospherics_engine) +"QG" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"QH" = ( +/obj/structure/cable/multilayer/connected, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"QU" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/turf/open/space/basic, +/area/space/nearstation) +"Rl" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/layer_manifold/general/visible, +/turf/open/floor/plating, +/area/station/engineering/atmospherics_engine) +"Rr" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "Waste Release" + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"RA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Sd" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"So" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"SB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/mechanical, +/obj/item/pipe_dispenser, +/obj/item/flashlight, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"SM" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"SO" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmospherics_engine) +"To" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"Tq" = ( +/obj/structure/table/reinforced, +/obj/item/radio/intercom/directional/east, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/glasses/meson/engine, +/obj/item/tank/internals/emergency_oxygen/engi, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"TT" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Uf" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Ui" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Ut" = ( +/obj/structure/sign/warning/fire/directional/south, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Uz" = ( +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"UF" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/structure/table/reinforced, +/obj/item/analyzer, +/obj/item/analyzer{ + pixel_x = 7; + pixel_y = 3 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"UI" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"UT" = ( +/obj/structure/sign/warning/no_smoking/directional/west, +/obj/structure/closet/emcloset, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Vj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/orange/visible{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Vv" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/atmospherics_engine) +"Wg" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/main) +"Wj" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmospherics_engine) +"Wr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engine Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/iron/textured, +/area/station/engineering/atmospherics_engine) +"WP" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Xz" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"XD" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"Yj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Yl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/orange/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"YB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/orange/visible, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"YM" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible, +/turf/open/floor/plating, +/area/station/engineering/atmospherics_engine) +"YS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"Zc" = ( +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space/nearstation) +"Zv" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"ZT" = ( +/obj/structure/cable/layer1, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/main) + +(1,1,1) = {" +Wg +cp +cp +cp +cp +Wg +ml +ml +Dt +QU +Dt +ff +ff +ff +ff +ff +QU +ml +hs +hs +hs +ml +ml +mW +ml +ml +"} +(2,1,1) = {" +Hk +iy +zy +nw +gZ +Wg +dh +dh +EV +Jj +EV +cn +QU +cn +QU +cn +dB +dh +hs +vF +hs +ml +ml +mW +ml +ml +"} +(3,1,1) = {" +Wg +XD +ZT +cp +rK +Wg +ml +ml +EV +Jj +EV +gs +EV +gs +EV +LZ +QU +ml +hs +vF +hs +ml +ml +mW +ml +ml +"} +(4,1,1) = {" +Wg +cj +ZT +dy +eK +gl +dh +dh +EV +Jj +EV +gs +EV +gs +EV +cn +dB +dh +hs +vF +hs +ml +ml +mW +mW +ml +"} +(5,1,1) = {" +Wg +LD +ZT +MW +QH +gl +ml +ml +EV +Jj +EV +gs +EV +gs +EV +LZ +QU +ml +hs +vF +hs +ml +ml +ml +mW +ml +"} +(6,1,1) = {" +Wg +yc +To +AP +tU +gl +dh +dh +EV +Jj +EV +gs +EV +gs +EV +cn +dB +dh +hs +vF +hs +ml +ml +ml +mW +ml +"} +(7,1,1) = {" +Wg +cp +To +cp +rK +Wg +ml +ml +EV +Jj +EV +gs +EV +gs +EV +LZ +QU +ml +hs +vF +hs +ml +hs +hs +mW +mW +"} +(8,1,1) = {" +Wg +cp +To +nw +gZ +Wg +dh +dh +EV +Jj +EV +gs +EV +gs +aC +gT +dB +dh +hs +vF +hs +dh +vF +hs +hs +ml +"} +(9,1,1) = {" +Wg +cp +To +cp +cp +Wg +ml +ml +EV +cx +dB +Kk +aC +mc +dh +dh +dh +ml +hs +hs +hs +dh +vF +vF +hs +ml +"} +(10,1,1) = {" +Vv +ax +tP +ax +Vv +Vv +Vv +Vv +yS +ax +ax +yS +Vv +Vv +dh +ml +ml +ml +dh +ml +dh +ml +ml +dh +ml +ml +"} +(11,1,1) = {" +Vv +Jo +Ak +ja +re +ug +lb +EF +mG +lb +lb +EY +Lr +Vv +Vv +Vv +Vv +Vv +Vv +Vv +Vv +dh +hs +hs +hs +dh +"} +(12,1,1) = {" +Vv +Df +Gh +YS +WP +lb +lb +hg +OH +lm +ry +DS +lb +gd +UT +Bg +UF +Mh +Mh +FS +Vv +ml +hs +vF +hs +ml +"} +(13,1,1) = {" +ax +dX +lp +bp +sX +sX +lb +hg +DS +qj +lb +ar +lm +lm +lm +lm +lm +lm +Kd +KK +Vv +ml +hs +vF +hs +ml +"} +(14,1,1) = {" +ax +dX +jg +bp +dU +dU +vW +lb +mH +fr +Jo +ja +lY +RA +RA +SM +SM +RA +iI +eC +Vv +dh +hs +vF +hs +dh +"} +(15,1,1) = {" +Im +dX +lp +wP +lv +lv +bk +Gk +os +aM +LC +OD +CN +lm +aD +HM +HM +lm +lm +Xz +Vv +ml +hs +vF +hs +ml +"} +(16,1,1) = {" +Vv +gD +Sd +ts +vs +vs +vs +eE +vD +vX +aa +oA +Pq +QE +QE +rA +lb +lb +lb +Bh +Vv +ml +hs +vF +hs +ml +"} +(17,1,1) = {" +Wr +QA +ds +CB +Dj +Dj +lb +lb +zY +BG +fT +oK +GY +mm +UI +yO +yO +yO +yO +Zv +Vv +dh +hs +vF +hs +dh +"} +(18,1,1) = {" +Vv +km +wu +wb +wx +wx +lb +hg +MD +GJ +QA +TT +up +up +up +AM +AM +up +ly +cq +Vv +ml +hs +vF +hs +ml +"} +(19,1,1) = {" +Wr +Jo +ot +Go +qj +lb +lb +hg +MD +hg +Yl +qJ +gG +yO +aD +Yj +Yj +yO +yO +nf +Vv +dh +hs +vF +hs +dh +"} +(20,1,1) = {" +Vv +wL +Ui +bl +RA +aw +lv +zR +MD +hg +kN +qJ +Uf +lb +qO +Dm +ft +QG +Tq +bc +Vv +ml +hs +vF +hs +ml +"} +(21,1,1) = {" +Vv +yF +CH +Vj +zB +YB +so +QE +yw +lb +eQ +lb +Uf +Nj +Vv +Vv +Vv +Vv +Vv +Vv +Vv +Zc +hs +vF +hs +ml +"} +(22,1,1) = {" +ax +mx +vr +nx +RA +OO +RA +RA +wi +RA +OO +iI +kV +HO +No +lH +bU +hM +SO +Wj +Dq +mW +hs +vF +hs +dh +"} +(23,1,1) = {" +ax +mx +mJ +nx +lb +ig +lv +rh +if +lv +vP +lv +nh +Pv +xr +fq +xr +KF +IJ +mh +Dq +mW +hs +vF +hs +ml +"} +(24,1,1) = {" +Vv +wK +pg +nx +lb +lb +lb +lb +rs +yO +yO +yO +Yj +lA +No +lH +bU +SO +rZ +AZ +Dq +mW +hs +vF +hs +ml +"} +(25,1,1) = {" +Vv +QA +hL +tp +CY +SB +sJ +up +lb +lb +lb +lb +Ut +Vv +Vv +Vv +Vv +Vv +JE +Vv +Vv +Zc +hs +hs +hs +dh +"} +(26,1,1) = {" +md +Ot +Mk +tI +md +md +Vv +Aa +lb +lb +lb +Gr +pt +Rl +Lj +Lj +Lj +Lj +NF +ml +dh +ml +ml +dh +ml +ml +"} +(27,1,1) = {" +ml +ml +ml +ml +ml +md +qO +lb +lb +Bf +tw +Dk +lb +ax +dh +dh +fS +dh +fS +dh +fS +dh +dh +dh +dh +dh +"} +(28,1,1) = {" +ml +ml +ml +ml +ml +ku +So +IL +LQ +uv +lb +Uz +Rr +YM +wU +wU +wU +wU +wU +wU +Mu +ml +ml +ml +ml +ml +"} +(29,1,1) = {" +ml +ml +ml +ml +ml +HY +Vv +Vv +Vv +Vv +Vv +Vv +Vv +Vv +ux +dh +dh +dh +vF +hs +ml +ml +ml +ml +ml +ml +"} diff --git a/_maps/~monkestation/RandomEngines/MetaStation/singularity.dmm b/_maps/~monkestation/RandomEngines/MetaStation/singularity.dmm index 83b8fe4e0813..774617cb34a3 100644 --- a/_maps/~monkestation/RandomEngines/MetaStation/singularity.dmm +++ b/_maps/~monkestation/RandomEngines/MetaStation/singularity.dmm @@ -308,15 +308,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"yo" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Space Engine Room" - }, -/obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) "yR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -511,6 +502,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"Ki" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/obj/structure/cable/layer1, +/obj/structure/cable/layer1, +/turf/open/space/basic, +/area/space/nearstation) "KS" = ( /turf/open/space/basic, /area/space/nearstation) @@ -603,11 +601,10 @@ /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) "Rw" = ( -/obj/structure/grille, /obj/machinery/camera/emp_proof/directional/west{ c_tag = "Singularity Engine #4" }, -/turf/open/space/basic, +/turf/open/floor/plating/airless, /area/station/engineering/supermatter/room) "Sh" = ( /obj/effect/turf_decal/stripes/line, @@ -905,7 +902,7 @@ MT dx ID dc -yo +SS je je je @@ -1087,9 +1084,9 @@ kO MT An nM -KS nM -An +nM +nM MT kO xA @@ -1109,13 +1106,13 @@ je je An An -ol -An +Ki +nM Rw nM -KS -KS -KS +nM +An +nM nM Bc An @@ -1134,6 +1131,60 @@ je je je je +Bc +An +ol +An +nM +nM +nM +nM +An +nM +nM +nM +An +An +bM +je +je +je +je +je +je +"} +(18,1,1) = {" +je +je +je +je +bM +An +ol +An +An +nM +An +nM +An +nM +nM +An +An +KS +ej +je +je +je +je +je +je +"} +(19,1,1) = {" +je +je +je +je An hW ol @@ -1156,7 +1207,7 @@ je je je "} -(18,1,1) = {" +(20,1,1) = {" je je je @@ -1183,7 +1234,7 @@ je je je "} -(19,1,1) = {" +(21,1,1) = {" je je je @@ -1210,7 +1261,7 @@ je je je "} -(20,1,1) = {" +(22,1,1) = {" je je je @@ -1237,7 +1288,7 @@ je je je "} -(21,1,1) = {" +(23,1,1) = {" je je je @@ -1264,7 +1315,7 @@ je je je "} -(22,1,1) = {" +(24,1,1) = {" je je je @@ -1291,7 +1342,7 @@ je je je "} -(23,1,1) = {" +(25,1,1) = {" je je je @@ -1318,7 +1369,7 @@ je je je "} -(24,1,1) = {" +(26,1,1) = {" je je je @@ -1345,7 +1396,7 @@ je je je "} -(25,1,1) = {" +(27,1,1) = {" je je je @@ -1372,7 +1423,7 @@ je je je "} -(26,1,1) = {" +(28,1,1) = {" je je je @@ -1399,7 +1450,7 @@ je je je "} -(27,1,1) = {" +(29,1,1) = {" je je je @@ -1426,7 +1477,7 @@ je je je "} -(28,1,1) = {" +(30,1,1) = {" je je je @@ -1453,60 +1504,6 @@ je je je "} -(29,1,1) = {" -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -"} -(30,1,1) = {" -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -je -"} (31,1,1) = {" je je diff --git a/auxlua.dll b/auxlua.dll index c57e961ab585..4f712c26d82e 100755 Binary files a/auxlua.dll and b/auxlua.dll differ diff --git a/code/__DEFINES/_helpers.dm b/code/__DEFINES/_helpers.dm index 3e88256b462a..cd959523dd58 100644 --- a/code/__DEFINES/_helpers.dm +++ b/code/__DEFINES/_helpers.dm @@ -27,3 +27,7 @@ /// Takes a datum as input, returns its ref string #define text_ref(datum) ref(datum) + +/// A null statement to guard against EmptyBlock lint without necessitating the use of pass() +/// Used to avoid proc-call overhead. But use sparingly. Probably pointless in most places. +#define EMPTY_BLOCK_GUARD ; diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index f06cd7be07e6..e7e8451b4b17 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -526,6 +526,9 @@ * If a PDA is in this list, it can always be painted with ACCESS_CHANGE_IDS. * Used to see pda_region in [/datum/controller/subsystem/id_access/proc/setup_tgui_lists] */ + +///Monkestation Edit - adding non-head QM to the list so it may be properly painted. may require removal of the old head version. + #define PDA_PAINTING_REGIONS list( \ /obj/item/modular_computer/pda = list(REGION_GENERAL), \ /obj/item/modular_computer/pda/clown = list(REGION_GENERAL), \ @@ -558,8 +561,8 @@ /obj/item/modular_computer/pda/atmos = list(REGION_ENGINEERING), \ /obj/item/modular_computer/pda/chemist = list(REGION_MEDBAY), \ /obj/item/modular_computer/pda/geneticist = list(REGION_RESEARCH), \ + /obj/item/modular_computer/pda/quartermaster = list(REGION_SUPPLY), \ ) - /// All regions that make up the station area. Helper define to quickly designate a region as part of the station or not. Access via SSid_access.station_regions. #define REGION_AREA_STATION list( \ REGION_COMMAND, \ diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm index 72fc999fe333..84a4fbbac4c6 100644 --- a/code/__DEFINES/achievements.dm +++ b/code/__DEFINES/achievements.dm @@ -56,6 +56,7 @@ #define MEDAL_DEBT_EXTINGUISHED "Debt Extinguished" #define MEDAL_ARCHMAGE "Archmage" #define MEDAL_THEORETICAL_LIMITS "All Within Theoretical Limits" +#define MEDAL_JARED_LETO "Jared Leto" // Monkestation addition //Skill medal hub IDs #define MEDAL_LEGENDARY_MINER "Legendary Miner" diff --git a/code/__DEFINES/anomaly.dm b/code/__DEFINES/anomaly.dm index 7422af3fc65d..b6132607938e 100644 --- a/code/__DEFINES/anomaly.dm +++ b/code/__DEFINES/anomaly.dm @@ -4,7 +4,7 @@ */ ///Time in ticks before the anomaly goes poof/explodes depending on type. -#define ANOMALY_COUNTDOWN_TIMER (99 SECONDS) +#define ANOMALY_COUNTDOWN_TIMER (200 SECONDS) // monke edit: 99 seconds -> 200 seconds /** * Nuisance/funny anomalies diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index 14641092d6dc..0eba623df047 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -330,3 +330,13 @@ GLOBAL_LIST_INIT(human_invader_antagonists, list( // This flag disables certain checks that presume antagonist datums mean 'baddie'. #define FLAG_FAKE_ANTAG (1 << 0) + +#define FREEDOM_IMPLANT_CHARGES 4 + +/// Changeling abilities with DNA cost = this are innately given to all changelings +#define CHANGELING_POWER_INNATE -1 +/// Changeling abilities with DNA cost = this are not obtainable by changelings - either used for secret unlockable or abstract abilities +#define CHANGELING_POWER_UNOBTAINABLE -2 + +/// For changelings, this is how many recent say lines are retained when absorbing a mob +#define LING_ABSORB_RECENT_SPEECH 8 diff --git a/code/__DEFINES/atmospherics/atmos_mob_interaction.dm b/code/__DEFINES/atmospherics/atmos_mob_interaction.dm index 4144be832e29..26f13bc0522c 100644 --- a/code/__DEFINES/atmospherics/atmos_mob_interaction.dm +++ b/code/__DEFINES/atmospherics/atmos_mob_interaction.dm @@ -84,6 +84,9 @@ /// The temperature the blue icon is displayed. #define BODYTEMP_COLD_WARNING_3 (BODYTEMP_COLD_DAMAGE_LIMIT - 150) //120k +/// Beyond this temperature, being on fire will increase body temperature by less and less +#define BODYTEMP_FIRE_TEMP_SOFTCAP 1200 + /// The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE #define PRESSURE_DAMAGE_COEFFICIENT 2 #define MAX_HIGH_PRESSURE_DAMAGE 2 diff --git a/code/__DEFINES/atmospherics/atmos_piping.dm b/code/__DEFINES/atmospherics/atmos_piping.dm index 3d864e6485f7..bdbf845a02f0 100644 --- a/code/__DEFINES/atmospherics/atmos_piping.dm +++ b/code/__DEFINES/atmospherics/atmos_piping.dm @@ -84,8 +84,14 @@ // Ventcrawling bitflags, handled in var/vent_movement ///Allows for ventcrawling to occur. All atmospheric machines have this flag on by default. Cryo is the exception -#define VENTCRAWL_ALLOWED (1<<0) +#define VENTCRAWL_ALLOWED (1<<0) ///Allows mobs to enter or leave from atmospheric machines. On for passive, unary, and scrubber vents. #define VENTCRAWL_ENTRANCE_ALLOWED (1<<1) ///Used to check if a machinery is visible. Called by update_pipe_vision(). On by default for all except cryo. -#define VENTCRAWL_CAN_SEE (1<<2) +#define VENTCRAWL_CAN_SEE (1<<2) + +DEFINE_BITFIELD(vent_movement, list( + "Ventcrawl Allowed" = VENTCRAWL_ALLOWED, + "Ventcrawl Entrance Allowed" = VENTCRAWL_ENTRANCE_ALLOWED, + "Ventcrawl Can See" = VENTCRAWL_CAN_SEE, +)) diff --git a/code/__DEFINES/basic_mobs.dm b/code/__DEFINES/basic_mobs.dm index 6c8a3022e8fa..c7275f7c423e 100644 --- a/code/__DEFINES/basic_mobs.dm +++ b/code/__DEFINES/basic_mobs.dm @@ -26,3 +26,5 @@ #define MOOK_ATTACK_ACTIVE 2 #define MOOK_ATTACK_STRIKE 3 +///keeps track of how many gutlunches are born +GLOBAL_VAR_INIT(gutlunch_count, 0) diff --git a/code/__DEFINES/changeling.dm b/code/__DEFINES/changeling.dm deleted file mode 100644 index 1913e62c0e9a..000000000000 --- a/code/__DEFINES/changeling.dm +++ /dev/null @@ -1,4 +0,0 @@ -/// The duration of the fakedeath coma. -#define LING_FAKEDEATH_TIME (40 SECONDS) -/// The number of recent spoken lines to gain on absorbing a mob -#define LING_ABSORB_RECENT_SPEECH 8 diff --git a/code/__DEFINES/cleaning.dm b/code/__DEFINES/cleaning.dm index 7c954602215e..79708cd152b6 100644 --- a/code/__DEFINES/cleaning.dm +++ b/code/__DEFINES/cleaning.dm @@ -29,3 +29,8 @@ #define CLEAN_SCRUB (CLEAN_WASH | CLEAN_TYPE_FINGERPRINTS | CLEAN_TYPE_FIBERS | CLEAN_TYPE_HARD_DECAL) #define CLEAN_RAD CLEAN_TYPE_RADIATION #define CLEAN_ALL ALL + +// Footprint sprites to use when making footprints in blood, oil, etc. +#define FOOTPRINT_SPRITE_SHOES "shoes" +#define FOOTPRINT_SPRITE_PAWS "paws" +#define FOOTPRINT_SPRITE_CLAWS "claws" diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index 283bcba679f7..a4c6bdc05795 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -96,6 +96,7 @@ #define CAT_LIZARD "Lizard Food" #define CAT_MEAT "Meats" #define CAT_SEAFOOD "Seafood" +#define CAT_MARTIAN "Martian Food" #define CAT_MISCFOOD "Misc. Food" #define CAT_MEXICAN "Mexican Food" #define CAT_MOTH "Mothic Food" @@ -118,6 +119,7 @@ GLOBAL_LIST_INIT(crafting_category_food, list( CAT_LIZARD, CAT_MEAT, CAT_SEAFOOD, + CAT_MARTIAN, CAT_MISCFOOD, CAT_MEXICAN, CAT_MOTH, diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_explosion.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_explosion.dm index 7d7ba8613985..856bd1fd56df 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_explosion.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_explosion.dm @@ -10,6 +10,7 @@ #define COMSIG_AREA_INTERNAL_EXPLOSION "area_internal_explosion" /// When returned on a signal hooked to [COMSIG_ATOM_EXPLODE], [COMSIG_ATOM_INTERNAL_EXPLOSION], or [COMSIG_AREA_INTERNAL_EXPLOSION] it prevents the explosion from being propagated further. #define COMSIG_CANCEL_EXPLOSION (1<<0) +#define COMSIG_AREA_EXPLOSION_SHOCKWAVE "area_explosion_shockwave" /// from [/atom/movable/proc/set_explosion_resistance] : (old_block, new_block) #define COMSIG_MOVABLE_EXPLOSION_BLOCK_CHANGED "explosion_block_changed" diff --git a/code/__DEFINES/dcs/signals/signals_bitrunning.dm b/code/__DEFINES/dcs/signals/signals_bitrunning.dm index 957e61ae303c..3bca73db596b 100644 --- a/code/__DEFINES/dcs/signals/signals_bitrunning.dm +++ b/code/__DEFINES/dcs/signals/signals_bitrunning.dm @@ -1,34 +1,50 @@ -/// from /obj/machinery/netpod/default_pry_open() : (mob/living/intruder) -#define COMSIG_BITRUNNER_CROWBAR_ALERT "bitrunner_crowbar" +/// from /atom/movable/screen/alert/bitrunning/qserver_domain_complete +#define COMSIG_BITRUNNER_ALERT_SEVER "bitrunner_alert_sever" /// from /obj/effect/bitrunning/loot_signal: (points) #define COMSIG_BITRUNNER_GOAL_POINT "bitrunner_goal_point" -/// from /obj/machinery/quantum_server/on_goal_turf_entered(): (atom/entered, reward_points) -#define COMSIG_BITRUNNER_DOMAIN_COMPLETE "bitrunner_complete" +// Netpods + +/// from /obj/machinery/netpod/sever_connection() +#define COMSIG_BITRUNNER_NETPOD_SEVER "bitrunner_netpod_sever" -/// from /obj/machinery/netpod/on_take_damage() +/// from /obj/machinery/netpod/default_pry_open() : (mob/living/intruder) +#define COMSIG_BITRUNNER_CROWBAR_ALERT "bitrunner_crowbar" + +/// from /obj/machinery/netpod/on_damage_taken() #define COMSIG_BITRUNNER_NETPOD_INTEGRITY "bitrunner_netpod_damage" -/// from /obj/structure/hololadder and complete alert -#define COMSIG_BITRUNNER_SAFE_DISCONNECT "bitrunner_disconnect" +/// from /obj/machinery/netpod/open_machine() +#define COMSIG_BITRUNNER_NETPOD_OPENED "bitrunner_netpod_opened" + +// Server -/// from /obj/machinery/netpod/open_machine(), /obj/machinery/quantum_server, etc (obj/machinery/netpod) -#define COMSIG_BITRUNNER_SEVER_AVATAR "bitrunner_sever" +/// from /obj/machinery/quantum_server/on_goal_turf_entered(): (atom/entered, reward_points) +#define COMSIG_BITRUNNER_DOMAIN_COMPLETE "bitrunner_complete" + +/// from /obj/machinery/quantum_server/generate_loot() +#define COMSIG_BITRUNNER_CACHE_SEVER "bitrunner_cache_sever" + +/// from /obj/machinery/quantum_server/sever_connection() +#define COMSIG_BITRUNNER_QSRV_SEVER "bitrunner_qserver_sever" /// from /obj/machinery/quantum_server/shutdown() : (mob/living) #define COMSIG_BITRUNNER_SHUTDOWN_ALERT "bitrunner_shutdown" -// Notifies the bitrunners -/// from /datum/antagonist/cyber_police/proc/notify() : +/// from /obj/machinery/quantum_server/notify_threat() #define COMSIG_BITRUNNER_THREAT_CREATED "bitrunner_threat" -// Informs the server to up the threat count -/// from event spawns: (mob/living) -#define COMSIG_BITRUNNER_SPAWN_GLITCH "bitrunner_spawn_glitch" - -/// from /obj/machinery/quantum_server/refreshParts(): (servo rating) -#define COMSIG_BITRUNNER_SERVER_UPGRADED "bitrunner_server_upgraded" - /// from /obj/machinery/quantum_server/scrub_vdom() #define COMSIG_BITRUNNER_DOMAIN_SCRUBBED "bitrunner_domain_scrubbed" + +/// from /obj/machienry/quantum_server/station_spawn() +#define COMSIG_BITRUNNER_STATION_SPAWN "bitrunner_station_spawn" + +// Ladder +/// from /obj/structure/hololadder/disconnect() +#define COMSIG_BITRUNNER_LADDER_SEVER "bitrunner_ladder_sever" + + +/// deprecated +#define COMSIG_BITRUNNER_SPAWN_GLITCH "bitrunner_spawn_glitch" diff --git a/code/__DEFINES/dcs/signals/signals_camera.dm b/code/__DEFINES/dcs/signals/signals_camera.dm new file mode 100644 index 000000000000..92e9b94f35bb --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_camera.dm @@ -0,0 +1,4 @@ +///Signal sent when a /datum/trackable found a target: (mob/living/target) +#define COMSIG_TRACKABLE_TRACKING_TARGET "comsig_trackable_tracking_target" +///Signal sent when the mob a /datum/trackable is actively following changes glide size: mob/living/target, new_glide_size) +#define COMSIG_TRACKABLE_GLIDE_CHANGED "comsig_trackable_glide_changed" diff --git a/code/__DEFINES/dcs/signals/signals_clothing.dm b/code/__DEFINES/dcs/signals/signals_clothing.dm index b48acbf97e93..03b695aca4c3 100644 --- a/code/__DEFINES/dcs/signals/signals_clothing.dm +++ b/code/__DEFINES/dcs/signals/signals_clothing.dm @@ -1,6 +1,21 @@ // /obj/item/clothing /// (/obj/item/clothing, visor_state) - When a clothing gets it's visor toggled. #define COMSIG_CLOTHING_VISOR_TOGGLE "clothing_visor_toggle" -// /obj/item/clothing -/// Sent when mobs try to equip clothing on others through attacking -#define COMSIG_CLOTHING_ATTACK_EQUIP "clothing_attack_equip" +/// From an undersuit being adjusted: () +#define COMSIG_CLOTHING_UNDER_ADJUSTED "clothing_under_adjusted" + +// Accessory sending to clothing +/// /obj/item/clothing/accessory/successful_attach : (obj/item/clothing/under/attached_to) +/// The accessory, at the point of signal sent, is in the clothing's accessory list / loc +#define COMSIG_CLOTHING_ACCESSORY_ATTACHED "clothing_accessory_pinned" +/// /obj/item/clothing/accessory/detach : (obj/item/clothing/under/detach_from) +/// The accessory, at the point of signal sent, is no longer in the accessory list but may still be in the loc +#define COMSIG_CLOTHING_ACCESSORY_DETACHED "clothing_accessory_unpinned" + +// To accessories themselves +/// /obj/item/clothing/accessory/successful_attach : (obj/item/clothing/under/attached_to) +/// The accessory, at the point of signal sent, is in the clothing's accessory list / loc +#define COMSIG_ACCESSORY_ATTACHED "accessory_pinned" +/// /obj/item/clothing/accessory/detach : (obj/item/clothing/under/detach_from) +/// The accessory, at the point of signal sent, is no longer in the accessory list but may still be in the loc +#define COMSIG_ACCESSORY_DETACHED "accessory_unpinned" diff --git a/code/__DEFINES/dcs/signals/signals_datum.dm b/code/__DEFINES/dcs/signals/signals_datum.dm index ff7d1e2cee6e..c65762eb6269 100644 --- a/code/__DEFINES/dcs/signals/signals_datum.dm +++ b/code/__DEFINES/dcs/signals/signals_datum.dm @@ -43,12 +43,8 @@ #define COMSIG_GASMIX_REACTED "comsig_gasmix_reacted" // Modular computer's file signals. Tells the program datum something is going on. -/// From /obj/item/modular_computer/proc/store_file: () -#define COMSIG_MODULAR_COMPUTER_FILE_ADDING "comsig_modular_computer_file_adding" -/// From /obj/item/modular_computer/proc/store_file: () -#define COMSIG_MODULAR_COMPUTER_FILE_ADDED "comsig_modular_computer_file_added" -/// From /obj/item/modular_computer/proc/remove_file: () -#define COMSIG_MODULAR_COMPUTER_FILE_DELETING "comsig_modular_computer_file_deleting" +/// From /obj/item/modular_computer/proc/store_file: (datum/computer_file/file_source, obj/item/modular_computer/host) +#define COMSIG_MODULAR_COMPUTER_FILE_STORE "comsig_modular_computer_file_store" /// From /obj/item/modular_computer/proc/store_file: () #define COMSIG_MODULAR_COMPUTER_FILE_DELETED "comsig_modular_computer_file_deleted" diff --git a/code/__DEFINES/dcs/signals/signals_medical.dm b/code/__DEFINES/dcs/signals/signals_medical.dm index 801eb6b41bb1..2dca6487f702 100644 --- a/code/__DEFINES/dcs/signals/signals_medical.dm +++ b/code/__DEFINES/dcs/signals/signals_medical.dm @@ -4,9 +4,14 @@ /// From /datum/surgery_step/success(): (datum/surgery_step/step, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results) #define COMSIG_MOB_SURGERY_STEP_SUCCESS "mob_surgery_step_success" +/// From /obj/item/shockpaddles/do_help, after the defib do_after is complete, but before any effects are applied: (mob/living/defibber, obj/item/shockpaddles/source) +#define COMSIG_DEFIBRILLATOR_PRE_HELP_ZAP "carbon_being_defibbed" + /// Return to stop default defib handling + #define COMPONENT_DEFIB_STOP (1<<0) + /// From /obj/item/shockpaddles/proc/do_success(): (obj/item/shockpaddles/source) #define COMSIG_DEFIBRILLATOR_SUCCESS "defib_success" - #define COMPONENT_DEFIB_STOP (1<<0) + // #define COMPONENT_DEFIB_STOP (1<<0) // Same return, to stop default defib handling /// From /datum/surgery/can_start(): (mob/source, datum/surgery/surgery, mob/living/patient) #define COMSIG_SURGERY_STARTING "surgery_starting" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index 2466f770827e..55991a2ded55 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -105,6 +105,8 @@ ///from base of mob/living/Stun() (amount, ignore_canstun) #define COMSIG_LIVING_STATUS_STUN "living_stun" +///from mob/living/carbon/enter_stamina_stun() +#define COMSIG_LIVING_STAMINA_STUN "carbon_stamina_stun" ///from base of mob/living/Knockdown() (amount, ignore_canstun) #define COMSIG_LIVING_STATUS_KNOCKDOWN "living_knockdown" ///from base of mob/living/Paralyze() (amount, ignore_canstun) diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm index a7a04b7dfdd3..f0622d183127 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -35,7 +35,7 @@ /// Should we stop the current living movement attempt #define COMSIG_MOB_CLIENT_BLOCK_PRE_LIVING_MOVE COMPONENT_MOVABLE_BLOCK_PRE_MOVE -/// From base of /client/Move(): (list/move_args) +/// From base of /client/Move(): (new_loc, direction) #define COMSIG_MOB_CLIENT_PRE_MOVE "mob_client_pre_move" /// Should always match COMPONENT_MOVABLE_BLOCK_PRE_MOVE as these are interchangeable and used to block movement. #define COMSIG_MOB_CLIENT_BLOCK_PRE_MOVE COMPONENT_MOVABLE_BLOCK_PRE_MOVE @@ -140,6 +140,9 @@ ///Mob is trying to open the wires of a target [/atom], from /datum/wires/interactable(): (atom/target) #define COMSIG_TRY_WIRES_INTERACT "try_wires_interact" #define COMPONENT_CANT_INTERACT_WIRES (1<<0) +///Mob is trying to emote, from /datum/emote/proc/run_emote(): (key, params, type_override, intentional) +#define COMSIG_MOB_PRE_EMOTED "mob_pre_emoted" + #define COMPONENT_CANT_EMOTE (1<<0) #define COMSIG_MOB_EMOTED(emote_key) "mob_emoted_[emote_key]" ///sent when a mob/login() finishes: (client) #define COMSIG_MOB_CLIENT_LOGIN "comsig_mob_client_login" diff --git a/code/__DEFINES/dcs/signals/signals_turf.dm b/code/__DEFINES/dcs/signals/signals_turf.dm index 7ea0a9631096..f5a91db4c93d 100644 --- a/code/__DEFINES/dcs/signals/signals_turf.dm +++ b/code/__DEFINES/dcs/signals/signals_turf.dm @@ -41,3 +41,8 @@ #define COMSIG_TURF_MOVABLE_THROW_LANDED "turf_movable_throw_landed" ///from /obj/item/pushbroom/sweep(): (broom, user, items_to_sweep) #define COMSIG_TURF_RECEIVE_SWEEPED_ITEMS "turf_receive_sweeped_items" + +///From element/elevation/reset_elevation(): (list/values) +#define COMSIG_TURF_RESET_ELEVATION "turf_reset_elevation" + #define ELEVATION_CURRENT_PIXEL_SHIFT 1 + #define ELEVATION_MAX_PIXEL_SHIFT 2 diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 5a1bdb0c2b71..5c941e3689ab 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -153,9 +153,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 ///is this a ghost accessible area? #define GHOST_AREA (1<<18) ///can we explode during rounds? -#define NO_EXPLOSIONS_DURING (1<<19) -///are ghosts not allowed to enter during round -#define NO_GHOSTS_DURING_ROUND (1<<20) +#define NO_GHOSTS_DURING_ROUND (1<<19) /* These defines are used specifically with the atom/pass_flags bitmask @@ -176,6 +174,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define PASSDOORS (1<<10) #define PASSVEHICLE (1<<11) #define PASSITEM (1<<12) +/// Do not intercept click attempts during Adjacent() checks. See [turf/proc/ClickCross]. **ONLY MEANINGFUL ON pass_flags_self!** +#define LETPASSCLICKS (1<<13) //Movement Types #define GROUND (1<<0) @@ -201,6 +201,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define INDESTRUCTIBLE (1<<6) /// can't be frozen #define FREEZE_PROOF (1<<7) +/// can't be shuttle crushed. +#define SHUTTLE_CRUSH_PROOF (1<<8) //tesla_zap #define ZAP_MACHINE_EXPLOSIVE (1<<0) diff --git a/code/__DEFINES/fonts.dm b/code/__DEFINES/fonts.dm index 6b00195f59b0..e3e2e7ab7f69 100644 --- a/code/__DEFINES/fonts.dm +++ b/code/__DEFINES/fonts.dm @@ -14,3 +14,11 @@ /// Emoji icon set #define EMOJI_SET 'icons/ui_icons/emoji/emoji.dmi' + +// Font metrics bitfield +/// Include leading A width and trailing C width in GetWidth() or in DrawText() +#define INCLUDE_AC (1<<0) + +DEFINE_BITFIELD(font_flags, list( + "INCLUDE_AC" = INCLUDE_AC, +)) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index a33ccb140e05..af7d22f4a911 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -159,7 +159,7 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list( #define ismouse(A) (istype(A, /mob/living/basic/mouse)) -#define isslime(A) (istype(A, /mob/living/simple_animal/slime)) +#define isslime(A) (istype(A, /mob/living/basic/slime)) #define isdrone(A) (istype(A, /mob/living/basic/drone)) diff --git a/code/__DEFINES/keybinding.dm b/code/__DEFINES/keybinding.dm index 64ab276591a5..0ddfaa5b9573 100644 --- a/code/__DEFINES/keybinding.dm +++ b/code/__DEFINES/keybinding.dm @@ -43,6 +43,8 @@ #define COMSIG_KB_HUMAN_QUICKEQUIPBELT_DOWN "keybinding_human_quickequipbelt_down" #define COMSIG_KB_HUMAN_BAGEQUIP_DOWN "keybinding_human_bagequip_down" #define COMSIG_KB_HUMAN_SUITEQUIP_DOWN "keybinding_human_suitequip_down" +#define COMSIG_KB_HUMAN_LPOCKETEQUIP_DOWN "keybinding_human_lpocketequip_down" +#define COMSIG_KB_HUMAN_RPOCKETEQUIP_DOWN "keybinding_human_rpocketequip_down" //Living #define COMSIG_KB_LIVING_RESIST_DOWN "keybinding_living_resist_down" diff --git a/code/__DEFINES/library.dm b/code/__DEFINES/library.dm new file mode 100644 index 000000000000..0c84434578d4 --- /dev/null +++ b/code/__DEFINES/library.dm @@ -0,0 +1,9 @@ +#define DEFAULT_UPLOAD_CATAGORY "Fiction" +#define DEFAULT_SEARCH_CATAGORY "Any" + +///How many books should we load per page? +#define BOOKS_PER_PAGE 18 +///How many checkout records should we load per page? +#define CHECKOUTS_PER_PAGE 17 +///How many inventory items should we load per page? +#define INVENTORY_PER_PAGE 19 diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index cd3d68e2ea5b..a8a7f2e04da6 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -6,6 +6,10 @@ #define MOVABLE_LIGHT 2 ///Light made by masking the lighting darkness plane, and is directional. #define MOVABLE_LIGHT_DIRECTIONAL 3 +///Light made by masking the lighting darkness plane, and is a directionally focused beam. +#define MOVABLE_LIGHT_BEAM 4 +/// Nonesensical value for light color, used for null checks. +#define NONSENSICAL_VALUE -99999 ///Is a movable light source attached to another movable (its loc), meaning that the lighting component should go one level deeper. #define LIGHT_ATTACHED (1<<0) diff --git a/code/__DEFINES/modular_computer.dm b/code/__DEFINES/modular_computer.dm index db1460c2b0f0..001722eb2ddf 100644 --- a/code/__DEFINES/modular_computer.dm +++ b/code/__DEFINES/modular_computer.dm @@ -9,10 +9,6 @@ #define PROGRAM_CONSOLE (1<<0) #define PROGRAM_LAPTOP (1<<1) #define PROGRAM_TABLET (1<<2) -//Program states -#define PROGRAM_STATE_KILLED 0 -#define PROGRAM_STATE_BACKGROUND 1 -#define PROGRAM_STATE_ACTIVE 2 //Program categories #define PROGRAM_CATEGORY_CREW "Crew" #define PROGRAM_CATEGORY_ENGI "Engineering" diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index 0d33112b74da..bd44bdeaa09b 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -6,14 +6,13 @@ #define CAN_BE_HIT (1<<2) //can this be bludgeoned by items? #define DANGEROUS_POSSESSION (1<<3) //Admin possession yes/no #define UNIQUE_RENAME (1<<4) // can you customize the description/name of the thing? -#define USES_TGUI (1<<5) //put on things that use tgui on ui_interact instead of custom/old UI. -#define BLOCK_Z_OUT_DOWN (1<<6) // Should this object block z falling from loc? -#define BLOCK_Z_OUT_UP (1<<7) // Should this object block z uprise from loc? -#define BLOCK_Z_IN_DOWN (1<<8) // Should this object block z falling from above? -#define BLOCK_Z_IN_UP (1<<9) // Should this object block z uprise from below? -#define BLOCKS_CONSTRUCTION (1<<10) //! Does this object prevent things from being built on it? -#define BLOCKS_CONSTRUCTION_DIR (1<<11) //! Does this object prevent same-direction things from being built on it? -#define IGNORE_DENSITY (1<<12) //! Can we ignore density when building on this object? (for example, directional windows and grilles) +#define BLOCK_Z_OUT_DOWN (1<<5) // Should this object block z falling from loc? +#define BLOCK_Z_OUT_UP (1<<6) // Should this object block z uprise from loc? +#define BLOCK_Z_IN_DOWN (1<<7) // Should this object block z falling from above? +#define BLOCK_Z_IN_UP (1<<8) // Should this object block z uprise from below? +#define BLOCKS_CONSTRUCTION (1<<9) //! Does this object prevent things from being built on it? +#define BLOCKS_CONSTRUCTION_DIR (1<<10) //! Does this object prevent same-direction things from being built on it? +#define IGNORE_DENSITY (1<<11) //! Can we ignore density when building on this object? (for example, directional windows and grilles) // If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support diff --git a/code/__DEFINES/paper.dm b/code/__DEFINES/paper.dm index cccb3f7b8714..feb41c0409cd 100644 --- a/code/__DEFINES/paper.dm +++ b/code/__DEFINES/paper.dm @@ -13,3 +13,6 @@ #define MODE_WRITING 1 /// Should be able to stamp paper. #define MODE_STAMPING 2 + +#define BARCODE_SCANNER_CHECKIN "check_in" +#define BARCODE_SCANNER_INVENTORY "inventory" diff --git a/code/__DEFINES/polls.dm b/code/__DEFINES/polls.dm index a5a0616d8d40..435e9f60141b 100644 --- a/code/__DEFINES/polls.dm +++ b/code/__DEFINES/polls.dm @@ -5,3 +5,14 @@ #define POLLTYPE_RATING "NUMVAL" #define POLLTYPE_MULTI "MULTICHOICE" #define POLLTYPE_IRV "IRV" + +///The message sent when you sign up to a poll. +#define POLL_RESPONSE_SIGNUP "signup" +///The message sent when you've already signed up for a poll and are trying to sign up again. +#define POLL_RESPONSE_ALREADY_SIGNED "already_signed" +///The message sent when you are not signed up for a poll. +#define POLL_RESPONSE_NOT_SIGNED "not_signed" +///The message sent when you are too late to unregister from a poll. +#define POLL_RESPONSE_TOO_LATE_TO_UNREGISTER "failed_unregister" +///The message sent when you successfully unregister from a poll. +#define POLL_RESPONSE_UNREGISTERED "unregistered" diff --git a/code/__DEFINES/power.dm b/code/__DEFINES/power.dm index e3e1e1fa57a9..b07ba5e9b582 100644 --- a/code/__DEFINES/power.dm +++ b/code/__DEFINES/power.dm @@ -14,9 +14,3 @@ #define JOULES * 0.002 GLOBAL_VAR_INIT(CHARGELEVEL, 0.001) // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second) - -#define KW *1000 -#define MW KW*1000 -#define GW MW*1000 -#define TW GW*1000 -#define PW TW*1000 diff --git a/code/__DEFINES/research/anomalies.dm b/code/__DEFINES/research/anomalies.dm index 911a2958d89e..12a114439c7d 100644 --- a/code/__DEFINES/research/anomalies.dm +++ b/code/__DEFINES/research/anomalies.dm @@ -32,6 +32,7 @@ GLOBAL_LIST_INIT(bioscrambler_parts_blacklist, typecacheof(list( GLOBAL_LIST_INIT(bioscrambler_organs_blacklist, typecacheof(list ( /obj/item/organ/external/pod_hair, /obj/item/organ/external/spines, + /obj/item/organ/external/wings, /obj/item/organ/external/wings/functional, /obj/item/organ/internal/alien, /obj/item/organ/internal/brain, diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 64a4ccdc0772..20e253c75d27 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -39,7 +39,10 @@ #define ROLE_SPACE_DRAGON "Space Dragon" #define ROLE_SPIDER "Spider" #define ROLE_WIZARD_MIDROUND "Wizard (Midround)" -#define ROLE_DRIFTING_CONTRACTOR "Drifting Contractor" //monkestation edit +// monke midrounds +#define ROLE_DRIFTING_CONTRACTOR "Drifting Contractor" +#define ROLE_FLORIDA_MAN "Florida Man" +#define ROLE_SLASHER "Slasher" // Latejoin roles #define ROLE_HERETIC_SMUGGLER "Heretic Smuggler" @@ -68,7 +71,6 @@ #define ROLE_LAVALAND "Lavaland" #define ROLE_LAZARUS_BAD "Slaved Revived Mob" #define ROLE_LAZARUS_GOOD "Friendly Revived Mob" -#define ROLE_SLASHER "Slasher" #define ROLE_CLOWN_OPERATIVE "Clown Operative" #define ROLE_FREE_GOLEM "Free Golem" @@ -153,6 +155,8 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_DRIFTING_CONTRACTOR = 0, ROLE_VAMPIRICACCIDENT = 0, ROLE_MONSTERHUNTER = 0, + ROLE_SLASHER = 0, + ROLE_FLORIDA_MAN = 0, //monkestation edit end // Latejoin diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm index 96bd0ce4ddcb..7efc2230cfa0 100644 --- a/code/__DEFINES/span.dm +++ b/code/__DEFINES/span.dm @@ -13,6 +13,9 @@ #define span_alertwarning(str) ("" + str + "") #define span_alien(str) ("" + str + "") #define span_announce(str) ("" + str + "") +#define span_announcement_header(str) ("" + str + "") +#define span_average(str) ("" + str + "") #define span_bigicon(str) ("" + str + "") #define span_binarysay(str) ("" + str + "") @@ -66,6 +69,7 @@ #define span_interface(str) ("" + str + "") #define span_linkify(str) ("" + str + "") #define span_looc(str) ("" + str + "") +#define span_major_announcement_text(str) ("" + str + "") #define span_medal(str) ("" + str + "") #define span_medradio(str) ("" + str + "") #define span_memo(str) ("" + str + "") diff --git a/code/__DEFINES/stamina.dm b/code/__DEFINES/stamina.dm index 94c743c79b26..df8badbf2c0f 100644 --- a/code/__DEFINES/stamina.dm +++ b/code/__DEFINES/stamina.dm @@ -77,3 +77,8 @@ #define STAMINA_GRAB_AGGRESSIVE_RESIST_CHANCE 60 /// Chance to resist out of chokeholds grabs. #define STAMINA_GRAB_CHOKE_RESIST_CHANCE 45 + +//// +/// TRAITS +//// +#define TRAIT_CANT_STAMCRIT "cant_stamcrit" diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index c3cf41e6c651..015a30a6284f 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -20,7 +20,7 @@ * * make sure you add an update to the schema_version stable in the db changelog */ -#define DB_MINOR_VERSION 23 +#define DB_MINOR_VERSION 24 //! ## Timing subsystem diff --git a/code/__DEFINES/text.dm b/code/__DEFINES/text.dm index 3cffec0521f7..ffac885bf4c8 100644 --- a/code/__DEFINES/text.dm +++ b/code/__DEFINES/text.dm @@ -1,10 +1,44 @@ /// Does 4 spaces. Used as a makeshift tabulator. #define FOURSPACES "    " +/// Standard maptext /// Prepares a text to be used for maptext. Use this so it doesn't look hideous. #define MAPTEXT(text) {"[##text]"} -/// Prepares a text to be used for maptext, using a font that can handle larger text better. +/** + * Pixel-perfect scaled fonts for use in the MAP element as defined in skin.dmf + * + * Four sizes to choose from, use the sizes as mentioned below. + * Between the variations and a step there should be an option that fits your use case. + * BYOND uses pt sizing, different than px used in TGUI. Using px will make it look blurry due to poor antialiasing. + * + * Default sizes are prefilled in the macro for ease of use and a consistent visual look. + * To use a step other than the default in the macro, specify it in a span style. + * For example: MAPTEXT_PIXELLARI("Some large maptext here") + */ +/// Large size (ie: context tooltips) - Size options: 12pt 24pt. +#define MAPTEXT_PIXELLARI(text) {"[##text]"} + +/// Standard size (ie: normal runechat) - Size options: 6pt 12pt 18pt. +#define MAPTEXT_GRAND9K(text) {"[##text]"} + +/// Small size. (ie: context subtooltips, spell delays) - Size options: 12pt 24pt. +#define MAPTEXT_TINY_UNICODE(text) {"[##text]"} + +/// Smallest size. (ie: whisper runechat) - Size options: 6pt 12pt 18pt. +#define MAPTEXT_SPESSFONT(text) {"[##text]"} + +/** + * Prepares a text to be used for maptext, using a variable size font. + * + * More flexible but doesn't scale pixel perfect to BYOND icon resolutions. + * (May be blurry.) Can use any size in pt or px. + * + * You MUST Specify the size when using the macro + * For example: MAPTEXT_VCR_OSD_MONO("Some large maptext here") + */ +/// Prepares a text to be used for maptext, using a variable size font. +/// Variable size font. More flexible but doesn't scale pixel perfect to BYOND icon resolutions. (May be blurry.) Can use any size in pt or px. #define MAPTEXT_VCR_OSD_MONO(text) {"[##text]"} /// Macro from Lummox used to get height from a MeasureText proc. @@ -66,3 +100,5 @@ #define NINJA_FILE "ninja.json" /// File loation for title splashes #define SPLASH_FILE "splashes.json" +///File location for mother hallucination lines +#define MOTHER_FILE "mother.json" diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index fdfec5e8ca08..a4fb6d40be73 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "7.0.2" +#define TGS_DMAPI_VERSION "7.1.1" // All functions and datums outside this document are subject to change with any version and should not be relied on. @@ -50,6 +50,13 @@ #endif +#ifndef TGS_FILE2TEXT_NATIVE +#ifdef file2text +#error Your codebase is re-defining the BYOND proc file2text. The DMAPI requires the native version to read the result of world.Export(). You can fix this by adding "#define TGS_FILE2TEXT_NATIVE file2text" before your override of file2text to allow the DMAPI to use the native version. This will only be used for world.Export(), not regular file accesses +#endif +#define TGS_FILE2TEXT_NATIVE file2text +#endif + // EVENT CODES /// Before a reboot mode change, extras parameters are the current and new reboot mode enums. @@ -490,6 +497,16 @@ /world/proc/TgsChatChannelInfo() return +/** + * Trigger an event in TGS. Requires TGS version >= 6.3.0. Returns [TRUE] if the event was triggered successfully, [FALSE] otherwise. This function may sleep! + * + * event_name - The name of the event to trigger + * parameters - Optional list of string parameters to pass as arguments to the event script. The first parameter passed to a script will always be the running game's directory followed by these parameters. + * wait_for_completion - If set, this function will not return until the event has run to completion. + */ +/world/proc/TgsTriggerEvent(event_name, list/parameters, wait_for_completion = FALSE) + return + /* The MIT License diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index e8bfa8da47e8..a15e21fd8110 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -109,17 +109,17 @@ }\ } while (0) -#define HAS_TRAIT(target, trait) (target._status_traits?[trait] ? TRUE : FALSE) -#define HAS_TRAIT_FROM(target, trait, source) (HAS_TRAIT(target, trait) && (source in target._status_traits[trait])) +#define HAS_TRAIT(target, trait) (target?._status_traits?[trait] ? TRUE : FALSE) +#define HAS_TRAIT_FROM(target, trait, source) (HAS_TRAIT(target, trait) && (source in target?._status_traits[trait])) #define HAS_TRAIT_FROM_ONLY(target, trait, source) (HAS_TRAIT(target, trait) && (source in target._status_traits[trait]) && (length(target._status_traits[trait]) == 1)) #define HAS_TRAIT_NOT_FROM(target, trait, source) (HAS_TRAIT(target, trait) && (length(target._status_traits[trait] - source) > 0)) /// Returns a list of trait sources for this trait. Only useful for wacko cases and internal futzing /// You should not be using this -#define GET_TRAIT_SOURCES(target, trait) target._status_traits?[trait] || list() +#define GET_TRAIT_SOURCES(target, trait) target?._status_traits?[trait] || list() /// Returns the amount of sources for a trait. useful if you don't want to have a "thing counter" stuck around all the time #define COUNT_TRAIT_SOURCES(target, trait) length(GET_TRAIT_SOURCES(target, trait)) /// A simple helper for checking traits in a mob's mind -#define HAS_MIND_TRAIT(target, trait) (HAS_TRAIT(target, trait) || (target.mind ? HAS_TRAIT(target.mind, trait) : FALSE)) +#define HAS_MIND_TRAIT(target, trait) (HAS_TRAIT(target, trait) || HAS_TRAIT(target?.mind, trait)) /* Remember to update _globalvars/traits.dm if you're adding/removing/renaming traits. @@ -550,6 +550,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Mob is unable to feel pain #define TRAIT_ANALGESIA "analgesia" +/// Is the mob standing on an elevated surface? This prevents them from dropping down if not elevated first. +#define TRAIT_ON_ELEVATED_SURFACE "on_elevated_surface" + // METABOLISMS // Various jobs on the station have historically had better reactions // to various drinks and foodstuffs. Security liking donuts is a classic @@ -912,6 +915,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define CHANGELING_TRAIT "changeling" #define CULT_TRAIT "cult" #define LICH_TRAIT "lich" + +/// From [/datum/element/elevation] for purpose of registering/removing signals and detaching the elevation_core when the trait is absent. +#define TRAIT_TURF_HAS_ELEVATED_OBJ(z) "turf_has_elevated_obj_[z]" /// The item is magically cursed #define CURSED_ITEM_TRAIT(item_type) "cursed_item_[item_type]" #define ABSTRACT_ITEM_TRAIT "abstract-item" @@ -980,6 +986,10 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_CHASM_DESTROYED "chasm_destroyed" /// Trait from being under the floor in some manner #define TRAIT_UNDERFLOOR "underfloor" +/// From [/datum/element/elevation_core] for purpose of checking if the turf has the trait from an instance of the element +#define TRAIT_ELEVATED_TURF "elevated_turf" +/// If the movable shouldn't be reflected by mirrors. +#define TRAIT_NO_MIRROR_REFLECTION "no_mirror_reflection" // unique trait sources, still defines #define CLONING_POD_TRAIT "cloning-pod" @@ -1261,6 +1271,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define GLUED_ITEM_TRAIT "glued-item" #define TRAIT_BELT_SATCHEL "belt_satchel" +/// Trait given to mobs that we do not want to mindswap +#define TRAIT_NO_MINDSWAP "no_mindswap" + //monkestation edit start /// One can breath under water, you get me? #define TRAIT_WATER_BREATHING "water_breathing" @@ -1287,5 +1300,3 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai ///trait determines if this mob can breed given by /datum/component/breeding #define TRAIT_MOB_BREEDER "mob_breeder" -/// Trait given to mobs that we do not want to mindswap -#define TRAIT_NO_MINDSWAP "no_mindswap" diff --git a/code/__DEFINES/~monkestation/asteroids.dm b/code/__DEFINES/~monkestation/asteroids.dm index 1e8792bbd61f..f9c081449d09 100644 --- a/code/__DEFINES/~monkestation/asteroids.dm +++ b/code/__DEFINES/~monkestation/asteroids.dm @@ -1,6 +1,8 @@ /// Used in asteroid composition lists to indicate a skip #define SKIP "skip" +#define islevelbaseturf(A) istype(A, SSmapping.level_trait(A.z, ZTRAIT_BASETURF) || /turf/open/space) + // Mining template rarities #define MINING_NO_RANDOM_SPAWN -1 #define MINING_COMMON 1 @@ -14,3 +16,10 @@ stoplag(); \ SSatoms.map_loader_begin(REF(template)); \ } + +// error codes for the asteroid magnet +#define MAGNET_ERROR_KEY_BUSY 1 +#define MAGNET_ERROR_KEY_USED_COORD 2 +#define MAGNET_ERROR_KEY_COOLDOWN 3 +#define MAGNET_ERROR_KEY_MOB 4 +#define MAGNET_ERROR_KEY_NO_COORD 5 diff --git a/code/__DEFINES/~monkestation/dcs/signals/signals_carbon.dm b/code/__DEFINES/~monkestation/dcs/signals/signals_carbon.dm index 191577527fa8..e90390892b72 100644 --- a/code/__DEFINES/~monkestation/dcs/signals/signals_carbon.dm +++ b/code/__DEFINES/~monkestation/dcs/signals/signals_carbon.dm @@ -1,2 +1,5 @@ #define COMSIG_CARBON_EQUIP_EARS "carbon_ears_equip" #define COMSIG_CARBON_UNEQUIP_EARS "carbon_ears_unequip" + +#define COMSIG_HUMAN_BEGIN_DUEL "human_begin_duel" +#define COMSIG_HUMAN_END_DUEL "human_end_duel" diff --git a/code/__DEFINES/~monkestation/dcs/signals/signals_item.dm b/code/__DEFINES/~monkestation/dcs/signals/signals_item.dm new file mode 100644 index 000000000000..b3fec9b1d9c1 --- /dev/null +++ b/code/__DEFINES/~monkestation/dcs/signals/signals_item.dm @@ -0,0 +1,6 @@ +/// Called before an item is compressed by a bluespace compression kit: (mob/user, obj/item/compression_kit/kit) +#define COMSIG_ITEM_PRE_COMPRESS "item_pre_compress" + #define COMPONENT_STOP_COMPRESSION (1 << 0) + #define COMPONENT_HANDLED_MESSAGE (1 << 1) +/// Called after an item is compressed by a bluespace compression kit: (mob/user, obj/item/compression_kit/kit) +#define COMSIG_ITEM_COMPRESSED "item_compressed" diff --git a/code/__DEFINES/~monkestation/dcs/signals/signals_mob.dm b/code/__DEFINES/~monkestation/dcs/signals/signals_mob.dm new file mode 100644 index 000000000000..2030e073340f --- /dev/null +++ b/code/__DEFINES/~monkestation/dcs/signals/signals_mob.dm @@ -0,0 +1,25 @@ +#define COMSIG_MOB_STOP_HUNGER "stop_hunger_mob" +#define COMSIG_MOB_START_HUNGER "start_hunger_mob" +#define COMSIG_MOB_FEED "feed_hunger_mob" +#define COMSIG_MOB_FED_ON "fed_on_mob" +#define COMSIG_MOB_RETURN_HUNGER "return_hunger_mob" +#define COMSIG_MOB_REFUSED_EAT "refused_hunger_mob" +#define COMSIG_MOB_OVERATE "overate_hunger_mob" +#define COMSIG_MOB_EAT_NORMAL "normal_eat_hunger_mob" +#define COMSIG_MOB_STARVING "starving_hunger_mob" +#define COMSIG_MOB_FULLY_STARVING "full_starve_hunger_mob" +#define COMSIG_SECRETION_UPDATE "secretion_update" +#define COMSIG_FEEDING_CHECK "latch_check" +#define COMSIG_HUNGER_UPDATED "update_hunger_mob" +#define COMSIG_LIVING_ATE "living_ate_object" +#define COMSIG_MOB_ADJUST_HUNGER "adjust_hunger_mob" + +#define COMSIG_EMOTION_STORE "store_emotion" +#define EMOTION_BUFFER_SPEAK_FROM_BUFFER "release_emotion" +#define COMSIG_EMOTION_HEARD "heard_emotion" +#define EMOTION_BUFFER_UPDATE_OVERLAY_STATES "update_emotion_overlay" + +#define COMSIG_ATOM_JOIN_STACK "join_stack" +#define COMSIG_STACK_MOVE "stack_move" +#define COMSIG_CHECK_CAN_ADD_NEW_STACK "check_stack_add" +#define COMSIG_MOBSTACKER_DESTROY "mobstack_destroy_stack" diff --git a/code/__DEFINES/~monkestation/logging.dm b/code/__DEFINES/~monkestation/logging.dm index af3bff1232d8..3ecc13c91064 100644 --- a/code/__DEFINES/~monkestation/logging.dm +++ b/code/__DEFINES/~monkestation/logging.dm @@ -1 +1,2 @@ #define LOG_CATEGORY_GAME_LOOC "game-looc" +#define LOG_CATEGORY_STORYTELLER "storyteller" diff --git a/code/__DEFINES/~monkestation/power.dm b/code/__DEFINES/~monkestation/power.dm new file mode 100644 index 000000000000..ad5d9c5a0b4a --- /dev/null +++ b/code/__DEFINES/~monkestation/power.dm @@ -0,0 +1,10 @@ + +// Primarily used by monkestation/code/modules/power/power_transmission_laser + +// energy amount defines +#define KW *1000 +#define MW KW * 1000 +#define GW MW * 1000 +#define TW GW * 1000 +#define PW TW * 1000 +#define EW PW * 1000 diff --git a/code/__DEFINES/~monkestation/slimes.dm b/code/__DEFINES/~monkestation/slimes.dm new file mode 100644 index 000000000000..1ae2801be222 --- /dev/null +++ b/code/__DEFINES/~monkestation/slimes.dm @@ -0,0 +1,91 @@ +#define ADULT_SLIME (1<<0) +#define PASSIVE_SLIME (1<<1) +#define STORED_SLIME (1<<2) +#define MUTATING_SLIME (1<<3) +#define SPLITTING_SLIME (1<<4) +#define CLEANER_SLIME (1<<5) +#define OVERWRITES_COLOR (1<<6) +#define NOEVOLVE_SLIME (1<<7) +#define NOOOZE_SLIME (1<<8) + +#define TRAIT_ON_DEATH (1<<0) +#define TRAIT_VISUAL (1<<1) + +#define TRAIT_MUTATOR_USED "mutator_trait" +#define TRAIT_IN_STACK "inside_mob_stack" +#define TRAIT_FEEDING "feeding_trait" +#define LATCH_TRAIT "latch_trait" +#define TRAIT_LATCH_FEEDERED "feeder_targetted" + +#define BB_BASIC_MOB_SCARED_ITEM "BB_basic_mob_scared_item" +#define BB_WONT_TARGET_CLIENTS "BB_wont_target_clients" + +#define TRAIT_CAREFUL_STEPS "careful_steps" +#define TRAIT_SLIME_STASIS "slime_stasis" +#define TRAIT_SLIME_RABID "slime_rabid" +#define TRAIT_SLIME_DUST_IMMUNE "slime_dust_immune" +#define COMSIG_ATOM_SUCKED "atom_sucked" + +#define TRAIT_OVERFED "overfed_trait" +#define VACPACK_THROW "vacpack_throw" + +///from obj/item/vacuum_nozzle/afterattack(atom/movable/target, mob/user, proximity, params): (obj/item/vacuum_nozzle/nozzle, mob/user) +#define COMSIG_LIVING_VACUUM_PRESUCK "living_vacuum_presuck" + #define COMPONENT_LIVING_VACUUM_CANCEL_SUCK (1<<0) + +#define SLIME_VALUE_TIER_1 200 +#define SLIME_VALUE_TIER_2 400 +#define SLIME_VALUE_TIER_3 800 +#define SLIME_VALUE_TIER_4 1600 +#define SLIME_VALUE_TIER_5 3200 +#define SLIME_VALUE_TIER_6 6400 +#define SLIME_VALUE_TIER_7 12800 + +#define SLIME_SELL_MODIFIER_MIN -0.08 +#define SLIME_SELL_MODIFIER_MAX -0.01 +#define SLIME_SELL_OTHER_MODIFIER_MIN 0.005 +#define SLIME_SELL_OTHER_MODIFIER_MAX 0.01 +#define SLIME_SELL_MAXIMUM_MODIFIER 2 +#define SLIME_SELL_MINIMUM_MODIFIER 0.1 +#define SLIME_RANDOM_MODIFIER_MIN -0.0003 +#define SLIME_RANDOM_MODIFIER_MAX 0.0003 + + +#define EMOTION_HAPPY "happy" +#define EMOTION_SAD "sad" +#define EMOTION_SCARED "scared" +#define EMOTION_FUNNY "funny" +#define EMOTION_ANGER "anger" +#define EMOTION_SUPRISED "suprised" +#define EMOTION_HUNGRY "hungry" + +///key that holds decals we hunt +#define BB_CLEANABLE_DECALS "cleanable_decals" +///key that holds blood we hunt +#define BB_CLEANABLE_BLOOD "cleanable_blood" +///key that holds pests we hunt +#define BB_HUNTABLE_PESTS "huntable_pests" +///key that holds drawings we hunt +#define BB_CLEANABLE_DRAWINGS "cleanable_drawings" +///Key that holds our clean target +#define BB_CLEAN_TARGET "clean_target" +///key that holds trash we will burn +#define BB_HUNTABLE_TRASH "huntable_trash" + + +#define FOOD_CHANGE "food_change" +#define ENVIRONMENT_CHANGE "enviro_change" +#define BEHAVIOUR_CHANGE "behaviour_change" +#define DANGEROUS_CHANGE "dangerous_change" +#define DOCILE_CHANGE "docile_change" + +#define FRIENDSHIP_HATED "hated" +#define FRIENDSHIP_DISLIKED "disliked" +#define FRIENDSHIP_STRANGER "stranger" +#define FRIENDSHIP_NEUTRAL "neutral" +#define FRIENDSHIP_ACQUAINTANCES "acquaintances" +#define FRIENDSHIP_FRIEND "friend" +#define FRIENDSHIP_BESTFRIEND "bestfriend" + +#define COMSIG_FRIENDSHIP_CHECK_LEVEL "friendship_check_level" +#define COMSIG_FRIENDSHIP_CHANGE "friendship_change" diff --git a/code/__DEFINES/~monkestation/storytellers.dm b/code/__DEFINES/~monkestation/storytellers.dm index bd2142e7e3ed..592c8c80470e 100644 --- a/code/__DEFINES/~monkestation/storytellers.dm +++ b/code/__DEFINES/~monkestation/storytellers.dm @@ -82,7 +82,7 @@ /// Defines for the antag cap to prevent midround injections. #define ANTAG_CAP_FLAT 2 -#define ANTAG_CAP_DENOMINATOR 9 +#define ANTAG_CAP_DENOMINATOR 10 ///Below are defines for roundstart point pool. The GAIN ones are multiplied by ready population #define ROUNDSTART_MUNDANE_BASE 20 diff --git a/code/__DEFINES/~monkestation/traits.dm b/code/__DEFINES/~monkestation/traits.dm index 3818e1ae152c..0ab61cb18a9a 100644 --- a/code/__DEFINES/~monkestation/traits.dm +++ b/code/__DEFINES/~monkestation/traits.dm @@ -16,3 +16,7 @@ #define TRAIT_PERFECT_SURGEON "perfect_surgeon" /// Station trait for when the clown has bridge access *shudders* #define STATION_TRAIT_CLOWN_BRIDGE "clown_bridge" + +// /obj/item +/// Whether a storage item can be compressed by the bluespace compression kit, without the usual storage limitation. +#define TRAIT_BYPASS_COMPRESS_CHECK "can_compress_anyways" diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index c4376731f610..61bd8880e546 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -391,10 +391,8 @@ * Returns TRUE if the list had nulls, FALSE otherwise **/ /proc/list_clear_nulls(list/list_to_clear) - var/start_len = list_to_clear.len - var/list/new_list = new(start_len) - list_to_clear -= new_list - return list_to_clear.len < start_len + return (list_to_clear.RemoveAll(null) > 0) + /* * Returns list containing all the entries from first list that are not present in second. diff --git a/code/__HELPERS/animations.dm b/code/__HELPERS/animations.dm index 6633d80eaae0..4f0a52a8fb9e 100644 --- a/code/__HELPERS/animations.dm +++ b/code/__HELPERS/animations.dm @@ -27,3 +27,6 @@ final_pixel_y += living_target.body_position_pixel_y_offset; \ }; \ animate(target, pixel_y = final_pixel_y, time = 1 SECONDS) + +/// The duration of the animate call in mob/living/update_transform +#define UPDATE_TRANSFORM_ANIMATION_TIME (0.2 SECONDS) diff --git a/code/__HELPERS/announcements.dm b/code/__HELPERS/announcements.dm new file mode 100644 index 000000000000..d0deab12e993 --- /dev/null +++ b/code/__HELPERS/announcements.dm @@ -0,0 +1,76 @@ +/** + * Sends a div formatted chat box announcement + * + * Formatted like: + * + * " Server Announcement " (or sender_override) + * + * " Title " + * + * " Text " + * + * Arguments + * * text - required, the text to announce + * * title - optional, the title of the announcement. + * * players - optional, a list of all players to send the message to. defaults to the entire world + * * play_sound - if TRUE, play a sound with the announcement (based on player option) + * * sound_override - optional, override the default announcement sound + * * sender_override - optional, modifies the sender of the announcement + * * encode_title - if TRUE, the title will be HTML encoded + * * encode_text - if TRUE, the text will be HTML encoded + * * color_override - optional, set a color for the announcement box + */ + +/proc/send_formatted_announcement( + text, + title = "", + players, + play_sound = TRUE, + sound_override = 'sound/ai/default/attention.ogg', + sender_override = "Server Admin Announcement", + encode_title = TRUE, + encode_text = TRUE, + color_override = "grey", +) + if(isnull(text)) + return + + var/list/announcement_strings = list() + + if(encode_title && title && length(title) > 0) + title = html_encode(title) + if(encode_text) + text = html_encode(text) + if(!length(text)) + return + + announcement_strings += span_announcement_header(generate_unique_announcement_header(title, sender_override)) + announcement_strings += span_major_announcement_text(text) + var/finalized_announcement = create_announcement_div(jointext(announcement_strings, ""), color_override) + + if(islist(players)) + for(var/mob/target in players) + to_chat(target, finalized_announcement) + if(play_sound && target.client?.prefs.read_preference(/datum/preference/toggle/sound_announcements)) + SEND_SOUND(target, sound(sound_override)) + else + to_chat(world, finalized_announcement) + + if(!play_sound) + return + + for(var/mob/player in GLOB.player_list) + if(player.client?.prefs.read_preference(/datum/preference/toggle/sound_announcements)) + SEND_SOUND(player, sound(sound_override)) + +/** + * Inserts a span styled message into an alert box div + * + * + * Arguments + * * message - required, the message contents + * * color - optional, set a div color other than default + */ +/proc/create_announcement_div(message, color = "default") + var/processed_message = "
[message]
" + return processed_message diff --git a/code/__HELPERS/areas.dm b/code/__HELPERS/areas.dm index 01e5f911750d..5e8074e08bfc 100644 --- a/code/__HELPERS/areas.dm +++ b/code/__HELPERS/areas.dm @@ -1,9 +1,11 @@ #define BP_MAX_ROOM_SIZE 300 -GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(/area/station/engineering/main, \ - /area/station/engineering/supermatter, \ - /area/station/engineering/atmospherics_engine, \ - /area/station/ai_monitored/turret_protected/ai)) +GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(list( + /area/station/engineering/main, + /area/station/engineering/supermatter, + /area/station/engineering/atmospherics_engine, + /area/station/ai_monitored/turret_protected/ai, +))) // Gets an atmos isolated contained space // Returns an associative list of turf|dirs pairs diff --git a/code/__HELPERS/cameras.dm b/code/__HELPERS/cameras.dm new file mode 100644 index 000000000000..9d74f3fe71b4 --- /dev/null +++ b/code/__HELPERS/cameras.dm @@ -0,0 +1,35 @@ +/** + * get_camera_list + * + * Builds a list of all available cameras that can be seen to networks_available + * Args: + * networks_available - List of networks that we use to see which cameras are visible to it. + */ +/proc/get_camera_list(list/networks_available) + var/list/all_camera_list = list() + for(var/obj/machinery/camera/camera as anything in GLOB.cameranet.cameras) + all_camera_list.Add(camera) + + camera_sort(all_camera_list) + + var/list/usable_camera_list = list() + + for(var/obj/machinery/camera/camera as anything in all_camera_list) + var/list/tempnetwork = camera.network & networks_available + if(length(tempnetwork)) + usable_camera_list["[camera.c_tag][camera.can_use() ? null : " (Deactivated)"]"] = camera + + return usable_camera_list + +///Sorts the list of cameras by their c_tag to display to players. +/proc/camera_sort(list/camera_list) + var/obj/machinery/camera/camera_comparing_a + var/obj/machinery/camera/camera_comparing_b + + for(var/i = length(camera_list), i > 0, i--) + for(var/j = 1 to i - 1) + camera_comparing_a = camera_list[j] + camera_comparing_b = camera_list[j + 1] + if(sorttext(camera_comparing_a.c_tag, camera_comparing_b.c_tag) < 0) + camera_list.Swap(j, j + 1) + return camera_list diff --git a/code/__HELPERS/colors.dm b/code/__HELPERS/colors.dm index d44801af5d7a..1c4cbbd9704c 100644 --- a/code/__HELPERS/colors.dm +++ b/code/__HELPERS/colors.dm @@ -42,24 +42,24 @@ var/textb = copytext(HTMLstring, 6, 8) return rgb(255 - hex2num(textr), 255 - hex2num(textg), 255 - hex2num(textb)) -///Flash a color on the client +///Flash a color on the passed mob /proc/flash_color(mob_or_client, flash_color="#960000", flash_time=20) - var/client/flashed_client + var/mob/flashed_mob if(ismob(mob_or_client)) - var/mob/client_mob = mob_or_client - if(client_mob.client) - flashed_client = client_mob.client - else - return + flashed_mob = mob_or_client else if(istype(mob_or_client, /client)) - flashed_client = mob_or_client + var/client/flashed_client = mob_or_client + flashed_mob = flashed_client.mob - if(!istype(flashed_client)) + if(!istype(flashed_mob)) return - var/animate_color = flashed_client.color - flashed_client.color = flash_color - animate(flashed_client, color = animate_color, time = flash_time) + var/datum/client_colour/temp/temp_color = new(flashed_mob) + temp_color.colour = flash_color + temp_color.fade_in = flash_time * 0.25 + temp_color.fade_out = flash_time * 0.25 + QDEL_IN(temp_color, (flash_time * 0.5) + 1) + flashed_mob.add_client_colour(temp_color) /// Blends together two colors (passed as 3 or 4 length lists) using the screen blend mode /// Much like multiply, screen effects the brightness of the resulting color @@ -94,4 +94,3 @@ #define RANDOM_COLOUR (rgb(rand(0,255),rand(0,255),rand(0,255))) - diff --git a/code/__HELPERS/dynamic_human_icon_gen.dm b/code/__HELPERS/dynamic_human_icon_gen.dm index 0348524b4557..df8f4716bb91 100644 --- a/code/__HELPERS/dynamic_human_icon_gen.dm +++ b/code/__HELPERS/dynamic_human_icon_gen.dm @@ -5,6 +5,9 @@ GLOBAL_LIST_EMPTY(dynamic_human_appearances) /proc/get_dynamic_human_appearance(outfit_path, species_path = /datum/species/human, mob_spawn_path, r_hand, l_hand, bloody_slots = NONE, animated = TRUE) if(!species_path) return FALSE + if(!ispath(species_path)) + stack_trace("Attempted to call get_dynamic_human_appearance() with an instantiated species_path. Pass the species datum typepath instead.") + return FALSE var/arg_string = "[outfit_path]_[species_path]_[mob_spawn_path]_[l_hand]_[r_hand]_[bloody_slots]" if(GLOB.dynamic_human_appearances[arg_string]) //if already exists in our cache, just return that return GLOB.dynamic_human_appearances[arg_string] @@ -54,4 +57,6 @@ GLOBAL_LIST_EMPTY(dynamic_human_appearances) /proc/set_dynamic_human_appearance(list/arguments) var/atom/target = arguments[1] //1st argument is the target var/dynamic_appearance = get_dynamic_human_appearance(arglist(arguments.Copy(2))) //the rest of the arguments starting from 2 matter to the proc - target.appearance = dynamic_appearance + target.icon = 'icons/blanks/32x32.dmi' + target.icon_state = "nothing" + target.copy_overlays(dynamic_appearance, cut_old = TRUE) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 2f862f5df6f8..058b4463ab21 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -187,140 +187,6 @@ active_players++ return active_players -///Show the poll window to the candidate mobs -/proc/show_candidate_poll_window(mob/candidate_mob, poll_time, question, list/candidates, ignore_category, time_passed, flashwindow = TRUE) - set waitfor = 0 - - // Universal opt-out for all players. - if ((!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles))) - return - - // Opt-out for admins whom are currently adminned. - if ((!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles_as_admin)) && candidate_mob.client.holder) - return - - SEND_SOUND(candidate_mob, 'sound/misc/notice2.ogg') //Alerting them to their consideration - if(flashwindow) - window_flash(candidate_mob.client) - var/list/answers = ignore_category ? list("Yes", "No", "Never for this round") : list("Yes", "No") - switch(tgui_alert(candidate_mob, question, "A limited-time offer!", answers, poll_time, autofocus = FALSE)) - if("Yes") - to_chat(candidate_mob, span_notice("Choice registered: Yes.")) - if(time_passed + poll_time <= world.time) - to_chat(candidate_mob, span_danger("Sorry, you answered too late to be considered!")) - SEND_SOUND(candidate_mob, 'sound/machines/buzz-sigh.ogg') - candidates -= candidate_mob - else - candidates += candidate_mob - if("No") - to_chat(candidate_mob, span_danger("Choice registered: No.")) - candidates -= candidate_mob - if("Never for this round") - var/list/ignore_list = GLOB.poll_ignore[ignore_category] - if(!ignore_list) - GLOB.poll_ignore[ignore_category] = list() - GLOB.poll_ignore[ignore_category] += candidate_mob.ckey - to_chat(candidate_mob, span_danger("Choice registered: Never for this round.")) - candidates -= candidate_mob - else - candidates -= candidate_mob - -///Wrapper to send all ghosts the poll to ask them if they want to be considered for a mob. -/proc/poll_ghost_candidates(question, jobban_type, be_special_flag = 0, poll_time = 300, ignore_category = null, flashwindow = TRUE) - var/list/candidates = list() - if(!(GLOB.ghost_role_flags & GHOSTROLE_STATION_SENTIENCE)) - return candidates - - for(var/mob/dead/observer/ghost_player in GLOB.player_list) - candidates += ghost_player - - return poll_candidates(question, jobban_type, be_special_flag, poll_time, ignore_category, flashwindow, candidates) - -///Calls the show_candidate_poll_window() to all eligible ghosts -/proc/poll_candidates(question, jobban_type, be_special_flag = 0, poll_time = 300, ignore_category = null, flashwindow = TRUE, list/group = null) - if (group.len == 0) - return list() - - var/time_passed = world.time - if (!question) - question = "Would you like to be a special role?" - var/list/result = list() - for(var/mob/candidate_mob as anything in group) - if(!candidate_mob.key || !candidate_mob.client || (ignore_category && GLOB.poll_ignore[ignore_category] && (candidate_mob.ckey in GLOB.poll_ignore[ignore_category]))) - continue - if(be_special_flag) - if(!(candidate_mob.client.prefs) || !(be_special_flag in candidate_mob.client.prefs.be_special)) - continue - - var/required_time = GLOB.special_roles[be_special_flag] || 0 - if (candidate_mob.client && candidate_mob.client.get_remaining_days(required_time) > 0) - continue - if(jobban_type) - if(is_banned_from(candidate_mob.ckey, list(jobban_type, ROLE_SYNDICATE)) || QDELETED(candidate_mob)) - continue - - show_candidate_poll_window(candidate_mob, poll_time, question, result, ignore_category, time_passed, flashwindow) - sleep(poll_time) - - //Check all our candidates, to make sure they didn't log off or get deleted during the wait period. - for(var/mob/asking_mob in result) - if(!asking_mob.key || !asking_mob.client) - result -= asking_mob - - list_clear_nulls(result) - - return result - -/** - * Returns a list of ghosts that are eligible to take over and wish to be considered for a mob. - * - * Arguments: - * * question - question to show players as part of poll - * * jobban_type - Type of jobban to use to filter out potential candidates. - * * be_special_flag - The required role that the player has to have enabled to see the prompt. - * * poll_time - Length of time in deciseconds that the poll input box exists before closing. - * * target_mob - The mob that is being polled for. - * * ignore_category - The notification preference that hides the prompt. - */ -/proc/poll_candidates_for_mob(question, jobban_type, be_special_flag = 0, poll_time = 30 SECONDS, mob/target_mob, ignore_category = null) - var/static/list/mob/currently_polling_mobs = list() - - if(currently_polling_mobs.Find(target_mob)) - return list() - - currently_polling_mobs += target_mob - - var/list/possible_candidates = poll_ghost_candidates(question, jobban_type, be_special_flag, poll_time, ignore_category) - - currently_polling_mobs -= target_mob - if(!target_mob || QDELETED(target_mob) || !target_mob.loc) - return list() - - return possible_candidates - -/** - * Returns a list of ghosts that are eligible to take over and wish to be considered for a mob. - * - * Arguments: - * * question - question to show players as part of poll - * * jobban_type - Type of jobban to use to filter out potential candidates. - * * be_special_flag - The required role that the player has to have enabled to see the prompt. - * * poll_time - Length of time in deciseconds that the poll input box exists before closing. - * * mobs - The list of mobs being polled for. This list is mutated and invalid mobs are removed from it before the proc returns. - * * ignore_category - The notification preference that hides the prompt. - */ -/proc/poll_candidates_for_mobs(question, jobban_type, be_special_flag = 0, poll_time = 30 SECONDS, list/mobs, ignore_category = null) - var/list/candidate_list = poll_ghost_candidates(question, jobban_type, be_special_flag, poll_time, ignore_category) - - for(var/mob/potential_mob as anything in mobs) - if(QDELETED(potential_mob) || !potential_mob.loc) - mobs -= potential_mob - - if(!length(mobs)) - return list() - - return candidate_list - ///Uses stripped down and bastardized code from respawn character /proc/make_body(mob/dead/observer/ghost_player) if(!ghost_player || !ghost_player.key) @@ -418,7 +284,7 @@ if(!current_apc.cell || !SSmapping.level_trait(current_apc.z, ZTRAIT_STATION)) continue var/area/apc_area = current_apc.area - if(GLOB.typecache_powerfailure_safe_areas[apc_area.type]) + if(is_type_in_typecache(apc_area, GLOB.typecache_powerfailure_safe_areas)) continue var/duration = rand(duration_min,duration_max) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index adabbeee3ce4..0a743ee3a43d 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -992,7 +992,7 @@ world letter = lowertext(letter) var/image/text_image = new(loc = A) - text_image.maptext = MAPTEXT("[letter]") + text_image.maptext = MAPTEXT("[letter]") text_image.pixel_x = 7 text_image.pixel_y = 5 qdel(atom_icon) @@ -1484,6 +1484,12 @@ GLOBAL_LIST_EMPTY(icon_dimensions) /// Returns a list containing the width and height of an icon file /proc/get_icon_dimensions(icon_path) + // Icons can be a real file(), a rsc backed file(), a dynamic rsc (dyn.rsc) reference (known as a cache reference in byond docs), or an /icon which is pointing to one of those. + // Runtime generated dynamic icons are an unbounded concept cache identity wise, the same icon can exist millions of ways and holding them in a list as a key can lead to unbounded memory usage if called often by consumers. + // Check distinctly that this is something that has this unspecified concept, and thus that we should not cache. + if (!isfile(icon_path) || !length("[icon_path]")) + var/icon/my_icon = icon(icon_path) + return list("width" = my_icon.Width(), "height" = my_icon.Height()) if (isnull(GLOB.icon_dimensions[icon_path])) var/icon/my_icon = icon(icon_path) GLOB.icon_dimensions[icon_path] = list("width" = my_icon.Width(), "height" = my_icon.Height()) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 6b6dca84f290..07ffc03e49a6 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -638,7 +638,7 @@ GLOBAL_LIST_EMPTY(species_list) moblist += mob_to_sort for(var/mob/dead/new_player/mob_to_sort in sortmob) moblist += mob_to_sort - for(var/mob/living/simple_animal/slime/mob_to_sort in sortmob) + for(var/mob/living/basic/slime/mob_to_sort in sortmob) moblist += mob_to_sort for(var/mob/living/simple_animal/mob_to_sort in sortmob) // We've already added slimes. diff --git a/code/__HELPERS/paths/path.dm b/code/__HELPERS/paths/path.dm index 14241ef8e706..3b674fdc7afb 100644 --- a/code/__HELPERS/paths/path.dm +++ b/code/__HELPERS/paths/path.dm @@ -297,6 +297,8 @@ var/incapacitated = FALSE /// Is our mob incorporeal var/incorporeal_move = FALSE + /// is our mob a xenofauna or slime + var/xenofauna_or_slime = FALSE /// If our mob has a rider, what does it look like var/datum/can_pass_info/rider_info = null /// If our mob is buckled to something, what's it like @@ -346,6 +348,9 @@ src.can_ventcrawl = HAS_TRAIT(living_construct, TRAIT_VENTCRAWLER_ALWAYS) || HAS_TRAIT(living_construct, TRAIT_VENTCRAWLER_NUDE) src.mob_size = living_construct.mob_size src.incorporeal_move = living_construct.incorporeal_move + if(istype(living_construct, /mob/living/basic/slime) || istype(living_construct, /mob/living/basic/xenofauna)) + src.xenofauna_or_slime = TRUE + if(iscameramob(construct_from)) src.camera_type = construct_from.type src.is_bot = isbot(construct_from) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index ed46caa7ab9e..07df001f3a51 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -3,6 +3,7 @@ #define POPCOUNT_SHUTTLE_ESCAPEES "shuttle_escapees" //Emergency shuttle only. #define PERSONAL_LAST_ROUND "personal last round" #define SERVER_LAST_ROUND "server last round" +#define DISCORD_SUPPRESS_NOTIFICATIONS (1 << 12) // monke edit: discord flag for silent messages GLOBAL_LIST_INIT(achievements_unlocked, list()) @@ -193,18 +194,16 @@ GLOBAL_LIST_INIT(round_end_images, world.file2list("data/image_urls.txt")) // MO return FALSE if(human_mob.mind && (human_mob.mind.special_role || length(human_mob.mind.antag_datums) > 0)) - var/didthegamerwin = TRUE for(var/datum/antagonist/antag_datums as anything in human_mob.mind.antag_datums) + if(initial(antag_datums.can_assign_self_objectives) && !antag_datums.can_assign_self_objectives) + return FALSE // You don't get a prize if you picked your own objective, you can't fail those for(var/datum/objective/objective_datum as anything in antag_datums.objectives) if(!objective_datum.check_completion()) - didthegamerwin = FALSE - if(!didthegamerwin) - return FALSE + return FALSE player_client.give_award(/datum/award/score/hardcore_random, human_mob, round(human_mob.hardcore_survival_score * 2)) else if(considered_escaped(human_mob)) player_client.give_award(/datum/award/score/hardcore_random, human_mob, round(human_mob.hardcore_survival_score)) - /datum/controller/subsystem/ticker/proc/declare_completion(was_forced = END_ROUND_AS_NORMAL) set waitfor = FALSE @@ -347,6 +346,7 @@ GLOBAL_LIST_INIT(round_end_images, world.file2list("data/image_urls.txt")) // MO webhook_info["username"] = CONFIG_GET(string/roundend_webhook_name) if(CONFIG_GET(string/mentorhelp_webhook_pfp)) webhook_info["avatar_url"] = CONFIG_GET(string/roundend_webhook_pfp) + webhook_info["flags"] = DISCORD_SUPPRESS_NOTIFICATIONS // monke edit: @silent roundend pings // Uncomment when servers are moved to TGS4 // send2chat(new /datum/tgs_message_conent("[initiator_ckey] | [message_content]"), "ahelp", TRUE) var/list/headers = list() @@ -781,10 +781,7 @@ GLOBAL_LIST_INIT(round_end_images, world.file2list("data/image_urls.txt")) // MO var/list/objective_parts = list() var/count = 1 for(var/datum/objective/objective in objectives) - if(objective.check_completion()) - objective_parts += "[objective.objective_name] #[count]: [objective.explanation_text] [span_greentext("Success!")]" - else - objective_parts += "[objective.objective_name] #[count]: [objective.explanation_text] [span_redtext("Fail.")]" + objective_parts += "[objective.objective_name] #[count]: [objective.explanation_text] [objective.get_roundend_success_suffix()]" count++ return objective_parts.Join("
") @@ -890,3 +887,5 @@ GLOBAL_LIST_INIT(round_end_images, world.file2list("data/image_urls.txt")) // MO var/winner_key ///The name of the area we earned this cheevo in var/award_location + +#undef DISCORD_SUPPRESS_NOTIFICATIONS diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index e9df60b699ea..b1fae85aeed1 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -36,8 +36,7 @@ return "northwest" if(SOUTHWEST) return "southwest" - else - return + return NONE //Turns text into proper directions /proc/text2dir(direction) @@ -58,8 +57,7 @@ return SOUTHEAST if("SOUTHWEST") return SOUTHWEST - else - return + return NONE //Converts an angle (degrees) into a ss13 direction GLOBAL_LIST_INIT(modulo_angle_to_dir, list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST,WEST,NORTHWEST)) diff --git a/code/__HELPERS/view.dm b/code/__HELPERS/view.dm index 6a4210bc5350..c8d46e31bd67 100644 --- a/code/__HELPERS/view.dm +++ b/code/__HELPERS/view.dm @@ -2,6 +2,11 @@ if(isnum(view)) var/totalviewrange = (view < 0 ? -1 : 1) + 2 * view return list(totalviewrange, totalviewrange) + else if(isnull(view)) // assume world.view if view is null + var/static/list/cached_world_view + if(!cached_world_view) + cached_world_view = getviewsize(world.view) + return cached_world_view else var/list/viewrangelist = splittext(view,"x") return list(text2num(viewrangelist[1]), text2num(viewrangelist[2])) diff --git a/code/__HELPERS/~monkestation-helpers/announcements.dm b/code/__HELPERS/~monkestation-helpers/announcements.dm new file mode 100644 index 000000000000..2298bfe448f1 --- /dev/null +++ b/code/__HELPERS/~monkestation-helpers/announcements.dm @@ -0,0 +1,15 @@ +/proc/send_formatted_admin_message( + text, + title = "Admin Alert", + sound_override = 'sound/effects/adminhelp.ogg', + color_override = "red" +) + if(isnull(text)) + return + var/list/announcement_strings = list() + announcement_strings += SUBHEADER_ANNOUNCEMENT_TITLE(title) + announcement_strings += span_major_announcement_text(text) + var/finalized_announcement = create_announcement_div(jointext(announcement_strings, ""), color_override) + SEND_ADMINCHAT_MESSAGE(finalized_announcement) + if(sound_override) + SEND_ADMINS_NOTFICATION_SOUND(sound_override) diff --git a/code/__HELPERS/~monkestation-helpers/logging/game.dm b/code/__HELPERS/~monkestation-helpers/logging/game.dm new file mode 100644 index 000000000000..58e0a4d6e69e --- /dev/null +++ b/code/__HELPERS/~monkestation-helpers/logging/game.dm @@ -0,0 +1,2 @@ +/proc/log_storyteller(text, list/data) + logger.Log(LOG_CATEGORY_STORYTELLER, text, data) diff --git a/code/__byond_version_compat.dm b/code/__byond_version_compat.dm index e2dcd29c8189..88d78e3ad36d 100644 --- a/code/__byond_version_compat.dm +++ b/code/__byond_version_compat.dm @@ -2,11 +2,11 @@ //Update this whenever you need to take advantage of more recent byond features #define MIN_COMPILER_VERSION 515 -#define MIN_COMPILER_BUILD 1609 +#define MIN_COMPILER_BUILD 1627 #if (DM_VERSION < MIN_COMPILER_VERSION || DM_BUILD < MIN_COMPILER_BUILD) && !defined(SPACEMAN_DMM) //Don't forget to update this part #error Your version of BYOND is too out-of-date to compile this project. Go to https://secure.byond.com/download and update. -#error You need version 515.1609 or higher +#error You need version 515.1627 or higher #endif @@ -28,12 +28,3 @@ /// Call by name proc reference, checks if the proc is an existing global proc #define GLOBAL_PROC_REF(X) (/proc/##X) - -/// fcopy will crash on 515 linux if given a non-existant file, instead of returning 0 like on 514 linux or 515 windows -/// var case matches documentation for fcopy. -/world/proc/__fcopy(Src, Dst) - if (istext(Src) && !fexists(Src)) - return 0 - return fcopy(Src, Dst) - -#define fcopy(Src, Dst) world.__fcopy(Src, Dst) diff --git a/code/_compile_options.dm b/code/_compile_options.dm index ac842e3c0358..1bb31541e9f4 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -112,7 +112,7 @@ #warn compiling in TESTING mode. testing() debug messages will be visible. #endif -#ifdef CIBUILDING +#if defined(CIBUILDING) && !defined(OPENDREAM) #define UNIT_TESTS #endif @@ -137,8 +137,15 @@ #define CBT #endif -#if !defined(CBT) && !defined(SPACEMAN_DMM) -#warn Building with Dream Maker is no longer supported and will result in errors. -#warn In order to build, run BUILD.bat in the root directory. -#warn Consider switching to VSCode editor instead, where you can press Ctrl+Shift+B to build. +#if defined(OPENDREAM) + #if !defined(CIBUILDING) + #warn You are building with OpenDream. Remember to build TGUI manually. + #warn You can do this by running tgui-build.cmd from the bin directory. + #endif +#else + #if !defined(CBT) && !defined(SPACEMAN_DMM) + #warn Building with Dream Maker is no longer supported and will result in errors. + #warn In order to build, run BUILD.cmd in the root directory. + #warn Consider switching to VSCode editor instead, where you can press Ctrl+Shift+B to build. + #endif #endif diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index f00363c486fc..c59f199af410 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -68,7 +68,6 @@ DEFINE_BITFIELD(area_flags, list( "XENOBIOLOGY_COMPATIBLE" = XENOBIOLOGY_COMPATIBLE, "PASSIVE_AREA" = PASSIVE_AREA, "GHOST_AREA" = GHOST_AREA, - "NO_EXPLOSIONS_DURING" = NO_EXPLOSIONS_DURING, "NO_GHOSTS_DURING_ROUND" = NO_GHOSTS_DURING_ROUND, )) @@ -286,19 +285,18 @@ DEFINE_BITFIELD(movement_type, list( )) DEFINE_BITFIELD(obj_flags, list( - "BLOCK_Z_IN_DOWN" = BLOCK_Z_IN_DOWN, - "BLOCK_Z_IN_UP" = BLOCK_Z_IN_UP, - "BLOCK_Z_OUT_DOWN" = BLOCK_Z_OUT_DOWN, - "BLOCK_Z_OUT_UP" = BLOCK_Z_OUT_UP, + "IN_USE" = IN_USE, + "EMAGGED" = EMAGGED, "CAN_BE_HIT" = CAN_BE_HIT, "DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION, - "EMAGGED" = EMAGGED, - "IN_USE" = IN_USE, + "UNIQUE_RENAME" = UNIQUE_RENAME, + "BLOCK_Z_OUT_DOWN" = BLOCK_Z_OUT_DOWN, + "BLOCK_Z_OUT_UP" = BLOCK_Z_OUT_UP, + "BLOCK_Z_IN_DOWN" = BLOCK_Z_IN_DOWN, + "BLOCK_Z_IN_UP" = BLOCK_Z_IN_UP, "BLOCKS_CONSTRUCTION" = BLOCKS_CONSTRUCTION, "BLOCKS_CONSTRUCTION_DIR" = BLOCKS_CONSTRUCTION_DIR, "IGNORE_DENSITY" = IGNORE_DENSITY, - "UNIQUE_RENAME" = UNIQUE_RENAME, - "USES_TGUI" = USES_TGUI, )) DEFINE_BITFIELD(pass_flags, list( @@ -319,7 +317,8 @@ DEFINE_BITFIELD(resistance_flags, list( "UNACIDABLE" = UNACIDABLE, "ACID_PROOF" = ACID_PROOF, "INDESTRUCTIBLE" = INDESTRUCTIBLE, - "FREEZE_PROOF" = FREEZE_PROOF + "FREEZE_PROOF" = FREEZE_PROOF, + "SHUTTLE_CRUSH_PROOF" = SHUTTLE_CRUSH_PROOF )) DEFINE_BITFIELD(sight, list( diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index ad25acd96757..36ad9188f834 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -181,6 +181,7 @@ GLOBAL_LIST_INIT(ai_core_display_screens, sort_list(list( "Triumvirate", "Weird", "Yes-Man", + "Randomgod", //MONKEYSTATION ADDITION ))) /// A form of resolve_ai_icon that is guaranteed to never sleep. diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index b6fdf4b87b32..6772ecab7dec 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -227,6 +227,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items list(//drinks /obj/item/reagent_containers/cup/glass/bottle/vodka = 1, /obj/item/reagent_containers/cup/glass/drinkingglass/filled/nuka_cola = 1, + /obj/item/reagent_containers/cup/glass/drinkingglass/filled/sunset_sarsaparilla = 1, //monkestation edit /obj/item/reagent_containers/cup/soda_cans/grey_bull = 1, ) = 1, list(//sprayers @@ -365,11 +366,13 @@ GLOBAL_LIST_INIT(oddity_loot, list(//oddity: strange or crazy items /obj/item/dice/d20/fate/stealth/one_use = 1, //Looks like a d20, keep the d20 in the uncommon pool. /obj/item/shadowcloak = 1, /obj/item/spear/grey_tide = 1, + /* MONKESTATION EDIT - removal of self antag items from maints loot list(//music /obj/item/instrument/saxophone/spectral = 1, /obj/item/instrument/trombone/spectral = 1, /obj/item/instrument/trumpet/spectral = 1, ) = 1, + */ // MONKESTATION EDIT END /obj/item/toy/cards/deck/tarot/haunted = 1, /obj/item/gun/magic/wand/polymorph = 1, //monkestation edit /obj/item/organ/internal/butt/atomic = 1, //monkestation edit diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index d0091684e2d4..cb7b7ebfc290 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -33,6 +33,7 @@ GLOBAL_LIST_INIT(syndicate_monkey_names, world.file2list("strings/names/syndicat GLOBAL_LIST_INIT(guardian_first_names, world.file2list("strings/names/guardian_descriptions.txt")) GLOBAL_LIST_INIT(guardian_tech_surnames, world.file2list("strings/names/guardian_gamepieces.txt")) GLOBAL_LIST_INIT(guardian_fantasy_surnames, world.file2list("strings/names/guardian_tarot.txt")) +GLOBAL_LIST_INIT(operative_aliases, world.file2list("strings/names/operative_alias.txt")) GLOBAL_LIST_INIT(verbs, world.file2list("strings/names/verbs.txt")) GLOBAL_LIST_INIT(ing_verbs, world.file2list("strings/names/ing_verbs.txt")) diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm index 132beed9b331..160e3e0a4ca3 100644 --- a/code/_globalvars/phobias.dm +++ b/code/_globalvars/phobias.dm @@ -55,7 +55,7 @@ GLOBAL_LIST_INIT(phobia_regexes, list( GLOBAL_LIST_INIT(phobia_mobs, list( "aliens" = typecacheof(list( /mob/living/carbon/alien, - /mob/living/simple_animal/slime, + /mob/living/basic/slime, )), "anime" = typecacheof(list(/mob/living/basic/guardian)), "birds" = typecacheof(list( @@ -107,7 +107,7 @@ GLOBAL_LIST_INIT(phobia_mobs, list( )), "aliens" = typecacheof(list( /mob/living/carbon/alien, - /mob/living/simple_animal/slime, + /mob/living/basic/slime, )), "conspiracies" = typecacheof(list( /mob/living/simple_animal/bot/secbot, diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 4dd1e2d2dfbe..6d294a153cdc 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -199,7 +199,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE, "TRAIT_UNDENSE" = TRAIT_UNDENSE, "TRAIT_EXPANDED_FOV" = TRAIT_EXPANDED_FOV, - "TRAIT_ANALGESIA" = TRAIT_ANALGESIA + "TRAIT_ANALGESIA" = TRAIT_ANALGESIA, + "TRAIT_ON_ELEVATED_SURFACE" = TRAIT_ON_ELEVATED_SURFACE, ), /obj/item/bodypart = list( "TRAIT_PARALYSIS" = TRAIT_PARALYSIS, @@ -256,6 +257,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FISH_FED_LUBE" = TRAIT_FISH_FED_LUBE, "TRAIT_FISH_NO_HUNGER" = TRAIT_FISH_NO_HUNGER, ), + /turf = list( + "TRAIT_ELEVATED_TURF" = TRAIT_ELEVATED_TURF, + ) )) /// value -> trait name, generated on use from trait_by_type global diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm index e33ba9cb5406..ab5b3f4aad97 100644 --- a/code/_onclick/adjacent.dm +++ b/code/_onclick/adjacent.dm @@ -87,19 +87,23 @@ /* This checks if you there is uninterrupted airspace between that turf and this one. - This is defined as any dense ON_BORDER_1 object, or any dense object without LETPASSTHROW. +This is defined as any dense ON_BORDER_1 object, or any dense object without LETPASSTHROW or LETPASSCLICKS. The border_only flag allows you to not objects (for source and destination squares) */ /turf/proc/ClickCross(target_dir, border_only, atom/target, atom/movable/mover) for(var/obj/O in src) if((mover && O.CanPass(mover, target_dir)) || (!mover && !O.density)) continue - if(O == target || O == mover || (O.pass_flags_self & LETPASSTHROW)) //check if there's a dense object present on the turf - continue // LETPASSTHROW is used for anything you can click through (or the firedoor special case, see above) + + //If there's a dense object on the turf, only allow the click to pass if you can throw items over it or it has a special flag. + if(O == target || O == mover || (O.pass_flags_self & (LETPASSTHROW|LETPASSCLICKS))) + continue if( O.flags_1&ON_BORDER_1) // windows are on border, check them first if( O.dir & target_dir || O.dir & (O.dir-1) ) // full tile windows are just diagonals mechanically return FALSE //O.dir&(O.dir-1) is false for any cardinal direction, but true for diagonal ones + else if( !border_only ) // dense, not on border, cannot pass over return FALSE + return TRUE diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index bfe817919121..dde42df814b9 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -11,7 +11,7 @@ return if(ismob(A)) - ai_actual_track(A) + ai_tracking_tool.track_mob(src, A) else A.move_camera_by_click() diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 95597d9b1ac0..058f2f30156e 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -114,14 +114,14 @@ MiddleClickOn(A, params) return if(LAZYACCESS(modifiers, ALT_CLICK)) // alt and alt-gr (rightalt) - if((istate & ISTATE_SECONDARY)) - alt_click_on_secondary(A) - else - AltClickOn(A) + AltClickOn(A) return if(LAZYACCESS(modifiers, CTRL_CLICK)) CtrlClickOn(A) return + else if(LAZYACCESS(modifiers, ALT_CLICK)) // monke edit: ensure alt-secondary works + alt_click_on_secondary(A) + return if(incapacitated(IGNORE_RESTRAINTS|IGNORE_STASIS|IGNORE_CRIT)) return diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index fabbdae41ab5..5d94d8be8c6e 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -30,13 +30,11 @@ icon_state = "track" /atom/movable/screen/ai/camera_track/Click() - if(..()) + . = ..() + if(.) return var/mob/living/silicon/ai/AI = usr - var/target_name = tgui_input_list(AI, "Select a target", "Tracking", AI.trackable_mobs()) - if(isnull(target_name)) - return - AI.ai_camera_track(target_name) + AI.ai_camera_track() /atom/movable/screen/ai/camera_light name = "Toggle Camera Light" diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 61d7600ddaff..c9837099e6d1 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -12,7 +12,7 @@ *flicks are forwarded to master *override makes it so the alert is not replaced until cleared by a clear_alert with clear_override, and it's used for hallucinations. */ -/mob/proc/throw_alert(category, type, severity, obj/new_master, override = FALSE) +/mob/proc/throw_alert(category, type, severity, obj/new_master, override = FALSE, timeout_override, no_anim = FALSE) if(!category || QDELETED(src)) return @@ -35,7 +35,7 @@ // No need to update existing alert return thealert // Reset timeout of existing alert - var/timeout = initial(thealert.timeout) + var/timeout = timeout_override || initial(thealert.timeout) addtimer(CALLBACK(src, PROC_REF(alert_timeout), thealert, category), timeout) thealert.timeout = world.time + timeout - world.tick_lag return thealert @@ -63,9 +63,11 @@ alerts[category] = thealert if(client && hud_used) hud_used.reorganize_alerts() - thealert.transform = matrix(32, 6, MATRIX_TRANSLATE) - animate(thealert, transform = matrix(), time = 2.5, easing = CUBIC_EASING) - + if(!no_anim) + thealert.transform = matrix(32, 0, MATRIX_TRANSLATE) + animate(thealert, transform = matrix(), time = 1 SECONDS, easing = ELASTIC_EASING) + if(timeout_override) + thealert.timeout = timeout_override if(thealert.timeout) addtimer(CALLBACK(src, PROC_REF(alert_timeout), thealert, category), thealert.timeout) thealert.timeout = world.time + thealert.timeout - world.tick_lag @@ -294,24 +296,27 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." /atom/movable/screen/alert/fire/Click() . = ..() if(!.) - return + return FALSE var/mob/living/living_owner = owner + if(!living_owner.can_resist()) + return FALSE living_owner.changeNext_move(CLICK_CD_RESIST) - if(living_owner.mobility_flags & MOBILITY_MOVE) - return living_owner.resist_fire() + if(!(living_owner.mobility_flags & MOBILITY_MOVE)) + return FALSE + + return living_owner.resist_fire() /atom/movable/screen/alert/give // information set when the give alert is made icon_state = "default" - var/mob/living/carbon/offerer - var/obj/item/receiving + /// The offer we're linked to, yes this is suspiciously like a status effect alert + var/datum/status_effect/offering/offer /// Additional text displayed in the description of the alert. var/additional_desc_text = "Click this alert to take it." /atom/movable/screen/alert/give/Destroy() - offerer = null - receiving = null + offer = null return ..() /** @@ -324,16 +329,17 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." * * offerer - The person giving the alert and item * * receiving - The item being given by the offerer */ -/atom/movable/screen/alert/give/proc/setup(mob/living/carbon/taker, mob/living/carbon/offerer, obj/item/receiving) +/atom/movable/screen/alert/give/proc/setup(mob/living/carbon/taker, datum/status_effect/offering/offer) + src.offer = offer + + var/mob/living/offerer = offer.owner + var/obj/item/receiving = offer.offered_item var/receiving_name = get_receiving_name(taker, offerer, receiving) name = "[offerer] is offering [receiving_name]" desc = "[offerer] is offering [receiving_name]. [additional_desc_text]" icon_state = "template" cut_overlays() add_overlay(receiving) - src.receiving = receiving - src.offerer = offerer - /** * Called right before `setup()`, to do any sort of logic to change the name of @@ -353,7 +359,6 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." /atom/movable/screen/alert/give/proc/get_receiving_name(mob/living/carbon/taker, mob/living/carbon/offerer, obj/item/receiving) return receiving.name - /atom/movable/screen/alert/give/Click(location, control, params) . = ..() if(!.) @@ -367,26 +372,31 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." /// An overrideable proc used simply to hand over the item when claimed, this is a proc so that high-fives can override them since nothing is actually transferred /atom/movable/screen/alert/give/proc/handle_transfer() var/mob/living/carbon/taker = owner + var/mob/living/offerer = offer.owner + var/obj/item/receiving = offer.offered_item taker.take(offerer, receiving) SEND_SIGNAL(offerer, COMSIG_CARBON_ITEM_GIVEN, taker, receiving) - /atom/movable/screen/alert/give/highfive additional_desc_text = "Click this alert to slap it." - + /// Tracks active "to slow"ing so we can't spam click + var/too_slowing_this_guy = FALSE /atom/movable/screen/alert/give/highfive/get_receiving_name(mob/living/carbon/taker, mob/living/carbon/offerer, obj/item/receiving) return "a high-five" - -/atom/movable/screen/alert/give/highfive/setup(mob/living/carbon/taker, mob/living/carbon/offerer, obj/item/receiving) +/atom/movable/screen/alert/give/highfive/setup(mob/living/carbon/taker, datum/status_effect/offering/offer) . = ..() - RegisterSignal(offerer, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(check_fake_out)) - + RegisterSignal(offer.owner, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(check_fake_out)) /atom/movable/screen/alert/give/highfive/handle_transfer() + if(too_slowing_this_guy) + return + var/mob/living/carbon/taker = owner - if(receiving && (receiving in offerer.held_items)) + var/mob/living/offerer = offer.owner + var/obj/item/receiving = offer.offered_item + if(!QDELETED(receiving) && offerer.is_holding(receiving)) receiving.on_offer_taken(offerer, taker) return @@ -395,10 +405,12 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." /// If the person who offered the high five no longer has it when we try to accept it, we get pranked hard /atom/movable/screen/alert/give/highfive/proc/too_slow_p1() var/mob/living/carbon/rube = owner - if(!rube || !offerer) + var/mob/living/offerer = offer?.owner + if(QDELETED(rube) || QDELETED(offerer)) qdel(src) return + too_slowing_this_guy = TRUE offerer.visible_message(span_notice("[rube] rushes in to high-five [offerer], but-"), span_nicegreen("[rube] falls for your trick just as planned, lunging for a high-five that no longer exists! Classic!"), ignored_mobs=rube) to_chat(rube, span_nicegreen("You go in for [offerer]'s high-five, but-")) addtimer(CALLBACK(src, PROC_REF(too_slow_p2), offerer, rube), 0.5 SECONDS) @@ -406,49 +418,35 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." /// Part two of the ultimate prank /atom/movable/screen/alert/give/highfive/proc/too_slow_p2() var/mob/living/carbon/rube = owner - if(!rube || !offerer) - qdel(src) - return + var/mob/living/offerer = offer?.owner + if(!QDELETED(rube) && !QDELETED(offerer)) + offerer.visible_message(span_danger("[offerer] pulls away from [rube]'s slap at the last second, dodging the high-five entirely!"), span_nicegreen("[rube] fails to make contact with your hand, making an utter fool of [rube.p_them()]self!"), span_hear("You hear a disappointing sound of flesh not hitting flesh!"), ignored_mobs=rube) + to_chat(rube, span_userdanger("[uppertext("NO! [offerer] PULLS [offerer.p_their()] HAND AWAY FROM YOURS! YOU'RE TOO SLOW!")]")) + playsound(offerer, 'sound/weapons/thudswoosh.ogg', 100, TRUE, 1) + rube.Knockdown(1 SECONDS) + offerer.add_mood_event("high_five", /datum/mood_event/down_low) + rube.add_mood_event("high_five", /datum/mood_event/too_slow) + offerer.remove_status_effect(/datum/status_effect/offering/no_item_received/high_five) - offerer.visible_message(span_danger("[offerer] pulls away from [rube]'s slap at the last second, dodging the high-five entirely!"), span_nicegreen("[rube] fails to make contact with your hand, making an utter fool of [rube.p_them()]self!"), span_hear("You hear a disappointing sound of flesh not hitting flesh!"), ignored_mobs=rube) - var/all_caps_for_emphasis = uppertext("NO! [offerer] PULLS [offerer.p_their()] HAND AWAY FROM YOURS! YOU'RE TOO SLOW!") - to_chat(rube, span_userdanger("[all_caps_for_emphasis]")) - playsound(offerer, 'sound/weapons/thudswoosh.ogg', 100, TRUE, 1) - rube.Knockdown(1 SECONDS) - offerer.add_mood_event("high_five", /datum/mood_event/down_low) - rube.add_mood_event("high_five", /datum/mood_event/too_slow) qdel(src) /// If someone examine_more's the offerer while they're trying to pull a too-slow, it'll tip them off to the offerer's trickster ways -/atom/movable/screen/alert/give/highfive/proc/check_fake_out(datum/source, mob/user, list/examine_list) +/atom/movable/screen/alert/give/highfive/proc/check_fake_out(mob/source, mob/user, list/examine_list) SIGNAL_HANDLER - if(!receiving) - examine_list += "[span_warning("[offerer]'s arm appears tensed up, as if [offerer.p_they()] plan on pulling it back suddenly...")]\n" - + if(QDELETED(offer.offered_item)) + examine_list += span_warning("[source]'s arm appears tensed up, as if [source.p_they()] plan on pulling it back suddenly...") /atom/movable/screen/alert/give/hand/get_receiving_name(mob/living/carbon/taker, mob/living/carbon/offerer, obj/item/receiving) additional_desc_text = "Click this alert to take it and let [offerer.p_them()] pull you around!" return "[offerer.p_their()] [receiving.name]" +/atom/movable/screen/alert/give/hand/helping /atom/movable/screen/alert/give/hand/helping/get_receiving_name(mob/living/carbon/taker, mob/living/carbon/offerer, obj/item/receiving) . = ..() additional_desc_text = "Click this alert to let them help you up!" - -/atom/movable/screen/alert/give/secret_handshake - icon_state = "default" - -/atom/movable/screen/alert/give/secret_handshake/setup(mob/living/carbon/taker, mob/living/carbon/offerer, obj/item/receiving) - name = "[offerer] is offering a Handshake" - desc = "[offerer] wants to teach you the Secret Handshake for their Family and induct you! Click on this alert to accept." - icon_state = "template" - cut_overlays() - add_overlay(receiving) - src.receiving = receiving - src.offerer = offerer - /// Gives the player the option to succumb while in critical condition /atom/movable/screen/alert/succumb name = "Succumb" @@ -806,6 +804,155 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." if(NOTIFY_ORBIT) ghost_owner.ManualFollow(target) +/atom/movable/screen/alert/poll_alert + name = "Looking for candidates" + icon_state = "template" + timeout = 30 SECONDS + ghost_screentips = TRUE + /// If true you need to call START_PROCESSING manually + var/show_time_left = FALSE + /// MA for maptext showing time left for poll + var/mutable_appearance/time_left_overlay + /// MA for overlay showing that you're signed up to poll + var/mutable_appearance/signed_up_overlay + /// MA for maptext overlay showing how many polls are stacked together + var/mutable_appearance/stacks_overlay + /// MA for maptext overlay showing how many candidates are signed up to a poll + var/mutable_appearance/candidates_num_overlay + /// MA for maptext overlay of poll's role name or question + var/mutable_appearance/role_overlay + /// If set, on Click() it'll register the player as a candidate + var/datum/candidate_poll/poll + +/atom/movable/screen/alert/poll_alert/Initialize(mapload) + . = ..() + signed_up_overlay = mutable_appearance('icons/hud/screen_gen.dmi', icon_state = "selector") + register_context() + +/atom/movable/screen/alert/poll_alert/proc/set_role_overlay() + var/role_or_only_question = poll.role || "?" + role_overlay = new + role_overlay.screen_loc = screen_loc + role_overlay.maptext = MAPTEXT("[full_capitalize(role_or_only_question)]") + role_overlay.maptext_width = 128 + role_overlay.transform = role_overlay.transform.Translate(-128, 0) + add_overlay(role_overlay) + +/atom/movable/screen/alert/poll_alert/Destroy() + QDEL_NULL(role_overlay) + QDEL_NULL(time_left_overlay) + QDEL_NULL(stacks_overlay) + QDEL_NULL(candidates_num_overlay) + QDEL_NULL(signed_up_overlay) + if(poll) + poll.alert_buttons -= src + poll = null + return ..() + +/atom/movable/screen/alert/poll_alert/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + var/left_click_text + if(poll) + if(owner in poll.signed_up) + left_click_text = "Leave" + else + left_click_text = "Enter" + context[SCREENTIP_CONTEXT_LMB] = "[left_click_text] Poll" + if(poll.ignoring_category) + var/selected_never = FALSE + if(owner.ckey in GLOB.poll_ignore[poll.ignoring_category]) + selected_never = TRUE + context[SCREENTIP_CONTEXT_ALT_LMB] = "[selected_never ? "Cancel " : ""]Never For This Round" + if(poll.jump_to_me && isobserver(owner)) + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Jump To" + return CONTEXTUAL_SCREENTIP_SET + +/atom/movable/screen/alert/poll_alert/process() + if(show_time_left) + var/timeleft = timeout - world.time + if(timeleft <= 0) + return PROCESS_KILL + cut_overlay(time_left_overlay) + time_left_overlay = new + time_left_overlay.maptext = MAPTEXT("[CEILING(timeleft / (1 SECONDS), 1)]") + time_left_overlay.transform = time_left_overlay.transform.Translate(4, 19) + add_overlay(time_left_overlay) + +/atom/movable/screen/alert/poll_alert/Click(location, control, params) + . = ..() + if(!. || isnull(poll)) + return + var/list/modifiers = params2list(params) + if(LAZYACCESS(modifiers, ALT_CLICK) && poll.ignoring_category) + set_never_round() + return + if(LAZYACCESS(modifiers, CTRL_CLICK) && poll.jump_to_me) + jump_to_pic_source() + return + handle_sign_up() + +/atom/movable/screen/alert/poll_alert/proc/handle_sign_up() + if(owner in poll.signed_up) + poll.remove_candidate(owner) + else if(!(owner.ckey in GLOB.poll_ignore[poll.ignoring_category])) + poll.sign_up(owner) + update_signed_up_overlay() + +/atom/movable/screen/alert/poll_alert/proc/set_never_round() + if(!(owner.ckey in GLOB.poll_ignore[poll.ignoring_category])) + poll.do_never_for_this_round(owner) + color = "red" + update_signed_up_overlay() + return + poll.undo_never_for_this_round(owner) + color = initial(color) + +/atom/movable/screen/alert/poll_alert/proc/jump_to_pic_source() + if(!poll?.jump_to_me || !isobserver(owner)) + return + var/turf/target_turf = get_turf(poll.jump_to_me) + if(target_turf && isturf(target_turf)) + owner.abstract_move(target_turf) + +/atom/movable/screen/alert/poll_alert/Topic(href, href_list) + if(href_list["never"]) + set_never_round() + return + if(href_list["signup"]) + handle_sign_up() + if(href_list["jump"]) + jump_to_pic_source() + return + +/atom/movable/screen/alert/poll_alert/proc/update_signed_up_overlay() + if(owner in poll.signed_up) + add_overlay(signed_up_overlay) + else + cut_overlay(signed_up_overlay) + +/atom/movable/screen/alert/poll_alert/proc/update_candidates_number_overlay() + cut_overlay(candidates_num_overlay) + if(!length(poll.signed_up)) + return + candidates_num_overlay = new + candidates_num_overlay.maptext = MAPTEXT("[length(poll.signed_up)]") + candidates_num_overlay.transform = candidates_num_overlay.transform.Translate(-4, 2) + add_overlay(candidates_num_overlay) + +/atom/movable/screen/alert/poll_alert/proc/update_stacks_overlay() + cut_overlay(stacks_overlay) + var/stack_number = 1 + for(var/datum/candidate_poll/other_poll as anything in SSpolling.currently_polling) + if(other_poll != poll && other_poll.poll_key == poll.poll_key && !other_poll.finished) + stack_number++ + if(stack_number <= 1) + return + stacks_overlay = new + stacks_overlay.maptext = MAPTEXT("[stack_number]x") + stacks_overlay.transform = stacks_overlay.transform.Translate(3, 2) + stacks_overlay.layer = layer + add_overlay(stacks_overlay) + //OBJECT-BASED /atom/movable/screen/alert/buckled diff --git a/code/_onclick/hud/credits.dm b/code/_onclick/hud/credits.dm index 6de4b735bd19..e39e1ef36d07 100644 --- a/code/_onclick/hud/credits.dm +++ b/code/_onclick/hud/credits.dm @@ -44,7 +44,7 @@ icon = I parent = P icon_state = credited - maptext = MAPTEXT(credited) + maptext = MAPTEXT_PIXELLARI(credited) maptext_x = world.icon_size + 8 maptext_y = (world.icon_size / 2) - 4 maptext_width = world.icon_size * 3 diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index b4ea3b9dc6da..08a3c9d70a23 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -73,6 +73,9 @@ GLOBAL_LIST_INIT(available_ui_styles, list( /// had with a proc call, especially on one of the hottest procs in the /// game (MouseEntered). var/screentips_enabled = SCREENTIP_PREFERENCE_ENABLED + /// Whether to use text or images for click hints. + /// Same behavior as `screentips_enabled`--very hot, updated when the preference is updated. + var/screentip_images = TRUE /// If this client is being shown atmos debug overlays or not var/atmos_debug_overlays = FALSE @@ -121,6 +124,7 @@ GLOBAL_LIST_INIT(available_ui_styles, list( var/datum/preferences/preferences = owner?.client?.prefs screentip_color = preferences?.read_preference(/datum/preference/color/screentip_color) screentips_enabled = preferences?.read_preference(/datum/preference/choiced/enable_screentips) + screentip_images = preferences?.read_preference(/datum/preference/toggle/screentip_images) screentip_text = new(null, src) static_inventory += screentip_text diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index 302c50d10f6b..24f4a40ec078 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -312,6 +312,7 @@ GLOBAL_LIST_EMPTY(radial_menus) if(!M.client || !anchor) return current_user = M.client + RegisterSignal(current_user, COMSIG_QDELETING, PROC_REF(cleanup_on_logout)) //Blank menu_holder = image(icon='icons/effects/effects.dmi',loc=anchor,icon_state="nothing", layer = RADIAL_BACKGROUND_LAYER) SET_PLANE_EXPLICIT(menu_holder, ABOVE_HUD_PLANE, M) @@ -321,6 +322,7 @@ GLOBAL_LIST_EMPTY(radial_menus) /datum/radial_menu/proc/hide() if(current_user) + UnregisterSignal(current_user, COMSIG_QDELETING) current_user.images -= menu_holder /datum/radial_menu/proc/wait(atom/user, atom/anchor, require_near = FALSE) @@ -334,6 +336,13 @@ GLOBAL_LIST_EMPTY(radial_menus) next_check = world.time + check_delay stoplag(1) +/datum/radial_menu/proc/cleanup_on_logout(client/source) + SIGNAL_HANDLER + if(!QDELETED(source)) + UnregisterSignal(source, COMSIG_QDELETING) + if(QDELETED(current_user) || source == current_user) + qdel(src) + /datum/radial_menu/Destroy() Reset() hide() diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index a8587cd98a09..6a30e0b4623b 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -29,7 +29,7 @@ if (SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return TRUE if (SECONDARY_ATTACK_CONTINUE_CHAIN) - // Normal behavior + EMPTY_BLOCK_GUARD // Normal behavior else CRASH("pre_attack_secondary must return an SECONDARY_ATTACK_* define, please consult code/__DEFINES/combat.dm") else @@ -47,7 +47,7 @@ if (SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return TRUE if (SECONDARY_ATTACK_CONTINUE_CHAIN) - // Normal behavior + EMPTY_BLOCK_GUARD // Normal behavior else CRASH("attackby_secondary must return an SECONDARY_ATTACK_* define, please consult code/__DEFINES/combat.dm") else diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index f3a4adab662f..9bd238dd8857 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -217,30 +217,6 @@ return SECONDARY_ATTACK_CALL_NORMAL -/* - Slimes - Nothing happening here -*/ -/mob/living/simple_animal/slime/resolve_unarmed_attack(atom/attack_target, proximity_flag, list/modifiers) - if(isturf(attack_target)) - return ..() - attack_target.attack_slime(src, modifiers) - -/mob/living/simple_animal/slime/resolve_right_click_attack(atom/target, list/modifiers) - if(isturf(target)) - return ..() - return target.attack_slime_secondary(src, modifiers) - -/atom/proc/attack_slime(mob/user, list/modifiers) - return - -/** - * Called when a slime mob right clicks an atom (that is not a turf). - * Returns a SECONDARY_ATTACK_* value. - */ -/atom/proc/attack_slime_secondary(mob/user, list/modifiers) - return SECONDARY_ATTACK_CALL_NORMAL - /* Drones */ diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index 2138c5efed51..58829c1b994b 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -93,6 +93,8 @@ break if (fexists("[directory]/dev_overrides.txt")) LoadEntries("dev_overrides.txt") + if (fexists("[directory]/ezdb.txt")) + LoadEntries("ezdb.txt") loadmaplist(CONFIG_MAPS_FILE) LoadMOTD() LoadPolicy() diff --git a/code/controllers/configuration/entries/dbconfig.dm b/code/controllers/configuration/entries/dbconfig.dm index 14713c4e1c77..bd40d3a168ca 100644 --- a/code/controllers/configuration/entries/dbconfig.dm +++ b/code/controllers/configuration/entries/dbconfig.dm @@ -68,3 +68,8 @@ . = ..() if (.) SSdbcore.max_concurrent_queries = config_entry_value + +/// The exe for mariadbd.exe. +/// Shouldn't really be set on production servers, primarily for EZDB. +/datum/config_entry/string/db_daemon + protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index 1686c6a2ca05..626cb8b3d505 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -267,8 +267,7 @@ movedelay_type = /mob/living/silicon/robot /datum/config_entry/number/outdated_movedelay/alien_delay movedelay_type = /mob/living/carbon/alien -/datum/config_entry/number/outdated_movedelay/slime_delay - movedelay_type = /mob/living/simple_animal/slime + /datum/config_entry/number/outdated_movedelay/animal_delay movedelay_type = /mob/living/simple_animal ///////////////////////////////////////////////// diff --git a/code/controllers/configuration/entries/monkestation.dm b/code/controllers/configuration/entries/monkestation.dm index 9410ab93edbd..e27449639b57 100644 --- a/code/controllers/configuration/entries/monkestation.dm +++ b/code/controllers/configuration/entries/monkestation.dm @@ -28,3 +28,5 @@ protection = CONFIG_ENTRY_LOCKED /datum/config_entry/flag/looc_enabled + +/datum/config_entry/flag/log_storyteller diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm index c593a8e7744e..0f7918746b99 100644 --- a/code/controllers/globals.dm +++ b/code/controllers/globals.dm @@ -15,13 +15,12 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars) var/datum/controller/exclude_these = new // I know this is dumb but the nested vars list hangs a ref to the datum. This fixes that + // I have an issue report open, lummox has not responded. It might be a FeaTuRE + // Sooo we gotta be dumb var/list/controller_vars = exclude_these.vars.Copy() controller_vars["vars"] = null gvars_datum_in_built_vars = controller_vars + list(NAMEOF(src, gvars_datum_protected_varlist), NAMEOF(src, gvars_datum_in_built_vars), NAMEOF(src, gvars_datum_init_order)) -#if DM_VERSION >= 515 && DM_BUILD > 1620 - #warn datum.vars hanging a ref should now be fixed, there should be no reason to remove the vars list from our controller's vars list anymore -#endif QDEL_IN(exclude_these, 0) //signal logging isn't ready Initialize() diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index 96efadf80811..28aca55869bd 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -138,7 +138,7 @@ SUBSYSTEM_DEF(atoms) switch(result) if (INITIALIZE_HINT_NORMAL) - // pass + EMPTY_BLOCK_GUARD // Pass if(INITIALIZE_HINT_LATELOAD) if(arguments[1]) //mapload late_loaders += A diff --git a/code/controllers/subsystem/dbcore.dm b/code/controllers/subsystem/dbcore.dm index 705d9a8889ad..b16a6903b482 100644 --- a/code/controllers/subsystem/dbcore.dm +++ b/code/controllers/subsystem/dbcore.dm @@ -37,6 +37,8 @@ SUBSYSTEM_DEF(dbcore) var/connection // Arbitrary handle returned from rust_g. + var/db_daemon_started = FALSE + /datum/controller/subsystem/dbcore/Initialize() //We send warnings to the admins during subsystem init, as the clients will be New'd and messages //will queue properly with goonchat @@ -74,8 +76,6 @@ SUBSYSTEM_DEF(dbcore) CONFIG_SET(number/pooling_max_sql_connections, max(min_sql_connections, max_sql_connections)) log_config("ERROR: POOLING_MAX_SQL_CONNECTIONS ([max_sql_connections]) is set lower than POOLING_MIN_SQL_CONNECTIONS ([min_sql_connections]). Please check your config or the code defaults for sanity") - - /datum/controller/subsystem/dbcore/stat_entry(msg) msg = "P:[length(all_queries)]|Active:[length(queries_active)]|Standby:[length(queries_standby)]" return ..() @@ -183,6 +183,7 @@ SUBSYSTEM_DEF(dbcore) qdel(query_round_shutdown) if(IsConnected()) Disconnect() + stop_db_daemon() //nu /datum/controller/subsystem/dbcore/can_vv_get(var_name) @@ -226,6 +227,8 @@ SUBSYSTEM_DEF(dbcore) if(!CONFIG_GET(flag/sql_enabled)) return FALSE + start_db_daemon() + var/user = CONFIG_GET(string/feedback_login) var/pass = CONFIG_GET(string/feedback_password) var/db = CONFIG_GET(string/feedback_database) @@ -442,6 +445,47 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table . = Query.Execute(async) qdel(Query) +/datum/controller/subsystem/dbcore/proc/start_db_daemon() + set waitfor = FALSE + + if (db_daemon_started) + return + + db_daemon_started = TRUE + + var/daemon = CONFIG_GET(string/db_daemon) + if (!daemon) + return + + ASSERT(fexists(daemon), "Configured db_daemon doesn't exist") + + var/list/result = world.shelleo("echo \"Starting ezdb daemon, do not close this window\" && [daemon]") + var/error_code = result[1] + if (!error_code) + return + + stack_trace("Failed to start DB daemon: [error_code]\n[result[3]]") + +/datum/controller/subsystem/dbcore/proc/stop_db_daemon() + set waitfor = FALSE + + if (!db_daemon_started) + return + + db_daemon_started = FALSE + + var/daemon = CONFIG_GET(string/db_daemon) + if (!daemon) + return + + switch (world.system_type) + if (MS_WINDOWS) + var/list/result = world.shelleo("Get-Process | ? { $_.Path -eq '[daemon]' } | Stop-Process") + ASSERT(result[1], "Failed to stop DB daemon: [result[3]]") + if (UNIX) + var/list/result = world.shelleo("kill $(pgrep -f '[daemon]')") + ASSERT(result[1], "Failed to stop DB daemon: [result[3]]") + /datum/db_query // Inputs var/connection diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index ecae06bbfdb7..53181e24e844 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -14,10 +14,13 @@ SUBSYSTEM_DEF(events) var/wizardmode = FALSE /datum/controller/subsystem/events/Initialize() - for(var/type in typesof(/datum/round_event_control)) - var/datum/round_event_control/event = new type() - if(!event.typepath || !event.valid_for_map()) - continue //don't want this one! leave it for the garbage collector + for(var/datum/round_event_control/event_type as anything in typesof(/datum/round_event_control)) + if(!event_type::typepath || !event_type::name) + continue + var/datum/round_event_control/event = new event_type + if(!event.valid_for_map()) + qdel(event) + continue control += event //add it to the list of all events (controls) reschedule() // Instantiate our holidays list if it hasn't been already diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm index 17d812466eab..bee722b1ec9f 100644 --- a/code/controllers/subsystem/explosions.dm +++ b/code/controllers/subsystem/explosions.dm @@ -281,7 +281,7 @@ SUBSYSTEM_DEF(explosions) epicenter = get_turf(epicenter) var/area/checking = get_area(epicenter) - if((checking.area_flags & NO_EXPLOSIONS_DURING) && SSticker.current_state == GAME_STATE_PLAYING) + if(SEND_SIGNAL(checking, COMSIG_AREA_EXPLOSION_SHOCKWAVE) & COMSIG_CANCEL_EXPLOSION) return if(!epicenter) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 71303d6f0033..50d7ea4e1fdf 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -1,3 +1,5 @@ +#define VERY_LATE_ARRIVAL_TOAST_PROB 20 + SUBSYSTEM_DEF(job) name = "Jobs" init_order = INIT_ORDER_JOBS @@ -40,6 +42,8 @@ SUBSYSTEM_DEF(job) * Assumed Captain is always the highest in the chain of command. * See [/datum/controller/subsystem/ticker/proc/equip_characters] */ + // Monkestation Edit Start: QM IS NOT A HEAD! removed this line JOB_QUARTERMASTER = 7, + var/list/chain_of_command = list( JOB_CAPTAIN = 1, JOB_HEAD_OF_PERSONNEL = 2, @@ -47,8 +51,8 @@ SUBSYSTEM_DEF(job) JOB_CHIEF_ENGINEER = 4, JOB_CHIEF_MEDICAL_OFFICER = 5, JOB_HEAD_OF_SECURITY = 6, - JOB_QUARTERMASTER = 7, ) + // Monkestation Edit End /// If TRUE, some player has been assigned Captaincy or Acting Captaincy at some point during the shift and has been given the spare ID safe code. var/assigned_captain = FALSE @@ -599,6 +603,8 @@ SUBSYSTEM_DEF(job) wageslave.add_mob_memory(/datum/memory/key/account, remembered_id = wageslave.account_id) setup_alt_job_items(wageslave, job, player_client) + if(EMERGENCY_PAST_POINT_OF_NO_RETURN && prob(VERY_LATE_ARRIVAL_TOAST_PROB)) + equipping.equip_to_slot_or_del(new /obj/item/food/griddle_toast(equipping), ITEM_SLOT_MASK) job.after_spawn(equipping, player_client) @@ -1185,3 +1191,5 @@ SUBSYSTEM_DEF(job) if(!job) return FALSE job.current_positions = max(0, job.current_positions - 1) + +#undef VERY_LATE_ARRIVAL_TOAST_PROB diff --git a/code/controllers/subsystem/lua.dm b/code/controllers/subsystem/lua.dm index d8fb642c1c98..da37dad34f5e 100644 --- a/code/controllers/subsystem/lua.dm +++ b/code/controllers/subsystem/lua.dm @@ -16,9 +16,11 @@ SUBSYSTEM_DEF(lua) var/list/resumes = list() var/list/current_run = list() + var/list/current_states_run = list() /// Protects return values from getting GCed before getting converted to lua values - var/gc_guard + /// Gets cleared every tick. + var/list/gc_guard = list() /datum/controller/subsystem/lua/Initialize() if(!CONFIG_GET(flag/auxtools_enabled)) @@ -96,9 +98,11 @@ SUBSYSTEM_DEF(lua) // then resumes every yielded task in the order their resumes were queued if(!resumed) current_run = list("sleeps" = sleeps.Copy(), "resumes" = resumes.Copy()) + current_states_run = states.Copy() sleeps.Cut() resumes.Cut() + gc_guard.Cut() var/list/current_sleeps = current_run["sleeps"] var/list/affected_states = list() while(length(current_sleeps)) @@ -134,6 +138,13 @@ SUBSYSTEM_DEF(lua) if(MC_TICK_CHECK) break + while(length(current_states_run)) + var/datum/lua_state/state = current_states_run[current_states_run.len] + current_states_run.len-- + state.process(wait) + if(MC_TICK_CHECK) + break + // Update every lua editor TGUI open for each state that had a task awakened or resumed for(var/datum/lua_state/state in affected_states) INVOKE_ASYNC(state, TYPE_PROC_REF(/datum/lua_state, update_editors)) diff --git a/code/controllers/subsystem/movement/movement_types.dm b/code/controllers/subsystem/movement/movement_types.dm index b2a63a6033be..ddd7e88e68ed 100644 --- a/code/controllers/subsystem/movement/movement_types.dm +++ b/code/controllers/subsystem/movement/movement_types.dm @@ -101,6 +101,10 @@ controller.queue_loop(src) /datum/move_loop/process() + if(isnull(controller)) + qdel(src) + return + var/old_delay = delay //The signal can sometimes change delay if(SEND_SIGNAL(src, COMSIG_MOVELOOP_PREPROCESS_CHECK) & MOVELOOP_SKIP_STEP) //Chance for the object to react @@ -410,7 +414,7 @@ src.avoid = avoid src.skip_first = skip_first movement_path = initial_path?.Copy() - + /datum/move_loop/has_target/jps/compare_loops(datum/move_loop/loop_type, priority, flags, extra_info, delay, timeout, atom/chasing, repath_delay, max_path_length, minimum_distance, list/access, simulated_only, turf/avoid, skip_first, initial_path) if(..() && repath_delay == src.repath_delay && max_path_length == src.max_path_length && minimum_distance == src.minimum_distance && access ~= src.access && simulated_only == src.simulated_only && avoid == src.avoid) return TRUE @@ -460,7 +464,8 @@ // this check if we're on exactly the next tile may be overly brittle for dense objects who may get bumped slightly // to the side while moving but could maybe still follow their path without needing a whole new path if(get_turf(moving) == next_step) - movement_path.Cut(1,2) + if(length(movement_path)) + movement_path.Cut(1,2) else INVOKE_ASYNC(src, PROC_REF(recalculate_path)) return MOVELOOP_FAILURE diff --git a/code/controllers/subsystem/polling.dm b/code/controllers/subsystem/polling.dm new file mode 100644 index 000000000000..2bed96ac7d40 --- /dev/null +++ b/code/controllers/subsystem/polling.dm @@ -0,0 +1,279 @@ +SUBSYSTEM_DEF(polling) + name = "Polling" + flags = SS_BACKGROUND | SS_NO_INIT + wait = 1 SECONDS + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + /// List of polls currently ongoing, to be checked on next fire() + var/list/datum/candidate_poll/currently_polling + /// Number of polls performed since the start + var/total_polls = 0 + +/datum/controller/subsystem/polling/fire() + if(!currently_polling) // if polls_active is TRUE then this shouldn't happen, but still.. + currently_polling = list() + + for(var/datum/candidate_poll/running_poll as anything in currently_polling) + if(running_poll.time_left() <= 0) + polling_finished(running_poll) + +/** + * Starts a poll. + * + * Arguments + * * question: Optional, The question to ask the candidates. If null, a default question will be used. ("Do you want to play as role?") + * * role: Optional, An antag role (IE, ROLE_TRAITOR) to pass, it won't show to any candidates who don't have it in their preferences. + * * check_jobban: Optional, What jobban role / flag to check, it won't show to any candidates who have this jobban. + * * poll_time: How long the poll will last. + * * ignore_category: Optional, A poll category. If a candidate has this category in their ignore list, they won't be polled. + * * flash_window: If TRUE, the candidate's window will flash when they're polled. + * * list/group: A list of candidates to poll. + * * pic_source: Optional, An /atom or an /image to display on the poll alert. + * * role_name_text: Optional, A string to display in logging / the (default) question. If null, the role name will be used. + * * list/custom_response_messages: Optional, A list of strings to use as responses to the poll. If null, the default responses will be used. see __DEFINES/polls.dm for valid keys to use. + * * start_signed_up: If TRUE, all candidates will start signed up for the poll, making it opt-out rather than opt-in. + * + * Returns a list of all mobs who signed up for the poll. + */ +/datum/controller/subsystem/polling/proc/poll_candidates( + question, + role, + check_jobban, + poll_time = 30 SECONDS, + ignore_category = null, + flash_window = TRUE, + list/group = null, + pic_source, + role_name_text, + list/custom_response_messages, + start_signed_up = FALSE, +) + RETURN_TYPE(/list/mob) + if(group.len == 0) + return list() + if(role && !role_name_text) + role_name_text = role + if(role_name_text && !question) + question = "Do you want to play as [full_capitalize(role_name_text)]?" + if(!question) + question = "Do you want to play as a special role?" + log_game("Polling candidates [role_name_text ? "for [role_name_text]" : "\"[question]\""] for [DisplayTimeText(poll_time)] seconds") + + // Start firing + total_polls++ + + var/jumpable = isatom(pic_source) ? pic_source : null + + var/datum/candidate_poll/new_poll = new(role_name_text, question, poll_time, ignore_category, jumpable, custom_response_messages) + LAZYADD(currently_polling, new_poll) + + var/category = "[new_poll.poll_key]_poll_alert" + + for(var/mob/candidate_mob as anything in group) + if(!candidate_mob.client) + continue + // Universal opt-out for all players if it's for a role. + if(!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles)) + continue + // Opt-out for admins whom are currently adminned. + if(!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles_as_admin) && candidate_mob.client.holder) + continue + // Eligibility check (checks jobbans, prefs, and ignore categories) + if(!is_eligible(candidate_mob, role, check_jobban, ignore_category)) + continue + + if(start_signed_up) + new_poll.sign_up(candidate_mob, TRUE) + if(flash_window) + window_flash(candidate_mob.client) + + // If we somehow send two polls for the same mob type, but with a duration on the second one shorter than the time left on the first one, + // we need to keep the first one's timeout rather than use the shorter one + var/atom/movable/screen/alert/poll_alert/current_alert = LAZYACCESS(candidate_mob.alerts, category) + var/alert_time = poll_time + var/datum/candidate_poll/alert_poll = new_poll + if(current_alert && current_alert.timeout > (world.time + poll_time - world.tick_lag)) + alert_time = current_alert.timeout - world.time + world.tick_lag + alert_poll = current_alert.poll + + // Send them an on-screen alert + var/atom/movable/screen/alert/poll_alert/poll_alert_button = candidate_mob.throw_alert(category, /atom/movable/screen/alert/poll_alert, timeout_override = alert_time, no_anim = TRUE) + if(!poll_alert_button) + continue + + new_poll.alert_buttons += poll_alert_button + new_poll.RegisterSignal(poll_alert_button, COMSIG_QDELETING, TYPE_PROC_REF(/datum/candidate_poll, clear_alert_ref)) + + poll_alert_button.icon = ui_style2icon(candidate_mob.client?.prefs?.read_preference(/datum/preference/choiced/ui_style)) + poll_alert_button.desc = "[question]" + poll_alert_button.show_time_left = TRUE + poll_alert_button.poll = alert_poll + poll_alert_button.set_role_overlay() + poll_alert_button.update_stacks_overlay() + poll_alert_button.update_candidates_number_overlay() + poll_alert_button.update_signed_up_overlay() + + + // Sign up inheritance and stacking + for(var/datum/candidate_poll/other_poll as anything in currently_polling) + if(new_poll == other_poll || new_poll.poll_key != other_poll.poll_key) + continue + // 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((candidate_mob in other_poll.signed_up) && new_poll.sign_up(candidate_mob, TRUE)) + break + + // Image to display + var/image/poll_image + if(pic_source) + if(isatom(pic_source)) + var/atom/the_pic_source = pic_source + var/old_layer = the_pic_source.layer + var/old_plane = the_pic_source.plane + the_pic_source.plane = poll_alert_button.plane + the_pic_source.layer = FLOAT_LAYER + poll_alert_button.add_overlay(the_pic_source) + the_pic_source.layer = old_layer + the_pic_source.plane = old_plane + else if(ispath(pic_source, /datum/antagonist)) + var/datum/antagonist/antagonist = new pic_source + var/icon/preview_icon = antagonist.preview_outfit ? antagonist.render_preview_outfit(antagonist.preview_outfit) : null + qdel(antagonist) + poll_image = preview_icon ? image(preview_icon) : image('icons/effects/effects.dmi', icon_state = "static", layer = FLOAT_LAYER) + else + poll_image = image(pic_source, layer = FLOAT_LAYER) + else + // Just use a generic image + poll_image = image('icons/effects/effects.dmi', icon_state = "static", layer = FLOAT_LAYER) + + if(poll_image) + poll_image.plane = poll_alert_button.plane + poll_alert_button.add_overlay(poll_image) + + // Chat message + var/act_jump = "" + if(isatom(pic_source) && isobserver(candidate_mob)) + act_jump = "\[Teleport\]" + var/act_signup = "\[[start_signed_up ? "Opt out" : "Sign Up"]\]" + var/act_never = "" + if(ignore_category) + act_never = "\[Never For This Round\]" + + if(!duplicate_message_check(alert_poll)) //Only notify people once. They'll notice if there are multiple and we don't want to spam people. + SEND_SOUND(candidate_mob, 'sound/misc/notice2.ogg') + to_chat(candidate_mob, span_boldnotice(examine_block("Now looking for candidates [role_name_text ? "to play as \an [role_name_text]." : "\"[question]\""] [act_jump] [act_signup] [act_never]"))) + + // Start processing it so it updates visually the timer + START_PROCESSING(SSprocessing, poll_alert_button) + + // Sleep until the time is up + UNTIL(new_poll.finished) + return new_poll.signed_up + +/datum/controller/subsystem/polling/proc/poll_ghost_candidates(question, role, check_jobban, poll_time = 30 SECONDS, ignore_category = null, flashwindow = TRUE, pic_source, role_name_text) + var/list/candidates = list() + if(!(GLOB.ghost_role_flags & GHOSTROLE_STATION_SENTIENCE)) + return candidates + + for(var/mob/dead/observer/ghost_player in GLOB.player_list) + candidates += ghost_player + + return poll_candidates(question, role, check_jobban, poll_time, ignore_category, flashwindow, candidates, pic_source, role_name_text) + +/datum/controller/subsystem/polling/proc/poll_ghost_candidates_for_mob(question, role, check_jobban, poll_time = 30 SECONDS, mob/target_mob, ignore_category = null, flashwindow = TRUE, pic_source, role_name_text) + var/static/list/mob/currently_polling_mobs = list() + + if(currently_polling_mobs.Find(target_mob)) + return list() + + if(!pic_source && target_mob) + pic_source = target_mob + + currently_polling_mobs += target_mob + + var/list/possible_candidates = poll_ghost_candidates(question, role, check_jobban, poll_time, ignore_category, flashwindow, pic_source, role_name_text) + + currently_polling_mobs -= target_mob + if(!target_mob || QDELETED(target_mob) || !target_mob.loc) + return list() + + return possible_candidates + +/datum/controller/subsystem/polling/proc/poll_ghost_candidates_for_mobs(question, role, check_jobban, poll_time = 30 SECONDS, list/mobs, ignore_category = null, flashwindow = TRUE, pic_source, role_name_text) + var/list/candidate_list = poll_ghost_candidates(question, role, check_jobban, poll_time, ignore_category, flashwindow, pic_source, role_name_text) + + for(var/mob/potential_mob as anything in mobs) + if(QDELETED(potential_mob) || !potential_mob.loc) + mobs -= potential_mob + + if(!length(mobs)) + return list() + + return candidate_list + +/datum/controller/subsystem/polling/proc/is_eligible(mob/potential_candidate, role, check_jobban, the_ignore_category) + if(isnull(potential_candidate.key) || isnull(potential_candidate.client)) + return FALSE + if(the_ignore_category) + if(potential_candidate.ckey in GLOB.poll_ignore[the_ignore_category]) + return FALSE + if(role) + if(!(role in potential_candidate.client.prefs.be_special)) + return FALSE + var/required_time = GLOB.special_roles[role] || 0 + if(potential_candidate.client && potential_candidate.client.get_remaining_days(required_time) > 0) + return FALSE + + if(isnull(check_jobban) || !isnull(role)) + check_jobban = role + if(check_jobban) + if(is_banned_from(potential_candidate.ckey, list(check_jobban, ROLE_SYNDICATE))) + return FALSE + + return TRUE + +/datum/controller/subsystem/polling/proc/polling_finished(datum/candidate_poll/finishing_poll) + currently_polling -= finishing_poll + // Trim players who aren't eligible anymore + var/length_pre_trim = length(finishing_poll.signed_up) + finishing_poll.trim_candidates() + log_game("Candidate poll [finishing_poll.role ? "for [finishing_poll.role]" : "\"[finishing_poll.question]\""] finished. [length_pre_trim] players signed up, [length(finishing_poll.signed_up)] after trimming") + finishing_poll.finished = TRUE + + // Take care of updating the remaining screen alerts if a similar poll is found, or deleting them. + if(length(finishing_poll.alert_buttons)) + for(var/atom/movable/screen/alert/poll_alert/alert as anything in finishing_poll.alert_buttons) + if(duplicate_message_check(finishing_poll)) + alert.update_stacks_overlay() + else + alert.owner.clear_alert("[finishing_poll.poll_key]_poll_alert") + + //More than enough time for the the `UNTIL()` stopping loop in `poll_candidates()` to be over, and the results to be turned in. + QDEL_IN(finishing_poll, 0.5 SECONDS) + +/datum/controller/subsystem/polling/stat_entry(msg) + msg += "Active: [length(currently_polling)] | Total: [total_polls]" + var/datum/candidate_poll/soonest_to_complete = get_next_poll_to_finish() + if(soonest_to_complete) + msg += " | Next: [DisplayTimeText(soonest_to_complete.time_left())] ([length(soonest_to_complete.signed_up)] candidates)" + return ..() + +///Is there a multiple of the given event type running right now? +/datum/controller/subsystem/polling/proc/duplicate_message_check(datum/candidate_poll/poll_to_check) + for(var/datum/candidate_poll/running_poll as anything in currently_polling) + if((running_poll.poll_key == poll_to_check.poll_key && running_poll != poll_to_check) && running_poll.time_left() > 0) + return TRUE + return FALSE + +/datum/controller/subsystem/polling/proc/get_next_poll_to_finish() + var/lowest_time_left = INFINITY + var/next_poll_to_finish + for(var/datum/candidate_poll/poll as anything in currently_polling) + var/time_left = poll.time_left() + if(time_left >= lowest_time_left) + continue + lowest_time_left = time_left + next_poll_to_finish = poll + + if(isnull(next_poll_to_finish)) + return FALSE + + return next_poll_to_finish diff --git a/code/controllers/subsystem/radiation.dm b/code/controllers/subsystem/radiation.dm index b2b3d1926dd4..d52fe83856a4 100644 --- a/code/controllers/subsystem/radiation.dm +++ b/code/controllers/subsystem/radiation.dm @@ -135,7 +135,7 @@ SUBSYSTEM_DEF(radiation) for (var/obj/item/bodypart/limb as anything in human.bodyparts) var/protected = FALSE - for (var/obj/item/clothing as anything in human.clothingonpart(limb)) + for (var/obj/item/clothing as anything in human.get_clothing_on_part(limb)) if (HAS_TRAIT(clothing, TRAIT_RADIATION_PROTECTED_CLOTHING)) protected = TRUE break diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index 735dd1cdc57d..ada6b75ea359 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -64,11 +64,25 @@ SUBSYSTEM_DEF(research) /obj/item/assembly/signaler/anomaly/dimensional = MAX_CORES_DIMENSIONAL, ) + ///our total xenobiology points + var/xenobio_points /// Lookup list for ordnance briefers. var/list/ordnance_experiments = list() /// Lookup list for scipaper partners. var/list/scientific_partners = list() + var/list/slime_core_prices = list() + + var/static/list/default_core_prices = list( + SLIME_VALUE_TIER_1, + SLIME_VALUE_TIER_2, + SLIME_VALUE_TIER_3, + SLIME_VALUE_TIER_4, + SLIME_VALUE_TIER_5, + SLIME_VALUE_TIER_6, + SLIME_VALUE_TIER_7, + ) + /datum/controller/subsystem/research/Initialize() point_types = TECHWEB_POINT_TYPE_LIST_ASSOCIATIVE_NAMES initialize_all_techweb_designs() @@ -79,6 +93,7 @@ SUBSYSTEM_DEF(research) autosort_categories() error_design = new error_node = new + initialize_slime_prices() return SS_INIT_SUCCESS /datum/controller/subsystem/research/fire() @@ -100,6 +115,19 @@ SUBSYSTEM_DEF(research) techweb_list.last_income = world.time + for(var/core_type in slime_core_prices) + var/obj/item/slime_extract/core = core_type + var/price_mod = rand(SLIME_RANDOM_MODIFIER_MIN * 1000000, SLIME_RANDOM_MODIFIER_MAX * 1000000) / 1000000 + var/price_limiter = 1 - ((default_core_prices[initial(core.tier)] * SLIME_SELL_MINIMUM_MODIFIER) / slime_core_prices[core_type]) + slime_core_prices[core_type] = (1 + price_mod * price_limiter) * slime_core_prices[core_type] + +/datum/controller/subsystem/research/proc/initialize_slime_prices() + for(var/core_type in subtypesof(/obj/item/slime_extract)) + var/obj/item/slime_extract/core = core_type + if(!initial(core.tier)) + continue + slime_core_prices[core_type] = default_core_prices[initial(core.tier)] + /datum/controller/subsystem/research/proc/autosort_categories() for(var/i in techweb_nodes) var/datum/techweb_node/I = techweb_nodes[i] diff --git a/code/controllers/subsystem/security_level.dm b/code/controllers/subsystem/security_level.dm index 6f5fdfe08a7d..ac94817a84e1 100644 --- a/code/controllers/subsystem/security_level.dm +++ b/code/controllers/subsystem/security_level.dm @@ -28,8 +28,9 @@ SUBSYSTEM_DEF(security_level) * * Arguments: * * new_level - The new security level that will become our current level + * * announce - Play the announcement, set FALSE if you're doing your own custom announcement to prevent duplicates */ -/datum/controller/subsystem/security_level/proc/set_level(new_level) +/datum/controller/subsystem/security_level/proc/set_level(new_level, announce = TRUE) new_level = istext(new_level) ? new_level : number_level_to_text(new_level) if(new_level == current_security_level.name) // If we are already at the desired level, do nothing return @@ -39,7 +40,11 @@ SUBSYSTEM_DEF(security_level) if(!selected_level) CRASH("set_level was called with an invalid security level([new_level])") - level_announce(selected_level, current_security_level.number_level) // We want to announce BEFORE updating to the new level + if(SSnightshift.can_fire && (selected_level.number_level >= SEC_LEVEL_RED || current_security_level.number_level >= SEC_LEVEL_RED)) + SSnightshift.next_fire = world.time + 7 SECONDS // Fire nightshift after the security level announcement is complete + + if(announce) + level_announce(selected_level, current_security_level.number_level) // We want to announce BEFORE updating to the new level var/old_shuttle_call_time_mod = current_security_level.shuttle_call_time_mod // Need this before we set the new one @@ -57,7 +62,6 @@ SUBSYSTEM_DEF(security_level) SSshuttle.emergency.modTimer(selected_level.shuttle_call_time_mod) SEND_SIGNAL(src, COMSIG_SECURITY_LEVEL_CHANGED, selected_level.number_level) - SSnightshift.check_nightshift() SSblackbox.record_feedback("tally", "security_level_changes", 1, selected_level.name) /** diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 9bd56294c698..cff5035b202a 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -377,8 +377,9 @@ SUBSYSTEM_DEF(timer) var/list/flags /// Time at which the timer was invoked or destroyed var/spent = 0 - /// An informative name generated for the timer as its representation in strings, useful for debugging - var/name + /// Holds info about this timer, stored from the moment it was created + /// Used to create a visible "name" whenever the timer is stringified + var/list/timer_info /// Next timed event in the bucket var/datum/timedevent/next /// Previous timed event in the bucket @@ -494,6 +495,21 @@ SUBSYSTEM_DEF(timer) bucket_pos = -1 bucket_joined = FALSE +/datum/timedevent/proc/operator""() + if(!length(timer_info)) + return "Event not filled" + var/static/list/bitfield_flags = list("TIMER_UNIQUE", "TIMER_OVERRIDE", "TIMER_CLIENT_TIME", "TIMER_STOPPABLE", "TIMER_NO_HASH_WAIT", "TIMER_LOOP") +#if defined(TIMER_DEBUG) + var/list/callback_args = timer_info[10] + return "Timer: [timer_info[1]] ([text_ref(src)]), TTR: [timer_info[2]], wait:[timer_info[3]] Flags: [jointext(bitfield_to_list(timer_info[4], bitfield_flags), ", ")], \ + callBack: [text_ref(timer_info[5])], callBack.object: [timer_info[6]][timer_info[7]]([timer_info[8]]), \ + callBack.delegate:[timer_info[9]]([callback_args ? callback_args.Join(", ") : ""]), source: [timer_info[11]]" +#else + return "Timer: [timer_info[1]] ([text_ref(src)]), TTR: [timer_info[2]], wait:[timer_info[3]] Flags: [jointext(bitfield_to_list(timer_info[4], bitfield_flags), ", ")], \ + callBack: [text_ref(timer_info[5])], callBack.object: [timer_info[6]]([timer_info[7]]), \ + callBack.delegate:[timer_info[8]], source: [timer_info[9]]" +#endif + /** * Attempts to add this timed event to a bucket, will enter the secondary queue * if there are no appropriate buckets at this time. @@ -504,20 +520,37 @@ SUBSYSTEM_DEF(timer) */ /datum/timedevent/proc/bucketJoin() #if defined(TIMER_DEBUG) - // Generate debug-friendly name for timer, more complex but also more expensive - var/static/list/bitfield_flags = list("TIMER_UNIQUE", "TIMER_OVERRIDE", "TIMER_CLIENT_TIME", "TIMER_STOPPABLE", "TIMER_NO_HASH_WAIT", "TIMER_LOOP") - name = "Timer: [id] ([text_ref(src)]), TTR: [timeToRun], wait:[wait] Flags: [jointext(bitfield_to_list(flags, bitfield_flags), ", ")], \ - callBack: [text_ref(callBack)], callBack.object: [callBack.object][text_ref(callBack.object)]([getcallingtype()]), \ - callBack.delegate:[callBack.delegate]([callBack.arguments ? callBack.arguments.Join(", ") : ""]), source: [source]" + // Generate debug-friendly list for timer, more complex but also more expensive + timer_info = list( + 1 = id, + 2 = timeToRun, + 3 = wait, + 4 = flags, + 5 = callBack, /* Safe to hold this directly becasue it's never del'd */ + 6 = "[callBack.object]", + 7 = text_ref(callBack.object), + 8 = getcallingtype(), + 9 = callBack.delegate, + 10 = callBack.arguments ? callBack.arguments.Copy() : null, + 11 = "[source]" + ) #else - // Generate a debuggable name for the timer, simpler but wayyyy cheaper, string generation is a bitch and this saves a LOT of time - name = "Timer: [id] ([text_ref(src)]), TTR: [timeToRun], wait:[wait] Flags: [flags], \ - callBack: [text_ref(callBack)], callBack.object: [callBack.object]([getcallingtype()]), \ - callBack.delegate:[callBack.delegate], source: [source]" + // Generate a debuggable list for the timer, simpler but wayyyy cheaper, string generation (and ref/copy memes) is a bitch and this saves a LOT of time + timer_info = list( + 1 = id, + 2 = timeToRun, + 3 = wait, + 4 = flags, + 5 = callBack, /* Safe to hold this directly becasue it's never del'd */ + 6 = "[callBack.object]", + 7 = getcallingtype(), + 8 = callBack.delegate, + 9 = "[source]" + ) #endif if (bucket_joined) - stack_trace("Bucket already joined! [name]") + stack_trace("Bucket already joined! [src]") // Check if this timed event should be diverted to the client time bucket, or the secondary queue var/list/L @@ -537,7 +570,7 @@ SUBSYSTEM_DEF(timer) if (bucket_pos < timer_subsystem.practical_offset && timeToRun < (timer_subsystem.head_offset + TICKS2DS(BUCKET_LEN))) WARNING("Bucket pos in past: bucket_pos = [bucket_pos] < practical_offset = [timer_subsystem.practical_offset] \ - && timeToRun = [timeToRun] < [timer_subsystem.head_offset + TICKS2DS(BUCKET_LEN)], Timer: [name]") + && timeToRun = [timeToRun] < [timer_subsystem.head_offset + TICKS2DS(BUCKET_LEN)], Timer: [src]") bucket_pos = timer_subsystem.practical_offset // Recover bucket_pos to avoid timer blocking queue var/datum/timedevent/bucket_head = bucket_list[bucket_pos] diff --git a/code/controllers/subsystem/traitor.dm b/code/controllers/subsystem/traitor.dm index 5ec21322e24e..6ad6fca08939 100644 --- a/code/controllers/subsystem/traitor.dm +++ b/code/controllers/subsystem/traitor.dm @@ -44,6 +44,9 @@ SUBSYSTEM_DEF(traitor) category_handler = new() traitor_debug_panel = new(category_handler) + for(var/theft_item in subtypesof(/datum/objective_item/steal)) + new theft_item + if(fexists(configuration_path)) var/list/data = json_decode(file2text(file(configuration_path))) for(var/typepath in data) diff --git a/code/datums/actions/cooldown_action.dm b/code/datums/actions/cooldown_action.dm index d4d02901dda2..ed4309c36e1c 100644 --- a/code/datums/actions/cooldown_action.dm +++ b/code/datums/actions/cooldown_action.dm @@ -66,10 +66,10 @@ /datum/action/cooldown/create_button() var/atom/movable/screen/movable/action_button/button = ..() button.maptext = "" - button.maptext_x = 6 + button.maptext_x = 4 button.maptext_y = 2 - button.maptext_width = 24 - button.maptext_height = 12 + button.maptext_width = 32 + button.maptext_height = 16 return button /datum/action/cooldown/update_button_status(atom/movable/screen/movable/action_button/button, force = FALSE) @@ -79,9 +79,9 @@ button.maptext = "" else if (cooldown_rounding > 0) - button.maptext = MAPTEXT("[round(time_left/10, cooldown_rounding)]") + button.maptext = MAPTEXT_TINY_UNICODE("[round(time_left/10, cooldown_rounding)]") else - button.maptext = MAPTEXT("[round(time_left/10)]") + button.maptext = MAPTEXT_TINY_UNICODE("[round(time_left/10)]") if(!IsAvailable() || !is_action_active(button)) return diff --git a/code/datums/actions/items/toggles.dm b/code/datums/actions/items/toggles.dm index d40b187b3bb4..7d2507b5917b 100644 --- a/code/datums/actions/items/toggles.dm +++ b/code/datums/actions/items/toggles.dm @@ -80,6 +80,17 @@ return FALSE return ..() +/datum/action/item_action/toggle_hud + name = "Toggle Implant HUD" + desc = "Disables your HUD implant's visuals. You can still access examine information." + +/datum/action/item_action/toggle_hud/Trigger(trigger_flags) + . = ..() + if(!.) + return + var/obj/item/organ/internal/cyberimp/eyes/hud/hud_implant = target + hud_implant.toggle_hud(owner) + /datum/action/item_action/wheelys name = "Toggle Wheels" desc = "Pops out or in your shoes' wheels." diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm index 0a63e31edc9c..b1b44d50ec78 100644 --- a/code/datums/ai/_ai_controller.dm +++ b/code/datums/ai/_ai_controller.dm @@ -34,7 +34,7 @@ multiple modular subtrees with behaviors ///Stored arguments for behaviors given during their initial creation var/list/behavior_args = list() ///Tracks recent pathing attempts, if we fail too many in a row we fail our current plans. - var/pathing_attempts + var/consecutive_pathing_attempts ///Can the AI remain in control if there is a client? var/continue_processing_when_client = FALSE ///distance to give up on target diff --git a/code/datums/ai/babies/babies_behaviors.dm b/code/datums/ai/babies/babies_behaviors.dm index 4b56d0706956..e58d99a3ed63 100644 --- a/code/datums/ai/babies/babies_behaviors.dm +++ b/code/datums/ai/babies/babies_behaviors.dm @@ -65,7 +65,8 @@ finish_action(controller, FALSE, target_key) return var/mob/living/basic/living_pawn = controller.pawn - living_pawn.set_combat_mode(FALSE) + //living_pawn.set_combat_mode(FALSE) + living_pawn.istate &= ~ISTATE_HARM living_pawn.melee_attack(target) finish_action(controller, TRUE, target_key) diff --git a/code/datums/ai/babies/babies_subtrees.dm b/code/datums/ai/babies/babies_subtrees.dm index 8310cd955733..1b7fe5b88cb5 100644 --- a/code/datums/ai/babies/babies_subtrees.dm +++ b/code/datums/ai/babies/babies_subtrees.dm @@ -2,8 +2,11 @@ * Reproduce with a similar mob. */ /datum/ai_planning_subtree/make_babies - var/chance = 5 operational_datums = list(/datum/component/breed) + ///chance to make babies + var/chance = 5 + ///make babies behavior we will use + var/datum/ai_behavior/reproduce_behavior = /datum/ai_behavior/make_babies /datum/ai_planning_subtree/make_babies/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() @@ -12,7 +15,7 @@ return if(controller.blackboard_key_exists(BB_BABIES_TARGET)) - controller.queue_behavior(/datum/ai_behavior/make_babies, BB_BABIES_TARGET, BB_BABIES_CHILD_TYPES) + controller.queue_behavior(reproduce_behavior, BB_BABIES_TARGET, BB_BABIES_CHILD_TYPES) return SUBTREE_RETURN_FINISH_PLANNING if(controller.pawn.gender == FEMALE || !controller.blackboard[BB_BREED_READY]) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm index 15ddc7b264d7..3ab6343e4d49 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm @@ -3,6 +3,7 @@ behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION ///do we finish this action after hitting once? var/terminate_after_action = FALSE + var/melee_attacks = TRUE /datum/ai_behavior/basic_melee_attack/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) . = ..() @@ -36,10 +37,11 @@ controller.set_blackboard_key(hiding_location_key, hiding_target) - if(hiding_target) //Slap it! - basic_mob.melee_attack(hiding_target) - else - basic_mob.melee_attack(target) + if(melee_attacks) + if(hiding_target) //Slap it! + basic_mob.melee_attack(hiding_target) + else + basic_mob.melee_attack(target) if(terminate_after_action) finish_action(controller, TRUE, target_key) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm index 2e922d62f09a..23b3a69c4d38 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm @@ -20,6 +20,7 @@ /datum/ai_behavior/run_away_from_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, hiding_location_key) . = ..() if (controller.blackboard[BB_BASIC_MOB_STOP_FLEEING]) + finish_action(controller, succeeded = FALSE, target_key = target_key, hiding_location_key = hiding_location_key) return var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] if (QDELETED(target) || !can_see(controller.pawn, target, run_distance)) diff --git a/code/datums/ai/hunting_behavior/hunting_mouse.dm b/code/datums/ai/hunting_behavior/hunting_mouse.dm index d4160f826dd6..d0e7161fd2de 100644 --- a/code/datums/ai/hunting_behavior/hunting_mouse.dm +++ b/code/datums/ai/hunting_behavior/hunting_mouse.dm @@ -11,7 +11,7 @@ finding_behavior = /datum/ai_behavior/find_hunt_target/mouse_cable hunt_targets = list(/obj/structure/cable) hunt_range = 0 // Only look below us - hunt_chance = 5 + hunt_chance = 1 // When looking for a cable, we can only bite things we can reach. /datum/ai_behavior/find_hunt_target/mouse_cable diff --git a/code/datums/ai/movement/_ai_movement.dm b/code/datums/ai/movement/_ai_movement.dm index 2b734ca24a92..0be133279f7e 100644 --- a/code/datums/ai/movement/_ai_movement.dm +++ b/code/datums/ai/movement/_ai_movement.dm @@ -8,22 +8,25 @@ //Override this to setup the moveloop you want to use /datum/ai_movement/proc/start_moving_towards(datum/ai_controller/controller, atom/current_movement_target, min_distance) SHOULD_CALL_PARENT(TRUE) - controller.pathing_attempts = 0 + controller.consecutive_pathing_attempts = 0 controller.set_blackboard_key(BB_CURRENT_MIN_MOVE_DISTANCE, min_distance) moving_controllers[controller] = current_movement_target /datum/ai_movement/proc/stop_moving_towards(datum/ai_controller/controller) - controller.pathing_attempts = 0 + controller.consecutive_pathing_attempts = 0 moving_controllers -= controller // We got deleted as we finished an action if(!QDELETED(controller.pawn)) SSmove_manager.stop_looping(controller.pawn, SSai_movement) /datum/ai_movement/proc/increment_pathing_failures(datum/ai_controller/controller) - controller.pathing_attempts++ - if(controller.pathing_attempts >= max_pathing_attempts) + controller.consecutive_pathing_attempts++ + if(controller.consecutive_pathing_attempts >= max_pathing_attempts) controller.CancelActions() +/datum/ai_movement/proc/reset_pathing_failures(datum/ai_controller/controller) + controller.consecutive_pathing_attempts = 0 + ///Should the movement be allowed to happen? As of writing this, MOVELOOP_SKIP_STEP is defined as (1<<0) so be careful on using (return TRUE) or (can_move = TRUE; return can_move) /datum/ai_movement/proc/allowed_to_move(datum/move_loop/source) var/atom/movable/pawn = source.moving @@ -58,7 +61,8 @@ //Anything to do post movement /datum/ai_movement/proc/post_move(datum/move_loop/source, succeeded) SIGNAL_HANDLER - if(succeeded != FALSE) - return var/datum/ai_controller/controller = source.extra_info + if(succeeded != MOVELOOP_FAILURE) + reset_pathing_failures(controller) + return increment_pathing_failures(controller) diff --git a/code/datums/alarm.dm b/code/datums/alarm.dm index b266362f3ca9..18e2a18d38dc 100644 --- a/code/datums/alarm.dm +++ b/code/datums/alarm.dm @@ -200,5 +200,7 @@ var/list/alarms_of_type = alarms_cache[alarm_type] //Sonic cache speed forads for(var/area_name as anything in alarms_of_type) var/list/alarm_packet = alarms_of_type[area_name] + if(length(alarm_packet) < 2) + continue var/list/cameras = alarm_packet[2] cameras -= source // REF FOUND AND CLEARED BOYSSSS diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index 7b8b1d375909..0c7a5ae1728d 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -47,7 +47,14 @@ /datum/brain_trauma/special/imaginary_friend/proc/get_ghost() set waitfor = FALSE - var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as [owner.real_name]'s imaginary friend?", ROLE_PAI, null, 7.5 SECONDS, friend, POLL_IGNORE_IMAGINARYFRIEND) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + question = "Do you want to play as [owner.real_name]'s imaginary friend?", + check_jobban = ROLE_PAI, + poll_time = 10 SECONDS, + ignore_category = POLL_IGNORE_IMAGINARYFRIEND, + pic_source = owner, + role_name_text = "imaginary friend" + ) if(LAZYLEN(candidates)) var/mob/dead/observer/C = pick(candidates) friend.key = C.key diff --git a/code/datums/brain_damage/mild.dm b/code/datums/brain_damage/mild.dm index 65d97b11191f..83f319f64f23 100644 --- a/code/datums/brain_damage/mild.dm +++ b/code/datums/brain_damage/mild.dm @@ -265,3 +265,18 @@ speak_dejavu += speech_args[SPEECH_MESSAGE] else speak_dejavu += speech_args[SPEECH_MESSAGE] + +/datum/brain_trauma/mild/color_blindness + name = "Achromatopsia" + desc = "Patient's occipital lobe is unable to recognize and interpret color, rendering the patient completely colorblind." + scan_desc = "colorblindness" + gain_text = span_warning("The world around you seems to lose its color.") + lose_text = span_notice("The world feels bright and colorful again.") + +/datum/brain_trauma/mild/color_blindness/on_gain() + owner.add_client_colour(/datum/client_colour/monochrome/colorblind) + return ..() + +/datum/brain_trauma/mild/color_blindness/on_lose(silent) + owner.remove_client_colour(/datum/client_colour/monochrome/colorblind) + return ..() diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm index 4c7b6a46100e..882f5ead2140 100644 --- a/code/datums/brain_damage/split_personality.dm +++ b/code/datums/brain_damage/split_personality.dm @@ -33,7 +33,14 @@ /datum/brain_trauma/severe/split_personality/proc/get_ghost() set waitfor = FALSE - var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as [owner.real_name]'s split personality?", ROLE_PAI, null, 7.5 SECONDS, stranger_backseat, POLL_IGNORE_SPLITPERSONALITY) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + question = "Do you want to play as [owner.real_name]'s split personality?", + check_jobban = ROLE_PAI, + poll_time = 7.5 SECONDS, + ignore_category = POLL_IGNORE_SPLITPERSONALITY, + pic_source = owner, + role_name_text = "split personality" + ) if(LAZYLEN(candidates)) var/mob/dead/observer/C = pick(candidates) stranger_backseat.key = C.key @@ -200,7 +207,7 @@ /datum/brain_trauma/severe/split_personality/brainwashing/get_ghost() set waitfor = FALSE - var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as [owner.real_name]'s brainwashed mind?", null, null, 7.5 SECONDS, stranger_backseat) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as [owner.real_name]'s brainwashed mind?", poll_time = 7.5 SECONDS, target_mob = stranger_backseat, pic_source = owner, role_name_text = "brainwashed mind") if(LAZYLEN(candidates)) var/mob/dead/observer/C = pick(candidates) stranger_backseat.key = C.key diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 962bfb7c887b..0a378cd83dda 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -397,7 +397,7 @@ if ("number") settings["mainsettings"][setting]["value"] = input(user, "Enter new value for [settings["mainsettings"][setting]["desc"]]", "Enter new value for [settings["mainsettings"][setting]["desc"]]") as num if ("color") - settings["mainsettings"][setting]["value"] = input(user, "Enter new value for [settings["mainsettings"][setting]["desc"]]", "Enter new value for [settings["mainsettings"][setting]["desc"]]", settings["mainsettings"][setting]["value"]) as color + settings["mainsettings"][setting]["value"] = tgui_color_picker(user, "Enter new value for [settings["mainsettings"][setting]["desc"]]", "Enter new value for [settings["mainsettings"][setting]["desc"]]", settings["mainsettings"][setting]["value"]) if ("boolean") settings["mainsettings"][setting]["value"] = (settings["mainsettings"][setting]["value"] == "Yes") ? "No" : "Yes" if ("ckey") diff --git a/code/datums/candidate_poll.dm b/code/datums/candidate_poll.dm new file mode 100644 index 000000000000..620aa2bfb14f --- /dev/null +++ b/code/datums/candidate_poll.dm @@ -0,0 +1,130 @@ +/// The datum that describes one instance of candidate polling +/datum/candidate_poll + /// The role the poll is for + var/role + /// The question asked to potential candidates + var/question + /// The duration of the poll + var/duration + /// the atom observers can jump/teleport to + var/atom/jump_to_me + /// Never For This Round category + var/ignoring_category + /// The players who signed up to this poll + var/list/mob/signed_up + /// the linked alert buttons + var/list/atom/movable/screen/alert/poll_alert/alert_buttons = list() + /// The world.time at which the poll was created + var/time_started + /// Whether the polling is finished + var/finished = FALSE + /// Used to categorize in the alerts system and identify polls of same question+role so we can stack the alert buttons + var/poll_key + ///Response messages sent in specific key areas for full customization of polling. + var/list/response_messages = list( + POLL_RESPONSE_SIGNUP = "You have signed up for %ROLE%! A candidate will be picked randomly soon.", + POLL_RESPONSE_ALREADY_SIGNED = "You have already signed up for this!", + POLL_RESPONSE_NOT_SIGNED = "You aren't signed up for this!", + POLL_RESPONSE_TOO_LATE_TO_UNREGISTER = "It's too late to unregister yourself, selection has already begun!", + POLL_RESPONSE_UNREGISTERED = "You have been unregistered as a candidate for %ROLE%. You can sign up again before the poll ends.", + ) + +/datum/candidate_poll/New( + polled_role, + polled_question, + poll_duration, + poll_ignoring_category, + poll_jumpable, + list/custom_response_messages = list(), +) + role = polled_role + question = polled_question + duration = poll_duration + ignoring_category = poll_ignoring_category + jump_to_me = poll_jumpable + signed_up = list() + time_started = world.time + poll_key = "[question]_[role ? role : "0"]" + if(custom_response_messages.len) + response_messages = custom_response_messages + for(var/individual_message in response_messages) + response_messages[individual_message] = replacetext(response_messages[individual_message], "%ROLE%", role) + return ..() + +/datum/candidate_poll/Destroy() + if(src in SSpolling.currently_polling) + SSpolling.polling_finished(src) + return QDEL_HINT_IWILLGC // the above proc will call QDEL_IN(src, 0.5 SECONDS) + jump_to_me = null + signed_up = null + return ..() + +/datum/candidate_poll/proc/clear_alert_ref(atom/movable/screen/alert/poll_alert/source) + SIGNAL_HANDLER + alert_buttons -= source + +/datum/candidate_poll/proc/sign_up(mob/candidate, silent = FALSE) + if(!istype(candidate) || isnull(candidate.key) || isnull(candidate.client)) + return FALSE + if(candidate in signed_up) + if(!silent) + to_chat(candidate, span_warning(response_messages[POLL_RESPONSE_ALREADY_SIGNED])) + return FALSE + if(time_left() <= 0) + if(!silent) + to_chat(candidate, span_danger("Sorry, you were too late for the consideration!")) + SEND_SOUND(candidate, 'sound/machines/buzz-sigh.ogg') + return FALSE + + signed_up += candidate + if(!silent) + to_chat(candidate, span_notice(response_messages[POLL_RESPONSE_SIGNUP])) + // Sign them up for any other polls with the same mob type + for(var/datum/candidate_poll/existing_poll as anything in SSpolling.currently_polling) + if(src != existing_poll && poll_key == existing_poll.poll_key && !(candidate in existing_poll.signed_up)) + existing_poll.sign_up(candidate, TRUE) + for(var/atom/movable/screen/alert/poll_alert/linked_button as anything in alert_buttons) + linked_button.update_candidates_number_overlay() + return TRUE + +/datum/candidate_poll/proc/remove_candidate(mob/candidate, silent = FALSE) + if(!istype(candidate) || isnull(candidate.key) || isnull(candidate.client)) + return FALSE + if(!(candidate in signed_up)) + if(!silent) + to_chat(candidate, span_warning(response_messages[POLL_RESPONSE_NOT_SIGNED])) + return FALSE + + if(time_left() <= 0) + if(!silent) + to_chat(candidate, span_danger(response_messages[POLL_RESPONSE_TOO_LATE_TO_UNREGISTER])) + return FALSE + + signed_up -= candidate + if(!silent) + to_chat(candidate, span_danger(response_messages[POLL_RESPONSE_UNREGISTERED])) + + for(var/datum/candidate_poll/existing_poll as anything in SSpolling.currently_polling) + if(src != existing_poll && poll_key == existing_poll.poll_key && (candidate in existing_poll.signed_up)) + existing_poll.remove_candidate(candidate, TRUE) + for(var/atom/movable/screen/alert/poll_alert/linked_button as anything in alert_buttons) + linked_button.update_candidates_number_overlay() + return TRUE + +/datum/candidate_poll/proc/do_never_for_this_round(mob/candidate) + LAZYADDASSOC(GLOB.poll_ignore, ignoring_category, candidate.ckey) + to_chat(candidate, span_danger("Choice registered: Never for this round.")) + remove_candidate(candidate, silent = TRUE) + +/datum/candidate_poll/proc/undo_never_for_this_round(mob/candidate) + LAZYREMOVEASSOC(GLOB.poll_ignore, ignoring_category, candidate.ckey) + to_chat(candidate, span_notice("Choice registered: Eligible for this round")) + +/datum/candidate_poll/proc/trim_candidates() + list_clear_nulls(signed_up) + for(var/mob/candidate as anything in signed_up) + if(isnull(candidate.key) || isnull(candidate.client)) + signed_up -= candidate + +/datum/candidate_poll/proc/time_left() + return duration - (world.time - time_started) diff --git a/code/datums/chatmessage.dm b/code/datums/chatmessage.dm index 361915e5941d..7c5c8a6df5b1 100644 --- a/code/datums/chatmessage.dm +++ b/code/datums/chatmessage.dm @@ -13,7 +13,7 @@ /// Approximate height in pixels of an 'average' line, used for height decay #define CHAT_MESSAGE_APPROX_LHEIGHT 11 /// Max width of chat message in pixels -#define CHAT_MESSAGE_WIDTH 96 +#define CHAT_MESSAGE_WIDTH 112 /// The dimensions of the chat message icons #define CHAT_MESSAGE_ICON_SIZE 9 @@ -145,6 +145,10 @@ if (!ismob(target)) extra_classes |= "small" + // Why are you yelling? + if(copytext_char(text, -2) == "!!") + extra_classes |= SPAN_YELL + var/list/prefixes // Append radio icon if from a virtual speaker @@ -171,7 +175,7 @@ var/tgt_color = extra_classes.Find("italics") ? target.chat_color_darkened : target.chat_color // Approximate text height - var/complete_text = "[owner.say_emphasis(text)]" + var/complete_text = "[owner.say_emphasis(text)]" var/mheight WXH_TO_HEIGHT(owned_by.MeasureText(complete_text, null, CHAT_MESSAGE_WIDTH), mheight) @@ -235,7 +239,7 @@ message.pixel_y = target.maptext_height message.pixel_x = -target.base_pixel_x message.maptext_width = CHAT_MESSAGE_WIDTH - message.maptext_height = mheight + message.maptext_height = mheight * 1.25 // We add extra because some characters are superscript, like actions message.maptext_x = (CHAT_MESSAGE_WIDTH - owner.bound_width) * -0.5 message.maptext = MAPTEXT(complete_text) diff --git a/code/datums/components/acid.dm b/code/datums/components/acid.dm index 89430ff368e2..881c46eeeca4 100644 --- a/code/datums/components/acid.dm +++ b/code/datums/components/acid.dm @@ -68,8 +68,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e STOP_PROCESSING(SSacid, src) if(sizzle) QDEL_NULL(sizzle) - if(process_effect) - QDEL_NULL(process_effect) + process_effect = null return ..() /datum/component/acid/RegisterWithParent() diff --git a/code/datums/components/admin_popup.dm b/code/datums/components/admin_popup.dm index 6edd839942d5..1c821808a40d 100644 --- a/code/datums/components/admin_popup.dm +++ b/code/datums/components/admin_popup.dm @@ -104,9 +104,9 @@ last_color_index = (last_color_index % colors.len) + 1 - var/message = "" - message += "HEY! An admin is trying to talk to you!
Check your chat window, and click their name to respond!" - message += "
" + var/message = "" + message += "HEY!
An admin is trying to talk to you!
Check your chat window,
and click their name to respond!" + message += "
" maptext = MAPTEXT(message) last_update_time = world.time diff --git a/code/datums/components/bloodysoles.dm b/code/datums/components/bloodysoles.dm index e2f8a7d064fe..9fab9bf8d4b5 100644 --- a/code/datums/components/bloodysoles.dm +++ b/code/datums/components/bloodysoles.dm @@ -21,6 +21,8 @@ /// The world.time when we last picked up blood var/last_pickup + var/footprint_sprite = FOOTPRINT_SPRITE_SHOES + /datum/component/bloodysoles/Initialize() if(!isclothing(parent)) return COMPONENT_INCOMPATIBLE @@ -100,9 +102,9 @@ /** * Find a blood decal on a turf that matches our last_blood_state */ -/datum/component/bloodysoles/proc/find_pool_by_blood_state(turf/turfLoc, typeFilter = null) +/datum/component/bloodysoles/proc/find_pool_by_blood_state(turf/turfLoc, typeFilter = null, footprint_sprite) for(var/obj/effect/decal/cleanable/blood/pool in turfLoc) - if(pool.blood_state == last_blood_state && (!typeFilter || istype(pool, typeFilter))) + if(pool.blood_state == last_blood_state && pool.footprint_sprite == footprint_sprite && (!typeFilter || istype(pool, typeFilter))) return pool /** @@ -158,23 +160,23 @@ return var/half_our_blood = bloody_shoes[last_blood_state] / 2 - + var/footprint_sprite = wielder.get_footprint_sprite() // Add footprints in old loc if we have enough cream if(half_our_blood >= BLOOD_FOOTPRINTS_MIN) var/turf/oldLocTurf = get_turf(OldLoc) - var/obj/effect/decal/cleanable/blood/footprints/oldLocFP = find_pool_by_blood_state(oldLocTurf, /obj/effect/decal/cleanable/blood/footprints) + var/obj/effect/decal/cleanable/blood/footprints/oldLocFP = find_pool_by_blood_state(oldLocTurf, /obj/effect/decal/cleanable/blood/footprints, footprint_sprite) if(oldLocFP) // Footprints found in the tile we left, add us to it add_parent_to_footprint(oldLocFP) if (!(oldLocFP.exited_dirs & wielder.dir)) oldLocFP.exited_dirs |= wielder.dir oldLocFP.update_appearance() - else if(find_pool_by_blood_state(oldLocTurf)) + else if(find_pool_by_blood_state(oldLocTurf, footprint_sprite = footprint_sprite)) // No footprints in the tile we left, but there was some other blood pool there. Add exit footprints on it adjust_bloody_shoes(last_blood_state, half_our_blood) update_icon() - oldLocFP = new(oldLocTurf) + oldLocFP = new(oldLocTurf, footprint_sprite) if(!QDELETED(oldLocFP)) ///prints merged oldLocFP.blood_state = last_blood_state oldLocFP.exited_dirs |= wielder.dir @@ -194,7 +196,7 @@ adjust_bloody_shoes(last_blood_state, half_our_blood) update_icon() - var/obj/effect/decal/cleanable/blood/footprints/FP = new(get_turf(parent_atom)) + var/obj/effect/decal/cleanable/blood/footprints/FP = new(get_turf(parent_atom), footprint_sprite) if(!QDELETED(FP)) ///prints merged FP.blood_state = last_blood_state FP.entered_dirs |= wielder.dir @@ -253,7 +255,8 @@ return COMPONENT_INCOMPATIBLE parent_atom = parent wielder = parent - + if(footprint_sprite) + src.footprint_sprite = footprint_sprite if(!bloody_feet) bloody_feet = mutable_appearance('icons/effects/blood.dmi', "shoeblood", SHOES_LAYER) diff --git a/code/datums/components/effect_remover.dm b/code/datums/components/effect_remover.dm index dd5544297fb1..8a117961fd23 100644 --- a/code/datums/components/effect_remover.dm +++ b/code/datums/components/effect_remover.dm @@ -14,6 +14,8 @@ var/datum/callback/on_clear_callback /// A typecache of all effects we can clear with our item. var/list/obj/effect/effects_we_clear + /// If above 0, how long it takes while standing still to remove the effect. + var/time_to_remove = 0 SECONDS /datum/component/effect_remover/Initialize( success_forcesay, @@ -21,6 +23,7 @@ tip_text, on_clear_callback, effects_we_clear, + time_to_remove, ) . = ..() @@ -36,6 +39,7 @@ src.tip_text = tip_text src.on_clear_callback = on_clear_callback src.effects_we_clear = typecacheof(effects_we_clear) + src.time_to_remove = time_to_remove /datum/component/effect_remover/Destroy(force, silent) QDEL_NULL(on_clear_callback) @@ -69,6 +73,9 @@ * Actually removes the effect, invoking our on_clear_callback before it's deleted. */ /datum/component/effect_remover/proc/do_remove_effect(obj/effect/target, mob/living/user) + if(time_to_remove && !do_after(user, time_to_remove, target)) + return + var/obj/item/item_parent = parent if(success_forcesay) user.say(success_forcesay, forced = item_parent.name) diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index 63d2c2ac3d57..0e7f4f0762f2 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -234,7 +234,7 @@ Behavior that's still missing from this component that original food items had t if(!(food_flags & FOOD_IN_CONTAINER)) switch(bitecount) if(0) - // pass + pass() if(1) examine_list += span_notice("[parent] was bitten by someone!") if(2, 3) diff --git a/code/datums/components/ghost_direct_control.dm b/code/datums/components/ghost_direct_control.dm index 6ff22b4266a0..dd93da476b6d 100644 --- a/code/datums/components/ghost_direct_control.dm +++ b/code/datums/components/ghost_direct_control.dm @@ -73,12 +73,14 @@ if (!(GLOB.ghost_role_flags & GHOSTROLE_SPAWNER)) return awaiting_ghosts = TRUE - var/list/mob/dead/observer/candidates = poll_ghost_candidates( + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( question = "Do you want to play as [role_name]?", - jobban_type = ban_type, - be_special_flag = ban_type, + check_jobban = ban_type, + role = ban_type, poll_time = poll_length, ignore_category = poll_ignore_key, + pic_source = parent, + role_name_text = role_name, ) awaiting_ghosts = FALSE if (!LAZYLEN(candidates)) diff --git a/code/datums/components/lock_on_cursor.dm b/code/datums/components/lock_on_cursor.dm index 71c729b03f35..e7d8647c4b67 100644 --- a/code/datums/components/lock_on_cursor.dm +++ b/code/datums/components/lock_on_cursor.dm @@ -95,7 +95,6 @@ return for(var/image/overlay as anything in lock_images) owner.client.images -= overlay - qdel(overlay) lock_images.Cut() /// Reset the overlays on all targets diff --git a/code/datums/components/overlay_lighting.dm b/code/datums/components/overlay_lighting.dm index d079f55d170a..800356d64020 100644 --- a/code/datums/components/overlay_lighting.dm +++ b/code/datums/components/overlay_lighting.dm @@ -60,6 +60,8 @@ var/atom/movable/parent_attached_to ///Whether we're a directional light var/directional = FALSE + ///Whether we're a beam light + var/beam = FALSE ///A cone overlay for directional light, it's alpha and color are dependant on the light var/image/cone ///Current tracked direction for the directional cast behaviour @@ -71,13 +73,13 @@ ///Cast range for the directional cast (how far away the atom is moved) var/cast_range = 2 -/datum/component/overlay_lighting/Initialize(_range, _power, _color, starts_on, is_directional) +/datum/component/overlay_lighting/Initialize(_range, _power, _color, starts_on, is_directional, is_beam) if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE var/atom/movable/movable_parent = parent - if(movable_parent.light_system != MOVABLE_LIGHT && movable_parent.light_system != MOVABLE_LIGHT_DIRECTIONAL) - stack_trace("[type] added to [parent], with [movable_parent.light_system] value for the light_system var. Use [MOVABLE_LIGHT] or [MOVABLE_LIGHT_DIRECTIONAL] instead.") + if(movable_parent.light_system != MOVABLE_LIGHT && movable_parent.light_system != MOVABLE_LIGHT_DIRECTIONAL && movable_parent.light_system != MOVABLE_LIGHT_BEAM) + stack_trace("[type] added to [parent], with [movable_parent.light_system] value for the light_system var. Use [MOVABLE_LIGHT], [MOVABLE_LIGHT_DIRECTIONAL] or [MOVABLE_LIGHT_BEAM] instead.") return COMPONENT_INCOMPATIBLE . = ..() @@ -94,6 +96,8 @@ cone.alpha = 110 cone.transform = cone.transform.Translate(-32, -32) set_direction(movable_parent.dir) + if(is_beam) + beam = TRUE if(!isnull(_range)) movable_parent.set_light_range(_range, _range) set_range(parent, movable_parent.light_inner_range, movable_parent.light_outer_range) @@ -193,7 +197,7 @@ get_new_turfs() -///Adds the luminosity and source for the afected movable atoms to keep track of their visibility. +///Adds the luminosity and source for the affected movable atoms to keep track of their visibility. /datum/component/overlay_lighting/proc/add_dynamic_lumi() LAZYSET(current_holder.affected_dynamic_lights, src, lumcount_range + 1) current_holder.underlays += visible_mask @@ -201,7 +205,7 @@ if(directional) current_holder.underlays += cone -///Removes the luminosity and source for the afected movable atoms to keep track of their visibility. +///Removes the luminosity and source for the affected movable atoms to keep track of their visibility. /datum/component/overlay_lighting/proc/remove_dynamic_lumi() LAZYREMOVE(current_holder.affected_dynamic_lights, src) current_holder.underlays -= visible_mask @@ -345,7 +349,7 @@ var/new_range = source.light_outer_range if(range == new_range) return - if(range == 0) + if(new_range == 0) turn_off() range = clamp(CEILING(new_range, 0.5), 1, 6) var/pixel_bounds = ((range - 1) * 64) + 32 @@ -354,16 +358,21 @@ current_holder.underlays -= visible_mask visible_mask.icon = light_overlays["[pixel_bounds]"] if(pixel_bounds == 32) - visible_mask.transform = null - return - var/offset = (pixel_bounds - 32) * 0.5 - var/matrix/transform = new - transform.Translate(-offset, -offset) - visible_mask.transform = transform + if(!directional) // it's important that we make it to the end of this function if we are a directional light + visible_mask.transform = null + return + else + var/offset = (pixel_bounds - 32) * 0.5 + var/matrix/transform = new + transform.Translate(-offset, -offset) + visible_mask.transform = transform if(current_holder && overlay_lighting_flags & LIGHTING_ON) current_holder.underlays += visible_mask if(directional) - cast_range = clamp(round(new_range * 0.5), 1, 3) + if(beam) + cast_range = max(round(new_range * 0.5), 1) + else + cast_range = clamp(round(new_range * 0.5), 1, 3) if(overlay_lighting_flags & LIGHTING_ON) make_luminosity_update() @@ -487,19 +496,32 @@ var/translate_x = -((range - 1) * 32) var/translate_y = translate_x + var/scale_x = 1 + var/scale_y = 1 switch(current_direction) if(NORTH) translate_y += 32 * final_distance + if(beam && range > 1) + scale_x = 1 / (range - (range/5)) if(SOUTH) translate_y += -32 * final_distance + if(beam && range > 1) + scale_x = 1 / (range - (range/5)) if(EAST) translate_x += 32 * final_distance + if(beam && range > 1) + scale_y = 1 / (range - (range/5)) if(WEST) translate_x += -32 * final_distance + if(beam && range > 1) + scale_y = 1 / (range - (range/5)) + if((directional_offset_x != translate_x) || (directional_offset_y != translate_y)) directional_offset_x = translate_x directional_offset_y = translate_y var/matrix/transform = matrix() + if(beam && range > 1) + transform.Scale(scale_x, scale_y) transform.Translate(translate_x, translate_y) visible_mask.transform = transform if(overlay_lighting_flags & LIGHTING_ON) diff --git a/code/datums/components/palette.dm b/code/datums/components/palette.dm index aa47262514af..a3b967516aa3 100644 --- a/code/datums/components/palette.dm +++ b/code/datums/components/palette.dm @@ -106,7 +106,7 @@ var/is_right_clicking = (user.istate & ISTATE_SECONDARY) var/index = text2num(choice) if(is_right_clicking) - var/chosen_color = input(user, "Pick new color", "[parent]", colors[index]) as color|null + var/chosen_color = tgui_color_picker(user, "Pick new color", "[parent]", colors[index]) if(chosen_color && !QDELETED(src) && !IS_DEAD_OR_INCAP(user) && user.is_holding(parent)) colors[index] = chosen_color update_radial_list() diff --git a/code/datums/components/pet_commands/pet_commands_basic.dm b/code/datums/components/pet_commands/pet_commands_basic.dm index 211b995b22e2..93265b80481c 100644 --- a/code/datums/components/pet_commands/pet_commands_basic.dm +++ b/code/datums/components/pet_commands/pet_commands_basic.dm @@ -148,6 +148,7 @@ radial_icon = 'icons/mob/simple/animal.dmi' radial_icon_state = "heart" speech_commands = list("breed", "consummate") + var/datum/ai_behavior/reproduce_behavior = /datum/ai_behavior/make_babies /datum/pet_command/point_targeting/breed/set_command_target(mob/living/parent, atom/target) if(isnull(target) || !isliving(target)) @@ -165,7 +166,7 @@ /datum/pet_command/point_targeting/breed/execute_action(datum/ai_controller/controller) if(is_type_in_list(controller.blackboard[BB_CURRENT_PET_TARGET], controller.blackboard[BB_BABIES_PARTNER_TYPES])) - controller.queue_behavior(/datum/ai_behavior/make_babies, BB_CURRENT_PET_TARGET) + controller.queue_behavior(reproduce_behavior, BB_CURRENT_PET_TARGET) controller.clear_blackboard_key(BB_ACTIVE_PET_COMMAND) return SUBTREE_RETURN_FINISH_PLANNING diff --git a/code/datums/components/plumbing/_plumbing.dm b/code/datums/components/plumbing/_plumbing.dm index 1236a690c96b..d51f233f0ec8 100644 --- a/code/datums/components/plumbing/_plumbing.dm +++ b/code/datums/components/plumbing/_plumbing.dm @@ -96,20 +96,27 @@ process_request(amount = MACHINE_REAGENT_TRANSFER, reagent = null, dir = dir) ///check who can give us what we want, and how many each of them will give us -/datum/component/plumbing/proc/process_request(amount, reagent, dir) - var/list/valid_suppliers = list() +/datum/component/plumbing/proc/process_request(amount = MACHINE_REAGENT_TRANSFER, reagent, dir) + //find the duct to take from var/datum/ductnet/net if(!ducts.Find(num2text(dir))) return net = ducts[num2text(dir)] + + //find all valid suppliers in the duct + var/list/valid_suppliers = list() for(var/datum/component/plumbing/supplier as anything in net.suppliers) if(supplier.can_give(amount, reagent, net)) valid_suppliers += supplier - // Need to ask for each in turn very carefully, making sure we get the total volume. This is to avoid a division that would always round down and become 0 - var/targetVolume = reagents.total_volume + amount var/suppliersLeft = valid_suppliers.len + if(!suppliersLeft) + return + + //take an equal amount from each supplier + var/currentRequest + var/target_volume = reagents.total_volume + amount for(var/datum/component/plumbing/give as anything in valid_suppliers) - var/currentRequest = (targetVolume - reagents.total_volume) / suppliersLeft + currentRequest = (target_volume - reagents.total_volume) / suppliersLeft give.transfer_to(src, currentRequest, reagent, net) suppliersLeft-- @@ -117,14 +124,15 @@ /datum/component/plumbing/proc/can_give(amount, reagent, datum/ductnet/net) if(amount <= 0) return - if(reagent) //only asked for one type of reagent for(var/datum/reagent/contained_reagent as anything in reagents.reagent_list) if(contained_reagent.type == reagent) return TRUE - else if(reagents.total_volume > 0) //take whatever + else if(reagents.total_volume) //take whatever return TRUE + return FALSE + ///this is where the reagent is actually transferred and is thus the finish point of our process() /datum/component/plumbing/proc/transfer_to(datum/component/plumbing/target, amount, reagent, datum/ductnet/net) if(!reagents || !target || !target.reagents) diff --git a/code/datums/components/reflection.dm b/code/datums/components/reflection.dm new file mode 100644 index 000000000000..cb411720f7fc --- /dev/null +++ b/code/datums/components/reflection.dm @@ -0,0 +1,131 @@ +/** + * A simple-ish component that reflects the icons of movables on the parent like a mirror. + * Sadly, there's no easy way to make the SOUTH dir reflection flip the visual so that you can see + * the back NORTH dir of a target while it's facing SOUTH beside adding the VIS_INHERIT_DIR flag + * to the target movable, which I'm not doing to spare eventual issues with other vis overlays in the future. + */ +/datum/component/reflection + /** + * The direction from which the component gets its visual overlays. + * The visuals are also flipped horizontally or vertically based on it. + */ + var/reflected_dir + /// the movable which the reflected movables are attached to, in turn added to the vis contents of the parent. + var/obj/effect/abstract/reflection_holder + /// A lazy assoc list that keeps track of which movables are being reflected and the associated reflections. + var/list/reflected_movables + /// A callback used check to know which movables should be reflected and which not. + var/datum/callback/can_reflect + ///the base matrix used by reflections + var/matrix/reflection_matrix + ///the filter data added to reflection holder. + var/list/reflection_filter + ///the transparency channel value of the reflection holder. + var/alpha + ///A list of signals that when sent to the parent, will force the comp to recalculate the reflected movables. + var/list/update_signals + +/datum/component/reflection/Initialize(reflected_dir = NORTH, list/reflection_filter, matrix/reflection_matrix, datum/callback/can_reflect, alpha = 150, list/update_signals) + if(!ismovable(parent)) + return COMPONENT_INCOMPATIBLE + + var/static/list/connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_movable_entered_or_initialized), + COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON = PROC_REF(on_movable_entered_or_initialized), + COMSIG_ATOM_EXITED = PROC_REF(on_movable_exited) + ) + AddComponent(/datum/component/connect_range, parent, connections, 1, works_in_containers = FALSE) + src.reflected_dir = reflected_dir + src.reflection_matrix = reflection_matrix + src.reflection_filter = reflection_filter + src.can_reflect = can_reflect + reflection_holder = new(parent) + reflection_holder.alpha = alpha + reflection_holder.appearance_flags = KEEP_TOGETHER + reflection_holder.vis_flags = VIS_INHERIT_ID + reflection_holder.mouse_opacity = MOUSE_OPACITY_TRANSPARENT + if(reflection_filter) + reflection_holder.add_filter("reflection", 1, reflection_filter) + + var/atom/movable/mov_parent = parent + mov_parent.vis_contents += reflection_holder + set_reflection(new_dir = mov_parent.dir) + + RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, PROC_REF(on_dir_change)) + var/list/reflect_update_signals = list(COMSIG_MOVABLE_MOVED) + update_signals + RegisterSignals(parent, reflect_update_signals, PROC_REF(get_reflection_targets)) + +/datum/component/reflection/Destroy() + QDEL_LIST_ASSOC_VAL(reflected_movables) + QDEL_NULL(reflection_holder) + return ..() + +///Called when the parent changes its direction. +/datum/component/reflection/proc/on_dir_change(atom/movable/source, old_dir, new_dir) + SIGNAL_HANDLER + set_reflection(old_dir, new_dir) + +///Turns the allowed reflected direction alongside the parent's dir. then calls get_reflection_targets. +/datum/component/reflection/proc/set_reflection(old_dir = SOUTH, new_dir = SOUTH) + if(old_dir == new_dir) + return + + reflected_dir = turn(reflected_dir, dir2angle(new_dir) - dir2angle(old_dir)) + get_reflection_targets() + +///Unsets the old reflected movables and sets it with new ones. +/datum/component/reflection/proc/get_reflection_targets(atom/movable/source) + SIGNAL_HANDLER + QDEL_LIST_ASSOC_VAL(reflected_movables) + for(var/atom/movable/target in view(1, source)) + if(check_can_reflect(target, FALSE)) + set_reflected(target) + +///Checks if the target movable can be reflected or not. +/datum/component/reflection/proc/check_can_reflect(atom/movable/target, check_view = TRUE) + if(target == parent || (check_view && !(target in view(1, parent)))) + return FALSE + var/atom/movable/mov_parent = parent + if(target.loc != mov_parent.loc && get_dir(mov_parent, target) != reflected_dir) + return FALSE + if(can_reflect && !can_reflect.Invoke(target)) + return FALSE + return TRUE + +///Called when a movable enters a turf within the connected range +/datum/component/reflection/proc/on_movable_entered_or_initialized(atom/movable/source, atom/movable/arrived) + SIGNAL_HANDLER + if(LAZYACCESS(reflected_movables, arrived) || !check_can_reflect(arrived)) + return + set_reflected(arrived) + +///Called when a movable exits a turf within the connected range +/datum/component/reflection/proc/on_movable_exited(atom/movable/source, atom/movable/gone) + SIGNAL_HANDLER + var/atom/movable/reflection = LAZYACCESS(reflected_movables, gone) + if(!reflection || check_can_reflect(gone)) + return + qdel(reflection) + LAZYREMOVE(reflected_movables, gone) + +///Sets up a visual overlay of the target movables, which is added to the parent's vis contents. +/datum/component/reflection/proc/set_reflected(atom/movable/target) + SIGNAL_HANDLER + /** + * If the loc is null, only a black (or grey depending on alpha) silhouette of the target will be rendered + * Just putting this information here in case you want something like that in the future. + */ + var/obj/effect/abstract/reflection = new(parent) + reflection.vis_flags = VIS_INHERIT_ID + if(!target.render_target) + target.render_target = REF(target) + reflection.render_source = target.render_target + ///The filter is added to the reflection holder; the matrix is not, otherwise that'd go affecting the filter. + if(reflection_matrix) + reflection.transform = reflection_matrix + if(reflected_dir == NORTH) + reflection.transform = reflection.transform.Scale(1, -1) + else if(reflected_dir != SOUTH) + reflection.transform = reflection.transform.Scale(-1, 1) + LAZYSET(reflected_movables, target, reflection) + reflection_holder.vis_contents += reflection diff --git a/code/datums/components/riding/riding_mob.dm b/code/datums/components/riding/riding_mob.dm index d72b9e3c8d7d..9cfbb79d859f 100644 --- a/code/datums/components/riding/riding_mob.dm +++ b/code/datums/components/riding/riding_mob.dm @@ -227,7 +227,7 @@ unequip_buckle_inhands(parent) var/mob/living/carbon/human/H = parent H.remove_movespeed_modifier(/datum/movespeed_modifier/human_carry) - REMOVE_TRAIT(H, TRAIT_UNDENSE, VEHICLE_TRAIT) + REMOVE_TRAIT(former_rider, TRAIT_UNDENSE, VEHICLE_TRAIT) return ..() /// If the carrier shoves the person they're carrying, force the carried mob off diff --git a/code/datums/components/spirit_holding.dm b/code/datums/components/spirit_holding.dm index c71ecee5db2d..824916d6fbf3 100644 --- a/code/datums/components/spirit_holding.dm +++ b/code/datums/components/spirit_holding.dm @@ -57,7 +57,14 @@ attempting_awakening = TRUE to_chat(awakener, span_notice("You attempt to wake the spirit of [parent]...")) - var/mob/dead/observer/candidates = poll_ghost_candidates("Do you want to play as the spirit of [awakener.real_name]'s blade?", ROLE_PAI, FALSE, 100, POLL_IGNORE_POSSESSED_BLADE) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + "Do you want to play as the spirit of [awakener.real_name]'s blade?", + check_jobban = ROLE_PAI, + poll_time = 10 SECONDS, + ignore_category = POLL_IGNORE_POSSESSED_BLADE, + pic_source = parent, + role_name_text = "possessed blade", + ) if(!LAZYLEN(candidates)) to_chat(awakener, span_warning("[parent] is dormant. Maybe you can try again later.")) attempting_awakening = FALSE diff --git a/code/datums/components/squashable.dm b/code/datums/components/squashable.dm index a8304320bdbd..0e091fa1b48a 100644 --- a/code/datums/components/squashable.dm +++ b/code/datums/components/squashable.dm @@ -49,7 +49,7 @@ if(isliving(crossing_movable)) var/mob/living/crossing_mob = crossing_movable if(crossing_mob.mob_size > MOB_SIZE_SMALL && !(crossing_mob.movement_type & FLYING)) - if(HAS_TRAIT(crossing_mob, TRAIT_PACIFISM)) + if(HAS_TRAIT(crossing_mob, TRAIT_PACIFISM) || HAS_TRAIT(crossing_mob, TRAIT_CAREFUL_STEPS)) crossing_mob.visible_message(span_notice("[crossing_mob] carefully steps over [parent_as_living]."), span_notice("You carefully step over [parent_as_living] to avoid hurting it.")) return if(should_squash) diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm index 28ef612c6cba..58542e9960fb 100644 --- a/code/datums/components/uplink.dm +++ b/code/datums/components/uplink.dm @@ -48,6 +48,7 @@ has_progression = FALSE, datum/uplink_handler/uplink_handler_override, ) + if(!isitem(parent)) return COMPONENT_INCOMPATIBLE @@ -119,6 +120,7 @@ /// Sets the telecrystals of the uplink. It is bad practice to use this outside of the component itself. /datum/component/uplink/proc/set_telecrystals(new_telecrystal_amount) uplink_handler.telecrystals = new_telecrystal_amount + uplink_handler.on_update() /datum/component/uplink/InheritComponent(datum/component/uplink/uplink) lockable |= uplink.lockable @@ -145,6 +147,11 @@ if(istype(item, /obj/item/stack/telecrystal)) load_tc(user, item) + if(!istype(item)) + return + + SEND_SIGNAL(item, COMSIG_ITEM_ATTEMPT_TC_REIMBURSE, user, src) + /datum/component/uplink/proc/on_examine(datum/source, mob/user, list/examine_list) SIGNAL_HANDLER @@ -253,6 +260,7 @@ data["current_stock"] = remaining_stock data["shop_locked"] = uplink_handler.shop_locked data["purchased_items"] = length(uplink_handler.purchase_log?.purchase_log) + data["can_renegotiate"] = user.mind == uplink_handler.owner && uplink_handler.can_replace_objectives?.Invoke() == TRUE //monkestation edit start data["locked_entries"] = uplink_handler.locked_entries data["is_contractor"] = (uplink_handler.uplink_flag == UPLINK_CONTRACTORS) @@ -310,6 +318,9 @@ if(!lockable) return TRUE lock_uplink() + if("renegotiate_objectives") + uplink_handler.replace_objectives?.Invoke() + SStgui.update_uis(src) if(!uplink_handler.has_objectives) return TRUE diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index 619568f67e08..c308cfd99fb3 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -384,10 +384,11 @@ /datum/symptom/heal/coma/proc/coma(mob/living/M) + if(QDELETED(M) || M.stat == DEAD) + return M.fakedeath("regenerative_coma", !deathgasp) addtimer(CALLBACK(src, PROC_REF(uncoma), M), 300) - /datum/symptom/heal/coma/proc/uncoma(mob/living/M) if(QDELETED(M) || !active_coma) return diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 704dfedd8e0c..26aa1fbf046a 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -362,20 +362,21 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) set_uni_feature_block(blocknumber, construct_block(GLOB.pod_hair_list.Find(features["pod_hair"]), GLOB.pod_hair_list.len)) //Please use add_mutation or activate_mutation instead -/datum/dna/proc/force_give(datum/mutation/human/HM) - if(holder && HM) - if(HM.class == MUT_NORMAL) - set_se(1, HM) - . = HM.on_acquiring(holder) +/datum/dna/proc/force_give(datum/mutation/human/human_mutation) + if(holder && human_mutation) + if(human_mutation.class == MUT_NORMAL) + set_se(1, human_mutation) + . = human_mutation.on_acquiring(holder) if(.) - qdel(HM) + qdel(human_mutation) update_instability() //Use remove_mutation instead -/datum/dna/proc/force_lose(datum/mutation/human/HM) - if(holder && (HM in mutations)) - set_se(0, HM) - . = HM.on_losing(holder) +/datum/dna/proc/force_lose(datum/mutation/human/human_mutation) + if(holder && (human_mutation in mutations)) + set_se(0, human_mutation) + . = human_mutation.on_losing(holder) + qdel(human_mutation) // qdel mutations on removal update_instability(FALSE) return diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index 84913c234bef..b05e1f3f2b16 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -236,3 +236,11 @@ speak = list() //they're very patient and focused on holding the butter on 'em emote_see = list("shakes a little.", "looks around.") emote_hear = list("licks a trickle of the butter up.", "smiles.") + +/datum/dog_fashion/head/berserker + name = "%REAL_NAME% the Berserker" + desc = "%REAL_NAME% has gone into a rage from lack of petting." + obj_icon_state = "berserker" + speak = list("RAAARGH!", "Grrrrrr!") + emote_see = list("bares his fangs", "practices his warcry") + emote_hear = list("plans the demise of his owner.") diff --git a/code/datums/elements/basic_eating.dm b/code/datums/elements/basic_eating.dm index 3201eeff846f..50c89d4a7ccd 100644 --- a/code/datums/elements/basic_eating.dm +++ b/code/datums/elements/basic_eating.dm @@ -77,4 +77,6 @@ playsound(eater.loc,'sound/items/drink.ogg', rand(10,50), TRUE) else playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE) + SEND_SIGNAL(eater, COMSIG_LIVING_ATE, target) + SEND_SIGNAL(eater, COMSIG_EMOTION_STORE, null, EMOTION_HAPPY, "I ate [target], I really like [target].") qdel(target) diff --git a/code/datums/elements/climbable.dm b/code/datums/elements/climbable.dm index 52a62fdb8fcb..b543d56c3292 100644 --- a/code/datums/elements/climbable.dm +++ b/code/datums/elements/climbable.dm @@ -77,8 +77,8 @@ vault_over_object(user, climbed_thing) if(climb_stun) user.Stun(climb_stun) - user.visible_message("[user] flips over [src]!", \ - "You flip over [climbed_thing]!") + user.visible_message(span_warning("[user] flips over [climbed_thing]!"), \ + span_notice("You flip over [climbed_thing]!")) else if(do_climb(climbed_thing, user, params)) user.visible_message(span_warning("[user] climbs onto [climbed_thing]."), \ @@ -151,5 +151,9 @@ ///Tries to climb onto the target if the forced movement of the mob allows it /datum/element/climbable/proc/attempt_sprint_climb(datum/source, mob/bumpee) - if(do_after(bumpee, climb_time * 1.2, source)) - do_climb(source, bumpee) + if(HAS_TRAIT(bumpee, TRAIT_FREERUNNING)) + if(do_after(bumpee, climb_time, source)) + do_climb(source, bumpee) + else + if(do_after(bumpee, climb_time * 1.2, source)) + do_climb(source, bumpee) diff --git a/code/datums/elements/elevation.dm b/code/datums/elements/elevation.dm new file mode 100644 index 000000000000..ffa6de398b6e --- /dev/null +++ b/code/datums/elements/elevation.dm @@ -0,0 +1,200 @@ +/** + * Manages the elevation of the turf the source is on (can be the turf itself) + * The atom with the highest pixel_shift gets to set the elevation of the turf to that value. + */ +/datum/element/elevation + element_flags = ELEMENT_BESPOKE | ELEMENT_DETACH_ON_HOST_DESTROY + argument_hash_start_idx = 2 + ///The amount of pixel_z applied to the mob standing on the turf + var/pixel_shift + +/datum/element/elevation/Attach(datum/target, pixel_shift) + . = ..() + if(!isatom(target) || isarea(target)) + return ELEMENT_INCOMPATIBLE + + src.pixel_shift = pixel_shift + + if(ismovable(target)) + RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + + var/turf/turf = get_turf(target) + if(turf) + if(!HAS_TRAIT(turf, TRAIT_TURF_HAS_ELEVATED_OBJ(pixel_shift))) + RegisterSignal(turf, COMSIG_TURF_RESET_ELEVATION, PROC_REF(check_elevation)) + RegisterSignal(turf, COMSIG_TURF_CHANGE, PROC_REF(pre_change_turf)) + reset_elevation(turf) + ADD_TRAIT(turf, TRAIT_TURF_HAS_ELEVATED_OBJ(pixel_shift), ref(target)) + +/datum/element/elevation/Detach(atom/movable/source) + unregister_turf(source, source.loc) + return ..() + +/datum/element/elevation/proc/reset_elevation(turf/target) + var/list/current_values[2] + SEND_SIGNAL(target, COMSIG_TURF_RESET_ELEVATION, current_values) + var/current_pixel_shift = current_values[ELEVATION_CURRENT_PIXEL_SHIFT] + var/new_pixel_shift = current_values[ELEVATION_MAX_PIXEL_SHIFT] + if(new_pixel_shift == current_pixel_shift) + return + if(current_pixel_shift) + target.RemoveElement(/datum/element/elevation_core, current_pixel_shift) + if(new_pixel_shift) + target.AddElement(/datum/element/elevation_core, new_pixel_shift) + +/datum/element/elevation/proc/check_elevation(turf/source, list/current_values) + SIGNAL_HANDLER + current_values[ELEVATION_MAX_PIXEL_SHIFT] = max(current_values[ELEVATION_MAX_PIXEL_SHIFT], pixel_shift) + +/datum/element/elevation/proc/on_moved(atom/movable/source, atom/oldloc) + SIGNAL_HANDLER + unregister_turf(source, oldloc) + if(isturf(source.loc)) + if(!HAS_TRAIT(source.loc, TRAIT_TURF_HAS_ELEVATED_OBJ(pixel_shift))) + RegisterSignal(source.loc, COMSIG_TURF_RESET_ELEVATION, PROC_REF(check_elevation)) + RegisterSignal(source.loc, COMSIG_TURF_CHANGE, PROC_REF(pre_change_turf)) + reset_elevation(source.loc) + ADD_TRAIT(source.loc, TRAIT_TURF_HAS_ELEVATED_OBJ(pixel_shift), ref(source)) + +/datum/element/elevation/proc/unregister_turf(atom/movable/source, atom/location) + if(!isturf(location)) + return + REMOVE_TRAIT(location, TRAIT_TURF_HAS_ELEVATED_OBJ(pixel_shift), ref(source)) + if(!HAS_TRAIT(location, TRAIT_TURF_HAS_ELEVATED_OBJ(pixel_shift))) + UnregisterSignal(location, list(COMSIG_TURF_RESET_ELEVATION, COMSIG_TURF_CHANGE)) + reset_elevation(location) + +///Changing or destroying the turf detaches the element, also we need to reapply the traits since they don't get passed down. +/datum/element/elevation/proc/pre_change_turf(turf/changed, path, list/new_baseturfs, flags, list/post_change_callbacks) + SIGNAL_HANDLER + var/list/trait_sources = GET_TRAIT_SOURCES(changed, TRAIT_TURF_HAS_ELEVATED_OBJ(pixel_shift)) + trait_sources = trait_sources.Copy() + post_change_callbacks += CALLBACK(src, PROC_REF(post_change_turf), trait_sources) + +/datum/element/elevation/proc/post_change_turf(list/trait_sources, turf/changed) + for(var/source in trait_sources) + ADD_TRAIT(changed, TRAIT_TURF_HAS_ELEVATED_OBJ(pixel_shift), source) + reset_elevation(changed) + +#define ELEVATE_TIME 0.2 SECONDS + +/** + * The core element attached to the turf itself. Do not use this directly! + * + * Causes mobs walking over a turf with this element to be pixel shifted vertically by the pixel_shift amount. + * Because of the way it's structured, it should only be added through the elevation element (without the core suffix). + * + * To explain: in the case of multiple objects with (different instances of) the element being stacked on one turf somehow, + * we only want that with the highest pixel shift value to apply it to the turf, so that the mobs standing on top of it all + * doesn't look like it's floating off the pile. + */ +/datum/element/elevation_core + element_flags = ELEMENT_BESPOKE | ELEMENT_DETACH_ON_HOST_DESTROY + argument_hash_start_idx = 2 + ///The amount of pixel_z applied to the mob standing on the turf. + var/pixel_shift + +/datum/element/elevation_core/Attach(datum/target, pixel_shift) + . = ..() + if(!isturf(target)) + return ELEMENT_INCOMPATIBLE + if(!pixel_shift) + CRASH("attempted attaching /datum/element/elevation_core with a pixel_shift value of [isnull(pixel_shift) ? "null" : 0]") + + RegisterSignal(target, COMSIG_ATOM_ABSTRACT_ENTERED, PROC_REF(on_entered)) + RegisterSignal(target, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, PROC_REF(on_initialized_on)) + RegisterSignal(target, COMSIG_ATOM_ABSTRACT_EXITED, PROC_REF(on_exited)) + RegisterSignal(target, COMSIG_TURF_RESET_ELEVATION, PROC_REF(on_reset_elevation)) + + src.pixel_shift = pixel_shift + + ADD_TRAIT(target, TRAIT_ELEVATED_TURF, REF(src)) + + for(var/mob/living/living in target) + ADD_TRAIT(living, TRAIT_ON_ELEVATED_SURFACE, REF(src)) + RegisterSignal(living, COMSIG_LIVING_SET_BUCKLED, PROC_REF(on_set_buckled)) + elevate_mob(living) + +/datum/element/elevation_core/Detach(datum/source) + /** + * Since the element can be removed outside of Destroy(), + * and even then, signals are passed down to the new turf, + * it's necessary to clear them here. + */ + UnregisterSignal(source, list( + COMSIG_ATOM_ABSTRACT_ENTERED, + COMSIG_ATOM_ABSTRACT_EXITED, + COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, + COMSIG_TURF_RESET_ELEVATION, + )) + REMOVE_TRAIT(source, TRAIT_ELEVATED_TURF, REF(src)) + for(var/mob/living/living in source) + if(!HAS_TRAIT_FROM(living, TRAIT_ON_ELEVATED_SURFACE, REF(src))) + continue + REMOVE_TRAIT(living, TRAIT_ON_ELEVATED_SURFACE, REF(src)) + elevate_mob(living, -pixel_shift) + UnregisterSignal(living, COMSIG_LIVING_SET_BUCKLED) + return ..() + +/datum/element/elevation_core/proc/on_entered(turf/source, atom/movable/entered, atom/old_loc) + SIGNAL_HANDLER + if((isnull(old_loc) || !HAS_TRAIT_FROM(old_loc, TRAIT_ELEVATED_TURF, REF(src))) && isliving(entered)) + ADD_TRAIT(entered, TRAIT_ON_ELEVATED_SURFACE, REF(src)) + var/elevate_time = isturf(old_loc) && source.Adjacent(old_loc) ? ELEVATE_TIME : 0 + elevate_mob(entered, elevate_time = elevate_time) + RegisterSignal(entered, COMSIG_LIVING_SET_BUCKLED, PROC_REF(on_set_buckled)) + +/datum/element/elevation_core/proc/on_initialized_on(turf/source, atom/movable/spawned) + SIGNAL_HANDLER + if(isliving(spawned)) + elevate_mob(spawned) + +/datum/element/elevation_core/proc/on_exited(turf/source, atom/movable/gone) + SIGNAL_HANDLER + if((isnull(gone.loc) || !HAS_TRAIT_FROM(gone.loc, TRAIT_ELEVATED_TURF, REF(src))) && isliving(gone)) + // Always unregister the signal, we're still leaving even if already shifted down. + UnregisterSignal(gone, COMSIG_LIVING_SET_BUCKLED) + if(!HAS_TRAIT_FROM(gone, TRAIT_ON_ELEVATED_SURFACE, REF(src))) + return + REMOVE_TRAIT(gone, TRAIT_ON_ELEVATED_SURFACE, REF(src)) + var/elevate_time = isturf(gone.loc) && source.Adjacent(gone.loc) ? ELEVATE_TIME : 0 + elevate_mob(gone, -pixel_shift, elevate_time) + +/datum/element/elevation_core/proc/elevate_mob(mob/living/target, z_shift = pixel_shift, elevate_time = ELEVATE_TIME) + var/buckled_to_vehicle = FALSE + if(target.buckled) + if(isvehicle(target.buckled)) + buckled_to_vehicle = TRUE + else if(!isliving(target.buckled)) + return + animate(target, pixel_z = z_shift, time = elevate_time, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL) + if(buckled_to_vehicle) + animate(target.buckled, pixel_z = z_shift, time = elevate_time, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL) + +/** + * If the mob is buckled or unbuckled to/from a vehicle, shift it up/down + *. + * Null the pixel shift if the mob is buckled to something different that's not a mob or vehicle + * + * The reason is that it's more important for a mob to look like they're actually buckled to a bed + * or something anchored to the floor than atop of whatever else is on the same turf. + */ +/datum/element/elevation_core/proc/on_set_buckled(mob/living/source, atom/movable/new_buckled) + SIGNAL_HANDLER + if(source.buckled) + if(isvehicle(source.buckled)) + animate(source.buckled, pixel_z = -pixel_shift, time = ELEVATE_TIME, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL) + else if(!isliving(source.buckled)) + animate(source, pixel_z = pixel_shift, time = ELEVATE_TIME, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL) + if(!new_buckled) + return + if(isvehicle(new_buckled)) + animate(new_buckled, pixel_z = pixel_shift, time = ELEVATE_TIME, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL) + else if(!isliving(new_buckled)) + animate(source, pixel_z = -pixel_shift, time = ELEVATE_TIME, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL) + +/datum/element/elevation_core/proc/on_reset_elevation(turf/source, list/current_values) + SIGNAL_HANDLER + current_values[ELEVATION_CURRENT_PIXEL_SHIFT] = pixel_shift + +#undef ELEVATE_TIME diff --git a/code/datums/elements/high_fiver.dm b/code/datums/elements/high_fiver.dm index 9f9e8871927a..6e4e9739cefc 100644 --- a/code/datums/elements/high_fiver.dm +++ b/code/datums/elements/high_fiver.dm @@ -21,20 +21,12 @@ /datum/element/high_fiver/proc/on_offer(obj/item/source, mob/living/carbon/offerer) SIGNAL_HANDLER - if(locate(/mob/living/carbon) in orange(1, offerer)) - offerer.visible_message( - span_notice("[offerer] raises [offerer.p_their()] arm, looking for a high-five!"), - span_notice("You post up, looking for a high-five!"), - vision_distance = 2, - ) - offerer.apply_status_effect(/datum/status_effect/offering, source, /atom/movable/screen/alert/give/highfive) - - else - offerer.visible_message( - span_danger("[offerer] raises [offerer.p_their()] arm, looking around for a high-five, but there's no one around!"), - span_warning("You post up, looking for a high-five, but find no one to accept it..."), - vision_distance = 4, - ) + offerer.visible_message( + span_notice("[offerer] raises [offerer.p_their()] arm, looking for a high-five!"), + span_notice("You post up, looking for a high-five!"), + vision_distance = 2, + ) + offerer.apply_status_effect(/datum/status_effect/offering/no_item_received/high_five, source, /atom/movable/screen/alert/give/highfive) return COMPONENT_OFFER_INTERRUPT @@ -89,4 +81,5 @@ offerer.add_mood_event(descriptor, /datum/mood_event/high_five) taker.add_mood_event(descriptor, /datum/mood_event/high_five) + offerer.remove_status_effect(/datum/status_effect/offering/no_item_received/high_five) return COMPONENT_OFFER_INTERRUPT diff --git a/code/datums/elements/uplink_reimburse.dm b/code/datums/elements/uplink_reimburse.dm new file mode 100644 index 000000000000..3ff182ec2314 --- /dev/null +++ b/code/datums/elements/uplink_reimburse.dm @@ -0,0 +1,56 @@ +/** + * Uplink Reimburse element. + * When element is applied onto items, it allows them to be reimbursed if an user pokes an item with a uplink component with them. + * + * Element is only compatible with items. + */ + +/datum/element/uplink_reimburse + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 1 + /// TC to refund! + var/refundable_tc = 1 + +/datum/element/uplink_reimburse/Attach(datum/target, refundable_tc = 1) + . = ..() + + if(!isitem(target)) + return ELEMENT_INCOMPATIBLE + + src.refundable_tc = refundable_tc + + RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(target, COMSIG_ITEM_ATTEMPT_TC_REIMBURSE, PROC_REF(reimburse)) + RegisterSignal(target,COMSIG_TRAITOR_ITEM_USED(target.type), PROC_REF(used)) + +/datum/element/uplink_reimburse/Detach(datum/target) + UnregisterSignal(target, list(COMSIG_ATOM_EXAMINE, COMSIG_TRAITOR_ITEM_USED(target.type), COMSIG_ITEM_ATTEMPT_TC_REIMBURSE)) + + + return ..() + +///signal called on parent being examined +/datum/element/uplink_reimburse/proc/on_examine(datum/target, mob/user, list/examine_list) + SIGNAL_HANDLER + + if(!IS_TRAITOR(user) && !IS_NUKE_OP(user)) + examine_list += span_warning("There's a label on the side, but it's written in indecipherable gibberish. You have no idea what it means!") + return + + examine_list += span_notice("There's a label written in codespeak on the side, saying that this item can be refunded for [refundable_tc] by applying it onto an uplink.") + +/datum/element/uplink_reimburse/proc/reimburse(obj/item/refund_item, mob/user, datum/component/uplink/uplink_comp) + SIGNAL_HANDLER + + if(!uplink_comp) + CRASH("No uplink component in arguments detected") + + to_chat(user, span_notice("You tap [uplink_comp.uplink_handler] with [refund_item], and a moment after [refund_item] disappears in a puff of red smoke!")) + do_sparks(2, source = uplink_comp.uplink_handler) + uplink_comp.add_telecrystals(refundable_tc) + qdel(refund_item) +/// If the item is used, it needs to no longer be refundable +/datum/element/uplink_reimburse/proc/used(datum/target) + SIGNAL_HANDLER + + Detach(target) diff --git a/code/datums/elements/waddling.dm b/code/datums/elements/waddling.dm index 825b0c4e4cb8..c51a1759768b 100644 --- a/code/datums/elements/waddling.dm +++ b/code/datums/elements/waddling.dm @@ -21,7 +21,8 @@ waddling_animation(moved) /datum/element/waddling/proc/waddling_animation(atom/movable/target) - animate(target, pixel_z = 4, time = 0) - var/prev_trans = matrix(target.transform) - animate(pixel_z = 0, transform = turn(target.transform, pick(-12, 0, 12)), time=2) - animate(pixel_z = 0, transform = prev_trans, time = 0) + var/prev_pixel_z = target.pixel_z + animate(target, pixel_z = target.pixel_z + 4, time = 0) + var/prev_transform = target.transform + animate(pixel_z = prev_pixel_z, transform = turn(target.transform, pick(-12, 0, 12)), time=2) + animate(transform = prev_transform, time = 0) diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 309bf1ecd40a..feca02e6e6d4 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -14,6 +14,8 @@ var/key = "" /// This will also call the emote. var/key_third_person = "" + /// Needed for more user-friendly emote names, so emotes with keys like "aflap" will show as "flap angry". Defaulted to key. + var/name = "" /// Message displayed when emote is used. var/message = "" /// Message displayed if the user is a mime. @@ -71,6 +73,9 @@ mob_type_blacklist_typecache = typecacheof(mob_type_blacklist_typecache) mob_type_ignore_stat_typecache = typecacheof(mob_type_ignore_stat_typecache) + if(!name) + name = key + /** * Handles the modifications and execution of emotes. * @@ -86,6 +91,8 @@ . = TRUE if(!can_run_emote(user, TRUE, intentional)) return FALSE + if(SEND_SIGNAL(user, COMSIG_MOB_PRE_EMOTED, key, params, type_override, intentional) & COMPONENT_CANT_EMOTE) + return // We don't return FALSE because the error output would be incorrect, provide your own if necessary. var/msg = select_message_type(user, message, intentional) if(params && message_param) msg = select_param(user, params) diff --git a/code/datums/greyscale/config_types/greyscale_configs.dm b/code/datums/greyscale/config_types/greyscale_configs.dm index 0c44ddb748e8..dcd65739c9ca 100644 --- a/code/datums/greyscale/config_types/greyscale_configs.dm +++ b/code/datums/greyscale/config_types/greyscale_configs.dm @@ -801,7 +801,7 @@ /datum/greyscale_config/buckets name = "Buckets" - icon_file = 'icons/obj/janitor.dmi' + icon_file = 'icons/obj/service/janitor.dmi' json_config = 'code/datums/greyscale/json_configs/buckets.json' /datum/greyscale_config/buckets_worn diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm index 096ddc56f2be..abc2135370b5 100644 --- a/code/datums/id_trim/jobs.dm +++ b/code/datums/id_trim/jobs.dm @@ -789,12 +789,14 @@ ) job = /datum/job/psychologist +//Monkestation Edit Start - QM is not a head + /datum/id_trim/job/quartermaster assignment = "Quartermaster" trim_state = "trim_quartermaster" - department_color = COLOR_COMMAND_BLUE + department_color = COLOR_CARGO_BROWN subdepartment_color = COLOR_CARGO_BROWN - department_state = "departmenthead" + department_state = "department" sechud_icon_state = SECHUD_QUARTERMASTER minimal_access = list( ACCESS_AUX_BASE, @@ -818,6 +820,8 @@ ) job = /datum/job/quartermaster +//Monkestation Edit End + /datum/id_trim/job/research_director assignment = "Research Director" intern_alt_name = "Research Director-in-Training" diff --git a/code/datums/keybinding/human.dm b/code/datums/keybinding/human.dm index 448a15d4539a..cc401adfcc94 100644 --- a/code/datums/keybinding/human.dm +++ b/code/datums/keybinding/human.dm @@ -56,3 +56,21 @@ slot_type = ITEM_SLOT_SUITSTORE slot_item_name = "suit storage slot item" keybind_signal = COMSIG_KB_HUMAN_SUITEQUIP_DOWN + +/datum/keybinding/human/quick_equip_belt/quick_equip_lpocket + hotkey_keys = list("Ctrl1") + name = "quick_equip_lpocket" + full_name = "Quick equip left pocket" + description = "Put in or take out an item in left pocket" + slot_type = ITEM_SLOT_LPOCKET + slot_item_name = "left pocket" + keybind_signal = COMSIG_KB_HUMAN_LPOCKETEQUIP_DOWN + +/datum/keybinding/human/quick_equip_belt/quick_equip_rpocket + hotkey_keys = list("Ctrl2") + name = "quick_equip_rpocket" + full_name = "Quick equip right pocket" + description = "Put in or take out an item in right pocket" + slot_type = ITEM_SLOT_RPOCKET + slot_item_name = "right pocket" + keybind_signal = COMSIG_KB_HUMAN_RPOCKETEQUIP_DOWN diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 80a411509c79..fd5fc5b16239 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -1,6 +1,6 @@ #define STRONG_PUNCH_COMBO "HH" #define LAUNCH_KICK_COMBO "HD" -#define DROP_KICK_COMBO "HG" +#define DROP_KICK_COMBO "DD" /datum/martial_art/the_sleeping_carp name = "The Sleeping Carp" @@ -8,33 +8,33 @@ allow_temp_override = FALSE help_verb = /mob/living/proc/sleeping_carp_help display_combos = TRUE + var/list/scarp_traits = list(TRAIT_NOGUNS, TRAIT_HARDLY_WOUNDED, TRAIT_NODISMEMBER, TRAIT_HEAVY_SLEEPER) /datum/martial_art/the_sleeping_carp/teach(mob/living/target, make_temporary = FALSE) . = ..() if(!.) return - target.add_traits(list(TRAIT_NOGUNS, TRAIT_HARDLY_WOUNDED, TRAIT_NODISMEMBER), SLEEPING_CARP_TRAIT) + target.add_traits(scarp_traits, SLEEPING_CARP_TRAIT) RegisterSignal(target, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) RegisterSignal(target, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(hit_by_projectile)) target.faction |= FACTION_CARP //:D /datum/martial_art/the_sleeping_carp/on_remove(mob/living/target) - target.remove_traits(list(TRAIT_NOGUNS, TRAIT_HARDLY_WOUNDED, TRAIT_NODISMEMBER), SLEEPING_CARP_TRAIT) - UnregisterSignal(target, COMSIG_ATOM_ATTACKBY) - UnregisterSignal(target, COMSIG_ATOM_PRE_BULLET_ACT) + REMOVE_TRAITS_IN(target, SLEEPING_CARP_TRAIT) + UnregisterSignal(target, list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_PRE_BULLET_ACT)) target.faction -= FACTION_CARP //:( . = ..() /datum/martial_art/the_sleeping_carp/proc/check_streak(mob/living/attacker, mob/living/defender) - if(findtext(streak,STRONG_PUNCH_COMBO)) + if(findtext(streak, STRONG_PUNCH_COMBO)) reset_streak() strongPunch(attacker, defender) return TRUE - if(findtext(streak,LAUNCH_KICK_COMBO)) + if(findtext(streak, LAUNCH_KICK_COMBO)) reset_streak() launchKick(attacker, defender) return TRUE - if(findtext(streak,DROP_KICK_COMBO)) + if(findtext(streak, DROP_KICK_COMBO)) reset_streak() dropKick(attacker, defender) return TRUE @@ -49,47 +49,60 @@ defender.visible_message(span_danger("[attacker] [atk_verb]s [defender]!"), \ span_userdanger("[attacker] [atk_verb]s you!"), null, null, attacker) to_chat(attacker, span_danger("You [atk_verb] [defender]!")) - playsound(get_turf(defender), 'sound/weapons/punch1.ogg', 25, TRUE, -1) + playsound(defender, 'sound/weapons/punch1.ogg', vol = 25, vary = TRUE, extrarange = -1) log_combat(attacker, defender, "strong punched (Sleeping Carp)") defender.apply_damage(20, attacker.get_attack_type(), affecting) return -///Crashing Wave Kick: Punch Shove combo, throws people seven tiles backwards +///Crashing Wave Kick: Harm Disarm combo, throws people seven tiles backwards /datum/martial_art/the_sleeping_carp/proc/launchKick(mob/living/attacker, mob/living/defender) attacker.do_attack_animation(defender, ATTACK_EFFECT_KICK) defender.visible_message(span_warning("[attacker] kicks [defender] square in the chest, sending them flying!"), \ span_userdanger("You are kicked square in the chest by [attacker], sending you flying!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) - playsound(get_turf(attacker), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) + playsound(get_turf(attacker), 'sound/effects/hit_kick.ogg', vol = 50, vary = TRUE, extrarange = -1) var/atom/throw_target = get_edge_target_turf(defender, attacker.dir) defender.throw_at(throw_target, 7, 4, attacker) defender.apply_damage(15, attacker.get_attack_type(), BODY_ZONE_CHEST, wound_bonus = CANT_WOUND) log_combat(attacker, defender, "launchkicked (Sleeping Carp)") return -///Keelhaul: Harm Grab combo, knocks people down, deals stamina damage while they're on the floor +///Keelhaul: Disarm Disarm combo, knocks people down and deals substantial stamina damage, and also discombobulates them. Knocks objects out of their hands if they're already on the ground. /datum/martial_art/the_sleeping_carp/proc/dropKick(mob/living/attacker, mob/living/defender) attacker.do_attack_animation(defender, ATTACK_EFFECT_KICK) - playsound(get_turf(attacker), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) + playsound(get_turf(attacker), 'sound/effects/hit_kick.ogg', vol = 50, vary = TRUE, extrarange = -1) if(defender.body_position == STANDING_UP) - defender.apply_damage(10, attacker.get_attack_type(), BODY_ZONE_HEAD, wound_bonus = CANT_WOUND) - defender.apply_damage(40, STAMINA, BODY_ZONE_HEAD) defender.Knockdown(4 SECONDS) defender.visible_message(span_warning("[attacker] kicks [defender] in the head, sending them face first into the floor!"), \ span_userdanger("You are kicked in the head by [attacker], sending you crashing to the floor!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) else - defender.apply_damage(5, attacker.get_attack_type(), BODY_ZONE_HEAD, wound_bonus = CANT_WOUND) - defender.apply_damage(40, STAMINA, BODY_ZONE_HEAD) defender.drop_all_held_items() defender.visible_message(span_warning("[attacker] kicks [defender] in the head!"), \ span_userdanger("You are kicked in the head by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) + defender.stamina.adjust(-100) + defender.adjust_dizzy_up_to(10 SECONDS, 10 SECONDS) + defender.adjust_temp_blindness_up_to(2 SECONDS, 10 SECONDS) log_combat(attacker, defender, "dropkicked (Sleeping Carp)") return /datum/martial_art/the_sleeping_carp/grab_act(mob/living/attacker, mob/living/defender) + if(!can_deflect(attacker)) //allows for deniability + return ..() + add_to_streak("G", defender) if(check_streak(attacker, defender)) return TRUE - log_combat(attacker, defender, "grabbed (Sleeping Carp)") + var/grab_log_description = "grabbed" + attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) + playsound(defender, 'sound/weapons/punch1.ogg', vol = 25, vary = TRUE, extrarange = -1) + if(defender.stat != DEAD && !defender.IsUnconscious() && defender.stamina.current <= 50) //We put our target to sleep. + defender.visible_message( + span_danger("[attacker] carefully pinch a nerve in [defender]'s neck, knocking them out cold"), + span_userdanger("[attacker] pinches something in your neck, and you fall unconscious!"), + ) + grab_log_description = "grabbed and nerve pinched" + defender.Unconscious(10 SECONDS) + defender.stamina.adjust(-50) + log_combat(attacker, defender, "[grab_log_description] (Sleeping Carp)") return ..() /datum/martial_art/the_sleeping_carp/harm_act(mob/living/attacker, mob/living/defender) @@ -100,7 +113,7 @@ ) var/obj/item/bodypart/head = defender.get_bodypart(BODY_ZONE_HEAD) if(!isnull(head)) - playsound(defender, 'sound/effects/wounds/crack1.ogg', 100) + playsound(defender, 'sound/effects/wounds/crack1.ogg', vol = 100) defender.visible_message( span_danger("[attacker] snaps the neck of [defender]!"), span_userdanger("Your neck is snapped by [attacker]!"), @@ -125,20 +138,31 @@ defender.visible_message(span_danger("[attacker] [atk_verb]s [defender]!"), \ span_userdanger("[attacker] [atk_verb]s you!"), null, null, attacker) to_chat(attacker, span_danger("You [atk_verb] [defender]!")) - defender.apply_damage(rand(10,15), BRUTE, affecting, wound_bonus = CANT_WOUND) - playsound(get_turf(defender), 'sound/weapons/punch1.ogg', 25, TRUE, -1) + + defender.apply_damage(rand(10,15), attacker.get_attack_type(), affecting, wound_bonus = CANT_WOUND) + playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) log_combat(attacker, defender, "punched (Sleeping Carp)") return MARTIAL_ATTACK_SUCCESS /datum/martial_art/the_sleeping_carp/disarm_act(mob/living/attacker, mob/living/defender) + if(!can_deflect(attacker)) //allows for deniability + return ..() + add_to_streak("D", defender) if(check_streak(attacker, defender)) return TRUE + + attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) + playsound(defender, 'sound/weapons/punch1.ogg', vol = 25, vary = TRUE, extrarange = -1) + defender.stamina.adjust(-50) log_combat(attacker, defender, "disarmed (Sleeping Carp)") + return ..() /datum/martial_art/the_sleeping_carp/proc/can_deflect(mob/living/carp_user) - if(!can_use(carp_user) || !carp_user.throw_mode) + if(!can_use(carp_user)) + return FALSE + if(!(carp_user.istate & ISTATE_HARM)) // monke edit: istates/intents return FALSE if(carp_user.incapacitated(IGNORE_GRAB)) //NO STUN return FALSE @@ -161,7 +185,7 @@ span_danger("[carp_user] effortlessly swats [hitting_projectile] aside! [carp_user.p_They()] can block bullets with [carp_user.p_their()] bare hands!"), span_userdanger("You deflect [hitting_projectile]!"), ) - playsound(carp_user, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) + playsound(carp_user, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), vol = 75, vary = TRUE) hitting_projectile.firer = carp_user hitting_projectile.set_angle(rand(0, 360))//SHING return COMPONENT_BULLET_PIERCED @@ -170,9 +194,7 @@ /datum/martial_art/the_sleeping_carp/proc/on_attackby(mob/living/carp_user, obj/item/attack_weapon, mob/attacker, params) SIGNAL_HANDLER - if(!istype(attack_weapon, /obj/item/melee/touch_attack)) - return - if(!can_deflect(carp_user)) + if(!istype(attack_weapon, /obj/item/melee/touch_attack) || !can_deflect(carp_user)) return var/obj/item/melee/touch_attack/touch_weapon = attack_weapon carp_user.visible_message( @@ -188,12 +210,13 @@ set category = "Sleeping Carp" to_chat(usr, "You retreat inward and recall the teachings of the Sleeping Carp...\n\ - [span_notice("Gnashing Teeth")]: Punch Punch. Deal additional damage every second (consecutive) punch!\n\ + [span_notice("Gnashing Teeth")]: Punch Punch. Deal additional damage every second (consecutive) punch! Very good chance to wound!\n\ [span_notice("Crashing Wave Kick")]: Punch Shove. Launch your opponent away from you with incredible force!\n\ - [span_notice("Keelhaul")]: Punch Grab. Kick an opponent to the floor, knocking them down! If your opponent is already prone, this move will disarm them and deal additional stamina damage to them.\n\ - While in throw mode (and not stunned, not a hulk, and not in a mech), you can reflect all projectiles that come your way, sending them back at the people who fired them! \ - Also, you are more resilient against suffering wounds in combat, and your limbs cannot be dismembered. This grants you extra staying power during extended combat, especially against slashing and other bleeding weapons. \ - You are not invincible, however- while you may not suffer debilitating wounds often, you must still watch your health and should have appropriate medical supplies for use during downtime. \ + [span_notice("Keelhaul")]: Shove Shove. Nonlethally kick an opponent to the floor, knocking them down, discombobulating them and dealing substantial stamina damage. If they're already prone, disarm them as well.\n\ + [span_notice("Grabs and Shoves")]: While in combat mode, your typical grab and shove do decent stamina damage. If you grab someone who has substantial amounts of stamina damage, you knock them out!\n\ + While in combat mode (and not stunned, not a hulk, and not in a mech), you can reflect all projectiles that come your way, sending them back at the people who fired them! \n\ + Also, you are more resilient against suffering wounds in combat, and your limbs cannot be dismembered. This grants you extra staying power during extended combat, especially against slashing and other bleeding weapons. \n\ + You are not invincible, however- while you may not suffer debilitating wounds often, you must still watch your health and should have appropriate medical supplies for use during downtime. \n\ In addition, your training has imbued you with a loathing of guns, and you can no longer use them.") @@ -233,9 +256,9 @@ user.Paralyze(6 SECONDS) if(ishuman(user)) var/mob/living/carbon/human/H = user - H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD) + H.apply_damage(2 * force, BRUTE, BODY_ZONE_HEAD) else - user.take_bodypart_damage(2*force) + user.take_bodypart_damage(2 * force) return if(iscyborg(target)) return ..() diff --git a/code/datums/memory/key_memories.dm b/code/datums/memory/key_memories.dm index 768b659a61a4..4a1b79af8956 100644 --- a/code/datums/memory/key_memories.dm +++ b/code/datums/memory/key_memories.dm @@ -163,3 +163,48 @@ "[protagonist_name] being implanted by a scientist.", "[protagonist_name] having surgery done on them by a scientist.", ) + +/datum/memory/key/permabrig_crimes + var/crimes + +/datum/memory/key/permabrig_crimes/New( + datum/mind/memorizer_mind, + atom/protagonist, + atom/deuteragonist, + atom/antagonist, + crimes, +) + src.crimes = crimes + return ..() + +/datum/memory/key/permabrig_crimes/get_names() + return list("[protagonist_name]'s crime of \"[crimes]\".") + +/datum/memory/key/permabrig_crimes/get_starts() + return list( + "[protagonist_name] being arrested by security for [crimes].", + "[protagonist_name] committing the crimes of [crimes].", + ) + +/datum/memory/key/message_server_key + var/decrypt_key + +/datum/memory/key/message_server_key/New( + datum/mind/memorizer_mind, + atom/protagonist, + atom/deuteragonist, + atom/antagonist, + decrypt_key, +) + src.decrypt_key = decrypt_key + return ..() + +/datum/memory/key/message_server_key/get_names() + return list("The daily message server key is [decrypt_key]. Keep it a secret from the clown.") + +/datum/memory/key/message_server_key/get_starts() + return list( + "A sticky note attached to a monitor with [decrypt_key] written on it.", + "Poly the parrot screaming \"[decrypt_key]!\" over and over again.", + "[protagonist_name] spilling coffee over the message monitor while typing [decrypt_key].", + ) diff --git a/code/datums/mind/_mind.dm b/code/datums/mind/_mind.dm index 2d7970906838..1da35af5a824 100644 --- a/code/datums/mind/_mind.dm +++ b/code/datums/mind/_mind.dm @@ -352,6 +352,41 @@ objective.completed = !objective.completed log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective.explanation_text]") + else if(href_list["obj_prompt_custom"]) + var/datum/antagonist/target_antag + if(href_list["target_antag"]) + var/datum/antagonist/found_datum = locate(href_list["target_antag"]) in antag_datums + if(found_datum) + target_antag = found_datum + if(isnull(target_antag)) + switch(length(antag_datums)) + if(0) + target_antag = add_antag_datum(/datum/antagonist/custom) + if(1) + target_antag = antag_datums[1] + else + var/datum/antagonist/target = input("Which antagonist gets the objective:", "Antagonist", "(new custom antag)") as null|anything in sort_list(antag_datums) + "(new custom antag)" + if (QDELETED(target)) + return + else if(target == "(new custom antag)") + target_antag = add_antag_datum(/datum/antagonist/custom) + else + target_antag = target + var/replace_existing = input("Replace existing objectives?","Replace objectives?") in list("Yes", "No") + if (isnull(replace_existing)) + return + replace_existing = replace_existing == "Yes" + var/replace_escape + if (!replace_existing) + replace_escape = FALSE + else + replace_escape = input("Replace survive/escape/martyr objectives?","Replace objectives?") in list("Yes", "No") + if (isnull(replace_escape)) + return + replace_escape = replace_escape == "Yes" + target_antag.submit_player_objective(retain_existing = !replace_existing, retain_escape = !replace_escape, force = TRUE) + log_admin("[key_name(usr)] prompted [current] to enter their own objectives for [target_antag].") + else if (href_list["silicon"]) switch(href_list["silicon"]) if("unemag") diff --git a/code/datums/mood_events/drink_events.dm b/code/datums/mood_events/drink_events.dm index 311764789c2b..e18938d5fd40 100644 --- a/code/datums/mood_events/drink_events.dm +++ b/code/datums/mood_events/drink_events.dm @@ -37,3 +37,8 @@ description = "Amazing taste!" mood_change = 50 timeout = 10 MINUTES + +/datum/mood_event/wellcheers + description = "What a tasty can of Wellcheers! The salty grape flavor is a great pick-me-up." + mood_change = 3 + timeout = 7 MINUTES diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index d1376437a075..ba4252d30ae3 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -194,8 +194,8 @@ timeout = 3 MINUTES /datum/mood_event/hope_lavaland - description = "What a peculiar emblem. It makes me feel hopeful for my future." - mood_change = 10 + description = "What a peculiar emblem. It makes me feel hopeful for my future." + mood_change = 6 /datum/mood_event/confident_mane description = "I'm feeling confident with a head full of hair." diff --git a/code/datums/mutations/_mutations.dm b/code/datums/mutations/_mutations.dm index 0226326165c8..be1f45defa40 100644 --- a/code/datums/mutations/_mutations.dm +++ b/code/datums/mutations/_mutations.dm @@ -138,11 +138,6 @@ mut_overlay.Remove(get_visual_indicator()) owner.overlays_standing[layer_used] = mut_overlay owner.apply_overlay(layer_used) - if(power_path) - // Any powers we made are linked to our mutation datum, - // so deleting ourself will also delete it and remove it - // ...Why don't all mutations delete on loss? Not sure. - qdel(src) /mob/living/carbon/proc/update_mutations_overlay() return diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index a1ce90175ec6..c0ae74e58a81 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -382,7 +382,8 @@ if(..()) return ADD_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION) - //handled in init_signals.dm + owner.update_transform(1.25) + owner.visible_message(span_danger("[owner] suddenly grows!"), span_notice("Everything around you seems to shrink..")) /datum/mutation/human/gigantism/on_losing(mob/living/carbon/human/owner) if(..()) @@ -390,6 +391,9 @@ //We're leaving the size traits permanent until someone wants to separate the mutation from customization aspects //REMOVE_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION) //handled in init_signals.dm + //REMOVE_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION) + owner.update_transform(0.8) + owner.visible_message(span_danger("[owner] suddenly shrinks!"), span_notice("Everything around you seems to grow..")) /datum/mutation/human/spastic name = "Spastic" diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 77bd426ed299..c1b42564f593 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -81,6 +81,7 @@ if(owner.health < owner.crit_threshold) on_losing(owner) to_chat(owner, span_danger("You suddenly feel very weak.")) + qdel(src) /datum/mutation/human/hulk/on_losing(mob/living/carbon/human/owner) if(..()) diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index e4cd89c7b011..1a9a23efda10 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -112,9 +112,7 @@ clean_user_client() bar_loc = null - - if(bar) - QDEL_NULL(bar) + bar = null return ..() diff --git a/code/datums/quirks/negative_quirks.dm b/code/datums/quirks/negative_quirks.dm index 77328dfce103..08393519a5dc 100644 --- a/code/datums/quirks/negative_quirks.dm +++ b/code/datums/quirks/negative_quirks.dm @@ -968,8 +968,7 @@ medical_record_text = "Patient's immune system responds violently to [allergy_string]" var/mob/living/carbon/human/human_holder = quirk_holder - var/obj/item/clothing/accessory/allergy_dogtag/dogtag = new(get_turf(human_holder)) - dogtag.display = allergy_string + var/obj/item/clothing/accessory/dogtag/allergy/dogtag = new(get_turf(human_holder), allergy_string) give_item_to_holder(dogtag, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS), flavour_text = "Make sure medical staff can see this...") diff --git a/code/datums/screentips/screentips.dm b/code/datums/screentips/screentips.dm new file mode 100644 index 000000000000..d72e41960e50 --- /dev/null +++ b/code/datums/screentips/screentips.dm @@ -0,0 +1,34 @@ +#define HINT_ICON_FILE 'icons/ui_icons/screentips/cursor_hints.dmi' + +/// Stores the cursor hint icons for screentip context. +GLOBAL_LIST_INIT_TYPED(screentip_context_icons, /image, prepare_screentip_context_icons()) + +/proc/prepare_screentip_context_icons() + var/list/output = list() + for(var/state in icon_states(HINT_ICON_FILE)) + output[state] = image(HINT_ICON_FILE, icon_state = state) + return output + +/* + * # Compiles a string for this key + * Args: + * - context = list (REQUIRED) + * - Must contain key + * - key = string (REQUIRED) + * - allow_image = boolean (not required) +*/ +/proc/build_context(list/context, key, allow_image) + if(!length(context) || !context[key] || !key) + return "" + // Splits key combinations from mouse buttons. e.g. `Ctrl-Shift-LMB` goes in, `Ctrl-Shift-` goes out. Will be empty for single button actions. + var/key_combo = length(key) > 3 ? "[copytext(key, 1, -3)]" : "" + // Grab the mouse button, LMB/RMB + var/button = copytext(key, -3) + if(allow_image) + // Compile into image, if allowed + button = "\icon[GLOB.screentip_context_icons[button]]" + + // Voilá, final result + return "[key_combo][button][allow_image ? "" : ":"] [context[key]]" + +#undef HINT_ICON_FILE diff --git a/code/datums/signals.dm b/code/datums/signals.dm index 9a43c88fa7e3..236d2be4fc61 100644 --- a/code/datums/signals.dm +++ b/code/datums/signals.dm @@ -67,7 +67,7 @@ * * sig_typeor_types Signal string key or list of signal keys to stop listening to specifically */ /datum/proc/UnregisterSignal(datum/target, sig_type_or_types) - var/list/lookup = target._listen_lookup + var/list/lookup = target?._listen_lookup if(!_signal_procs || !_signal_procs[target] || !lookup) return if(!islist(sig_type_or_types)) diff --git a/code/datums/status_effects/buffs/stop_drop_roll.dm b/code/datums/status_effects/buffs/stop_drop_roll.dm new file mode 100644 index 000000000000..43d37654e617 --- /dev/null +++ b/code/datums/status_effects/buffs/stop_drop_roll.dm @@ -0,0 +1,66 @@ +/datum/status_effect/stop_drop_roll + id = "stop_drop_roll" + alert_type = null + + tick_interval = 0.8 SECONDS + +/datum/status_effect/stop_drop_roll/on_apply() + if(!iscarbon(owner)) + return FALSE + + var/actual_interval = initial(tick_interval) + if(!owner.Knockdown(actual_interval * 2, ignore_canstun = TRUE) || owner.body_position != LYING_DOWN) + to_chat(owner, span_warning("You try to stop, drop, and roll - but you can't get on the ground!")) + return FALSE + + RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(stop_rolling)) + RegisterSignal(owner, COMSIG_LIVING_SET_BODY_POSITION, PROC_REF(body_position_changed)) + ADD_TRAIT(owner, TRAIT_HANDS_BLOCKED, id) // they're kinda busy! + + owner.visible_message( + span_danger("[owner] rolls on the floor, trying to put [owner.p_them()]self out!"), + span_notice("You stop, drop, and roll!"), + ) + // Start with one weaker roll + owner.spin(spintime = actual_interval, speed = actual_interval / 4) + owner.adjust_fire_stacks(-0.25) + return TRUE + +/datum/status_effect/stop_drop_roll/on_remove() + UnregisterSignal(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_SET_BODY_POSITION)) + REMOVE_TRAIT(owner, TRAIT_HANDS_BLOCKED, id) + +/datum/status_effect/stop_drop_roll/tick(seconds_between_ticks) + if(HAS_TRAIT(owner, TRAIT_IMMOBILIZED) || HAS_TRAIT(owner, TRAIT_INCAPACITATED)) + qdel(src) + return + + var/actual_interval = initial(tick_interval) + if(!owner.Knockdown(actual_interval * 1.2, ignore_canstun = TRUE)) + stop_rolling() + return + + owner.spin(spintime = actual_interval, speed = actual_interval / 4) + owner.adjust_fire_stacks(-1) + + if(owner.fire_stacks > 0) + return + + owner.visible_message( + span_danger("[owner] successfully extinguishes [owner.p_them()]self!"), + span_notice("You extinguish yourself."), + ) + qdel(src) + +/datum/status_effect/stop_drop_roll/proc/stop_rolling(datum/source, ...) + SIGNAL_HANDLER + + if(!QDELING(owner)) + to_chat(owner, span_notice("You stop rolling around.")) + qdel(src) + +/datum/status_effect/stop_drop_roll/proc/body_position_changed(datum/source, new_value, old_value) + SIGNAL_HANDLER + + if(new_value != LYING_DOWN) + stop_rolling() diff --git a/code/datums/status_effects/debuffs/fire_stacks.dm b/code/datums/status_effects/debuffs/fire_stacks.dm index 3f2c9d107c39..cf0f22e98a80 100644 --- a/code/datums/status_effects/debuffs/fire_stacks.dm +++ b/code/datums/status_effects/debuffs/fire_stacks.dm @@ -218,14 +218,19 @@ var/mob/living/carbon/human/victim = owner var/thermal_protection = victim.get_thermal_protection() - if(thermal_protection >= FIRE_IMMUNITY_MAX_TEMP_PROTECT && !no_protection) - return + if(!no_protection) + if(thermal_protection >= FIRE_IMMUNITY_MAX_TEMP_PROTECT) + return + if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT) + victim.adjust_bodytemperature(5.5 * seconds_per_tick) + return - if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT && !no_protection) - victim.adjust_bodytemperature(5.5 * seconds_per_tick) - return + var/amount_to_heat = (BODYTEMP_HEATING_MAX + (stacks * 12)) * 0.5 * seconds_per_tick + if(owner.bodytemperature > BODYTEMP_FIRE_TEMP_SOFTCAP) + // Apply dimishing returns upon temp beyond the soft cap + amount_to_heat = amount_to_heat ** (BODYTEMP_FIRE_TEMP_SOFTCAP / owner.bodytemperature) - victim.adjust_bodytemperature((BODYTEMP_HEATING_MAX + (stacks * 12)) * 0.5 * seconds_per_tick) + victim.adjust_bodytemperature(amount_to_heat) victim.add_mood_event("on_fire", /datum/mood_event/on_fire) victim.add_mob_memory(/datum/memory/was_burning) diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index c6ccf5c1fd58..64c224eaa1d9 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -186,13 +186,12 @@ RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(check_owner_in_range)) RegisterSignals(offered_item, list(COMSIG_QDELETING, COMSIG_ITEM_DROPPED), PROC_REF(dropped_item)) - //RegisterSignal(owner, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(check_fake_out)) /datum/status_effect/offering/Destroy() - for(var/i in possible_takers) - var/mob/living/carbon/removed_taker = i + for(var/mob/living/carbon/removed_taker as anything in possible_takers) remove_candidate(removed_taker) LAZYCLEARLIST(possible_takers) + offered_item = null return ..() /// Hook up the specified carbon mob to be offered the item in question, give them the alert and signals and all @@ -202,7 +201,7 @@ return LAZYADD(possible_takers, possible_candidate) RegisterSignal(possible_candidate, COMSIG_MOVABLE_MOVED, PROC_REF(check_taker_in_range)) - G.setup(possible_candidate, owner, offered_item) + G.setup(possible_candidate, src) /// Remove the alert and signals for the specified carbon mob. Automatically removes the status effect when we lost the last taker /datum/status_effect/offering/proc/remove_candidate(mob/living/carbon/removed_candidate) @@ -225,8 +224,7 @@ /datum/status_effect/offering/proc/check_owner_in_range(mob/living/carbon/source) SIGNAL_HANDLER - for(var/i in possible_takers) - var/mob/living/carbon/checking_taker = i + for(var/mob/living/carbon/checking_taker as anything in possible_takers) if(!istype(checking_taker) || !owner.CanReach(checking_taker) || IS_DEAD_OR_INCAP(checking_taker)) remove_candidate(checking_taker) @@ -244,7 +242,6 @@ /datum/status_effect/offering/proc/is_taker_elligible(mob/living/carbon/taker) return owner.CanReach(taker) && !IS_DEAD_OR_INCAP(taker) && additional_taker_check(taker) - /** * Additional checks added to `CanReach()` and `IS_DEAD_OR_INCAP()` in `is_taker_elligible()`. * Should be what you override instead of `is_taker_elligible()`. By default, checks if the @@ -256,17 +253,14 @@ /datum/status_effect/offering/proc/additional_taker_check(mob/living/carbon/taker) return taker.can_hold_items() - /** * This status effect is meant only for items that you don't actually receive * when offered, mostly useful for `/obj/item/hand_item` subtypes. */ /datum/status_effect/offering/no_item_received - /datum/status_effect/offering/no_item_received/additional_taker_check(mob/living/carbon/taker) - return TRUE - + return taker.usable_hands > 0 /** * This status effect is meant only to be used for offerings that require the target to @@ -276,26 +270,21 @@ */ /datum/status_effect/offering/no_item_received/needs_resting - /datum/status_effect/offering/no_item_received/needs_resting/additional_taker_check(mob/living/carbon/taker) return taker.body_position == LYING_DOWN - /datum/status_effect/offering/no_item_received/needs_resting/on_creation(mob/living/new_owner, obj/item/offer, give_alert_override, mob/living/carbon/offered) . = ..() RegisterSignal(owner, COMSIG_LIVING_SET_BODY_POSITION, PROC_REF(check_owner_standing)) - /datum/status_effect/offering/no_item_received/needs_resting/register_candidate(mob/living/carbon/possible_candidate) . = ..() RegisterSignal(possible_candidate, COMSIG_LIVING_SET_BODY_POSITION, PROC_REF(check_candidate_resting)) - /datum/status_effect/offering/no_item_received/needs_resting/remove_candidate(mob/living/carbon/removed_candidate) UnregisterSignal(removed_candidate, COMSIG_LIVING_SET_BODY_POSITION) return ..() - /// Simple signal handler that ensures that, if the owner stops standing, the offer no longer stands either! /datum/status_effect/offering/no_item_received/needs_resting/proc/check_owner_standing(mob/living/carbon/owner) if(src.owner.body_position == STANDING_UP) @@ -304,7 +293,6 @@ // This doesn't work anymore if the owner is no longer standing up, sorry! qdel(src) - /// Simple signal handler that ensures that, should a candidate now be standing up, the offer won't be standing for them anymore! /datum/status_effect/offering/no_item_received/needs_resting/proc/check_candidate_resting(mob/living/carbon/candidate) SIGNAL_HANDLER @@ -315,10 +303,13 @@ // No longer lying down? You're no longer eligible to take the offer, sorry! remove_candidate(candidate) +/// Subtype for high fives, so we can fake out people +/datum/status_effect/offering/no_item_received/high_five + id = "offer_high_five" -/datum/status_effect/offering/secret_handshake - id = "secret_handshake" - give_alert_type = /atom/movable/screen/alert/give/secret_handshake +/datum/status_effect/offering/no_item_received/high_five/dropped_item(obj/item/source) + // Lets us "too slow" people, instead of qdeling we just handle the ref + offered_item = null //this effect gives the user an alert they can use to surrender quickly /datum/status_effect/grouped/surrender diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm index e6f4a5d08d1b..2106ae9cc652 100644 --- a/code/datums/storage/storage.dm +++ b/code/datums/storage/storage.dm @@ -137,6 +137,10 @@ RegisterSignal(resolve_parent, COMSIG_TOPIC, PROC_REF(topic_handle)) + // monke edit: bluespace compression kit + RegisterSignal(resolve_parent, COMSIG_ITEM_PRE_COMPRESS, PROC_REF(attempt_compression)) + // monke end + orient_to_hud() /datum/storage/Destroy() diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index 99ca5d09fc65..128e59d815eb 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -189,7 +189,7 @@ return tgsadminwho() /datum/world_topic/status - keyword = "status-old" //monkestation edit + keyword = "status" /datum/world_topic/status/Run(list/input) . = list() diff --git a/code/datums/wounds/burns.dm b/code/datums/wounds/burns.dm index f34cd34623b6..4cb19e626f95 100644 --- a/code/datums/wounds/burns.dm +++ b/code/datums/wounds/burns.dm @@ -79,11 +79,14 @@ infestation += infestation_rate * seconds_per_tick switch(infestation) if(0 to WOUND_INFECTION_MODERATE) + return + if(WOUND_INFECTION_MODERATE to WOUND_INFECTION_SEVERE) if(SPT_PROB(15, seconds_per_tick)) victim.adjustToxLoss(0.2) if(prob(6)) to_chat(victim, span_warning("The blisters on your [limb.plaintext_zone] ooze a strange pus...")) + if(WOUND_INFECTION_SEVERE to WOUND_INFECTION_CRITICAL) if(!disabling) if(SPT_PROB(1, seconds_per_tick)) diff --git a/code/datums/wounds/pierce.dm b/code/datums/wounds/pierce.dm index 1085b422263d..238e28001738 100644 --- a/code/datums/wounds/pierce.dm +++ b/code/datums/wounds/pierce.dm @@ -34,7 +34,7 @@ return ..() /datum/wound/pierce/bleed/receive_damage(wounding_type, wounding_dmg, wound_bonus) - if(victim.stat == DEAD || (wounding_dmg < 5) || !limb.can_bleed() || !victim.blood_volume || !prob(internal_bleeding_chance + wounding_dmg)) + if(QDELETED(victim) || victim.stat == DEAD || (wounding_dmg < 5) || !limb.can_bleed() || !victim.blood_volume || !prob(internal_bleeding_chance + wounding_dmg)) return if(limb.current_gauze?.splint_factor) wounding_dmg *= (1 - limb.current_gauze.splint_factor) @@ -66,7 +66,7 @@ return BLOOD_FLOW_STEADY /datum/wound/pierce/bleed/handle_process(seconds_per_tick, times_fired) - if (!victim || HAS_TRAIT(victim, TRAIT_STASIS)) + if (QDELETED(victim) || HAS_TRAIT(victim, TRAIT_STASIS)) return set_blood_flow(min(blood_flow, WOUND_SLASH_MAX_BLOODFLOW)) diff --git a/code/datums/wounds/scars/_scars.dm b/code/datums/wounds/scars/_scars.dm index 3c623e10ba54..2e85533438ab 100644 --- a/code/datums/wounds/scars/_scars.dm +++ b/code/datums/wounds/scars/_scars.dm @@ -178,7 +178,7 @@ if((human_victim.wear_mask && (human_victim.wear_mask.flags_inv & HIDEFACE)) || (human_victim.head && (human_victim.head.flags_inv & HIDEFACE))) return FALSE else if(limb.scars_covered_by_clothes) - var/num_covers = LAZYLEN(human_victim.clothingonpart(limb)) + var/num_covers = LAZYLEN(human_victim.get_clothing_on_part(limb)) if(num_covers + get_dist(viewer, victim) >= visibility) return FALSE diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm index 989ca6f80398..46f10e9f0e81 100644 --- a/code/game/area/areas/shuttles.dm +++ b/code/game/area/areas/shuttles.dm @@ -121,7 +121,7 @@ if(SSshuttle.arrivals?.mode == SHUTTLE_CALL) var/atom/movable/screen/splash/Spl = new(null, boarder.client, TRUE) Spl.Fade(TRUE) - boarder.playsound_local(get_turf(boarder), 'sound/voice/ApproachingTG.ogg', 25) + boarder.playsound_local(get_turf(boarder), 'monkestation/sound/ai/duke/welcome/welcome2.ogg', 50) //MONKESTATION EDIT boarder.update_parallax_teleport() diff --git a/code/game/atom_defense.dm b/code/game/atom_defense.dm index 0149a0175f79..ea9b8994bc78 100644 --- a/code/game/atom_defense.dm +++ b/code/game/atom_defense.dm @@ -64,17 +64,14 @@ CRASH("/atom/proc/run_atom_armor was called on [src] without being implemented as a type that uses integrity!") if(damage_flag == MELEE && damage_amount < damage_deflection) return 0 - switch(damage_type) - if(BRUTE) - if(BURN) - else - return 0 + if(damage_type != BRUTE && damage_type != BURN) + return 0 var/armor_protection = 0 if(damage_flag) armor_protection = get_armor_rating(damage_flag) if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor. armor_protection = clamp(armor_protection - armour_penetration, min(armor_protection, 0), 100) - return round(damage_amount * (100 - armor_protection)*0.01, DAMAGE_PRECISION) + return round(damage_amount * (100 - armor_protection) * 0.01, DAMAGE_PRECISION) ///the sound played when the atom is damaged. /atom/proc/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 70d35dd1bdf1..bc36879bba28 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -180,6 +180,8 @@ var/datum/storage/atom_storage /// How this atom should react to having its astar blocking checked var/can_astar_pass = CANASTARPASS_DENSITY + /// Whether ghosts can see screentips on it + var/ghost_screentips = FALSE /** * Called when an atom is created in byond (built in engine proc) @@ -2046,7 +2048,7 @@ active_hud.screentip_text.maptext = "" return - active_hud.screentip_text.maptext_y = 0 + active_hud.screentip_text.maptext_y = 10 // 10px lines us up with the action buttons top left corner var/lmb_rmb_line = "" var/ctrl_lmb_ctrl_rmb_line = "" var/alt_lmb_alt_rmb_line = "" @@ -2054,7 +2056,7 @@ var/extra_lines = 0 var/extra_context = "" - if (isliving(user) || isovermind(user) || isaicamera(user)) + if(isliving(user) || isovermind(user) || isaicamera(user) || (ghost_screentips && isobserver(user))) var/obj/item/held_item = user.get_active_held_item() if (flags_1 & HAS_CONTEXTUAL_SCREENTIPS_1 || held_item?.item_flags & ITEM_HAS_CONTEXTUAL_SCREENTIPS) @@ -2065,15 +2067,16 @@ | (held_item && SEND_SIGNAL(held_item, COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET, context, src, user)) if (contextual_screentip_returns & CONTEXTUAL_SCREENTIP_SET) + var/screentip_images = active_hud.screentip_images // LMB and RMB on one line... - var/lmb_text = (SCREENTIP_CONTEXT_LMB in context) ? "[SCREENTIP_CONTEXT_LMB]: [context[SCREENTIP_CONTEXT_LMB]]" : "" - var/rmb_text = (SCREENTIP_CONTEXT_RMB in context) ? "[SCREENTIP_CONTEXT_RMB]: [context[SCREENTIP_CONTEXT_RMB]]" : "" + var/lmb_text = build_context(context, SCREENTIP_CONTEXT_LMB, screentip_images) + var/rmb_text = build_context(context, SCREENTIP_CONTEXT_RMB, screentip_images) - if (lmb_text) + if (lmb_text != "") lmb_rmb_line = lmb_text - if (rmb_text) + if (rmb_text != "") lmb_rmb_line += " | [rmb_text]" - else if (rmb_text) + else if (rmb_text != "") lmb_rmb_line = rmb_text // Ctrl-LMB, Ctrl-RMB on one line... @@ -2081,47 +2084,48 @@ lmb_rmb_line += "
" extra_lines++ if (SCREENTIP_CONTEXT_CTRL_LMB in context) - ctrl_lmb_ctrl_rmb_line += "[SCREENTIP_CONTEXT_CTRL_LMB]: [context[SCREENTIP_CONTEXT_CTRL_LMB]]" + ctrl_lmb_ctrl_rmb_line += build_context(context, SCREENTIP_CONTEXT_CTRL_LMB, screentip_images) + if (SCREENTIP_CONTEXT_CTRL_RMB in context) if (ctrl_lmb_ctrl_rmb_line != "") ctrl_lmb_ctrl_rmb_line += " | " - ctrl_lmb_ctrl_rmb_line += "[SCREENTIP_CONTEXT_CTRL_RMB]: [context[SCREENTIP_CONTEXT_CTRL_RMB]]" + ctrl_lmb_ctrl_rmb_line += build_context(context, SCREENTIP_CONTEXT_CTRL_RMB, screentip_images) // Alt-LMB, Alt-RMB on one line... if (ctrl_lmb_ctrl_rmb_line != "") ctrl_lmb_ctrl_rmb_line += "
" extra_lines++ if (SCREENTIP_CONTEXT_ALT_LMB in context) - alt_lmb_alt_rmb_line += "[SCREENTIP_CONTEXT_ALT_LMB]: [context[SCREENTIP_CONTEXT_ALT_LMB]]" + alt_lmb_alt_rmb_line += build_context(context, SCREENTIP_CONTEXT_ALT_LMB, screentip_images) if (SCREENTIP_CONTEXT_ALT_RMB in context) if (alt_lmb_alt_rmb_line != "") alt_lmb_alt_rmb_line += " | " - alt_lmb_alt_rmb_line += "[SCREENTIP_CONTEXT_ALT_RMB]: [context[SCREENTIP_CONTEXT_ALT_RMB]]" + alt_lmb_alt_rmb_line += build_context(context, SCREENTIP_CONTEXT_ALT_RMB, screentip_images) // Shift-LMB, Ctrl-Shift-LMB on one line... if (alt_lmb_alt_rmb_line != "") alt_lmb_alt_rmb_line += "
" extra_lines++ if (SCREENTIP_CONTEXT_SHIFT_LMB in context) - shift_lmb_ctrl_shift_lmb_line += "[SCREENTIP_CONTEXT_SHIFT_LMB]: [context[SCREENTIP_CONTEXT_SHIFT_LMB]]" + shift_lmb_ctrl_shift_lmb_line += build_context(context, SCREENTIP_CONTEXT_SHIFT_LMB, screentip_images) if (SCREENTIP_CONTEXT_CTRL_SHIFT_LMB in context) if (shift_lmb_ctrl_shift_lmb_line != "") shift_lmb_ctrl_shift_lmb_line += " | " - shift_lmb_ctrl_shift_lmb_line += "[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB]: [context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB]]" + shift_lmb_ctrl_shift_lmb_line += build_context(context, SCREENTIP_CONTEXT_CTRL_SHIFT_LMB, screentip_images) if (shift_lmb_ctrl_shift_lmb_line != "") extra_lines++ if(extra_lines) - extra_context = "
[lmb_rmb_line][ctrl_lmb_ctrl_rmb_line][alt_lmb_alt_rmb_line][shift_lmb_ctrl_shift_lmb_line]" - //first extra line pushes atom name line up 10px, subsequent lines push it up 9px, this offsets that and keeps the first line in the same place - active_hud.screentip_text.maptext_y = -10 + (extra_lines - 1) * -9 + extra_context = "
[lmb_rmb_line][ctrl_lmb_ctrl_rmb_line][alt_lmb_alt_rmb_line][shift_lmb_ctrl_shift_lmb_line]" + //first extra line pushes atom name line up 11px, subsequent lines push it up 9px, this offsets that and keeps the first line in the same place + active_hud.screentip_text.maptext_y = -1 + (extra_lines - 1) * -9 if (screentips_enabled == SCREENTIP_PREFERENCE_CONTEXT_ONLY && extra_context == "") active_hud.screentip_text.maptext = "" else //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][extra_context]" + active_hud.screentip_text.maptext = "[name][extra_context]" /// Gets a merger datum representing the connected blob of objects in the allowed_types argument /atom/proc/GetMergeGroup(id, list/allowed_types) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index a937d56234a3..5c7477e21f88 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -175,6 +175,8 @@ AddComponent(/datum/component/overlay_lighting) if(MOVABLE_LIGHT_DIRECTIONAL) AddComponent(/datum/component/overlay_lighting, is_directional = TRUE) + if(MOVABLE_LIGHT_BEAM) + AddComponent(/datum/component/overlay_lighting, is_directional = TRUE, is_beam = TRUE) /atom/movable/Destroy(force) QDEL_NULL(language_holder) @@ -576,14 +578,15 @@ if(!only_pulling && pulledby && moving_diagonally != FIRST_DIAG_STEP && (get_dist(src, pulledby) > 1 || z != pulledby.z)) //separated from our puller and not in the middle of a diagonal move. pulledby.stop_pulling() -/atom/movable/proc/set_glide_size(target = 8) +/atom/movable/proc/set_glide_size(target = 8, recursed = FALSE) if (HAS_TRAIT(src, TRAIT_NO_GLIDE)) return SEND_SIGNAL(src, COMSIG_MOVABLE_UPDATE_GLIDE_SIZE, target) glide_size = target - for(var/mob/buckled_mob as anything in buckled_mobs) - buckled_mob.set_glide_size(target) + if(!recursed) + for(var/mob/buckled_mob as anything in buckled_mobs) + buckled_mob.set_glide_size(target, TRUE) /** * meant for movement with zero side effects. only use for objects that are supposed to move "invisibly" (like camera mobs or ghosts) @@ -639,8 +642,13 @@ if(SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_MOVE, entering_loc) & COMPONENT_MOVABLE_BLOCK_PRE_MOVE) return else // Else just try to enter the single destination. - if(!newloc.Enter(src)) - return + if(isliving(src)) + var/mob/living/living = src + if(!newloc.Enter(src) && !living.buckled) + return + else + if(!newloc.Enter(src)) + return if(SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_MOVE, newloc) & COMPONENT_MOVABLE_BLOCK_PRE_MOVE) return diff --git a/code/game/communications.dm b/code/game/communications.dm index 52fd02efd349..b6c606f0a5c5 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -66,26 +66,27 @@ GLOBAL_LIST_EMPTY(all_radios) /proc/add_radio(obj/item/radio, freq) - if(!freq || !radio) + if(!freq || QDELETED(radio)) return if(!GLOB.all_radios["[freq]"]) GLOB.all_radios["[freq]"] = list(radio) return freq GLOB.all_radios["[freq]"] |= radio + list_clear_nulls(GLOB.all_radios["[freq]"]) // sanity check, because oh god how does this happen return freq /proc/remove_radio(obj/item/radio, freq) - if(!freq || !radio) + if(!freq || QDELETED(radio)) return if(!GLOB.all_radios["[freq]"]) return - GLOB.all_radios["[freq]"] -= radio /proc/remove_radio_all(obj/item/radio) for(var/freq in GLOB.all_radios) GLOB.all_radios["[freq]"] -= radio + list_clear_nulls(GLOB.all_radios["[freq]"]) // For information on what objects or departments use what frequencies, // see __DEFINES/radio.dm. Mappers may also select additional frequencies for diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index bec2556aa55a..55ef35401204 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -239,19 +239,24 @@ FAN HUDs! For identifying other fans on-sight. /mob/living/carbon/human/proc/fan_hud_set_fandom() var/image/holder = hud_list[FAN_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + var/icon/hud_icon = icon(icon, icon_state, dir) + holder.pixel_y = hud_icon.Height() - world.icon_size holder.icon_state = "hudfan_no" - var/obj/item/clothing/under/U = get_item_by_slot(ITEM_SLOT_ICLOTHING) - if(!U) + + var/obj/item/clothing/under/undershirt = w_uniform + if(!istype(undershirt)) set_hud_image_inactive(FAN_HUD) return - if(istype(U.attached_accessory, /obj/item/clothing/accessory/mime_fan_pin)) - holder.icon_state = "mime_fan_pin" + for(var/accessory in undershirt.attached_accessories) + if(istype(accessory, /obj/item/clothing/accessory/mime_fan_pin)) + holder.icon_state = "mime_fan_pin" + break + + if(istype(accessory, /obj/item/clothing/accessory/clown_enjoyer_pin)) + holder.icon_state = "clown_enjoyer_pin" + break - else if(istype(U.attached_accessory, /obj/item/clothing/accessory/clown_enjoyer_pin)) - holder.icon_state = "clown_enjoyer_pin" set_hud_image_active(FAN_HUD) return diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index b8556ad6df0b..80d75a0d636b 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -344,11 +344,11 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) print_command_report(., "[command_name()] Status Summary", announce=FALSE) if(greenshift) - priority_announce("Thanks to the tireless efforts of our security and intelligence divisions, there are currently no credible threats to [station_name()]. All station construction projects have been authorized. Have a secure shift!", "Security Report", SSstation.announcer.get_rand_report_sound()) + priority_announce("Thanks to the tireless efforts of our security and intelligence divisions, there are currently no credible threats to [station_name()]. All station construction projects have been authorized. Have a secure shift!", "Security Report", SSstation.announcer.get_rand_report_sound(), color_override = "green") else - priority_announce("A summary has been copied and printed to all communications consoles.", "Security level elevated.", ANNOUNCER_INTERCEPT) if(SSsecurity_level.get_current_level_as_number() < SEC_LEVEL_BLUE) - SSsecurity_level.set_level(SEC_LEVEL_BLUE) + SSsecurity_level.set_level(SEC_LEVEL_BLUE, announce = FALSE) + priority_announce("[SSsecurity_level.current_security_level.elevating_to_announcement]\n\nA summary has been copied and printed to all communications consoles.", "Security level elevated.", ANNOUNCER_INTERCEPT, color_override = SSsecurity_level.current_security_level.announcement_color) /datum/game_mode/dynamic/proc/show_threatlog(mob/admin) if(!SSticker.HasRoundStarted()) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index d9f9c60cacaa..a5773802eb29 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -125,7 +125,7 @@ return mode.log_dynamic_and_announce("Polling [possible_volunteers.len] players to apply for the [name] ruleset.") - candidates = poll_ghost_candidates("The mode is looking for volunteers to become [antag_flag] for [name]", antag_flag_override, antag_flag || antag_flag_override, poll_time = 300) + candidates = SSpolling.poll_ghost_candidates("Looking for volunteers to become [antag_flag] for [name]", check_jobban = antag_flag_override, role = antag_flag || antag_flag_override, poll_time = 30 SECONDS, pic_source = /obj/structure/sign/poster/contraband/syndicate_recruitment, role_name_text = antag_flag) if(!candidates || candidates.len <= 0) mode.log_dynamic_and_announce("The ruleset [name] received no applications.") diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index fd9ea7e480d7..62e7d3fd8265 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -202,10 +202,10 @@ /datum/game_mode/proc/generate_station_goals(greenshift) var/goal_budget = greenshift ? INFINITY : CONFIG_GET(number/station_goal_budget) var/list/possible = subtypesof(/datum/station_goal) + // Remove all goals that require space if space is not present if(SSmapping.is_planetary()) - for(var/datum/station_goal/goal in possible) - if(goal.requires_space) - ///Removes all goals that require space if space is not present + for(var/datum/station_goal/goal as anything in possible) + if(initial(goal.requires_space)) possible -= goal var/goal_weights = 0 while(possible.len && goal_weights < goal_budget) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 469e17ce22f9..60183aa2543e 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -96,6 +96,10 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/proc/check_completion() return completed +/// Provides a string describing what a good job you did or did not do +/datum/objective/proc/get_roundend_success_suffix() + return check_completion() ? span_greentext("Success!") : span_redtext("Fail.") + /datum/objective/proc/is_unique_objective(possible_target, dupe_search_range) if(!islist(dupe_search_range)) stack_trace("Non-list passed as duplicate objective search range") @@ -580,12 +584,6 @@ GLOBAL_LIST_EMPTY(possible_items) /datum/objective/steal/get_target() return steal_target -/datum/objective/steal/New() - ..() - if(!GLOB.possible_items.len)//Only need to fill the list when it's needed. - for(var/I in subtypesof(/datum/objective_item/steal)) - new I - /datum/objective/steal/find_target(dupe_search_range, list/blacklist) var/list/datum/mind/owners = get_owners() if(!dupe_search_range) @@ -946,6 +944,9 @@ GLOBAL_LIST_EMPTY(possible_items) if(expl) explanation_text = expl +/datum/objective/custom/get_roundend_success_suffix() + return "" // Just print the objective with no success/fail evaluation, as it has no mechanical backing + //Ideally this would be all of them but laziness and unusual subtypes /proc/generate_admin_objective_list() GLOB.admin_objective_list = list() diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 3123bc4749f9..24548d01a40a 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -91,7 +91,7 @@ verb_say = "beeps" verb_yell = "blares" pressure_resistance = 15 - pass_flags_self = PASSMACHINE + pass_flags_self = PASSMACHINE | LETPASSCLICKS max_integrity = 200 layer = BELOW_OBJ_LAYER //keeps shit coming out of the machine from ending up underneath it. flags_ricochet = RICOCHET_HARD @@ -291,7 +291,6 @@ /obj/machinery/proc/process_atmos()//If you dont use process why are you here return PROCESS_KILL - ///Called when we want to change the value of the machine_stat variable. Holds bitflags. /obj/machinery/proc/set_machine_stat(new_value) if(new_value == machine_stat) @@ -910,46 +909,6 @@ to_chat(user, span_notice("You rotate [src].")) return TRUE -/obj/proc/can_be_unfasten_wrench(mob/user, silent) //if we can unwrench this object; returns SUCCESSFUL_UNFASTEN and FAILED_UNFASTEN, which are both TRUE, or CANT_UNFASTEN, which isn't. - if(!(isfloorturf(loc) || isindestructiblefloor(loc)) && !anchored) - to_chat(user, span_warning("[src] needs to be on the floor to be secured!")) - return FAILED_UNFASTEN - return SUCCESSFUL_UNFASTEN - -/obj/proc/default_unfasten_wrench(mob/user, obj/item/wrench, time = 20) //try to unwrench an object in a WONDERFUL DYNAMIC WAY - if((flags_1 & NODECONSTRUCT_1) || wrench.tool_behaviour != TOOL_WRENCH) - return CANT_UNFASTEN - - var/turf/ground = get_turf(src) - if(!anchored && ground.is_blocked_turf(exclude_mobs = TRUE, source_atom = src)) - to_chat(user, span_notice("You fail to secure [src].")) - return CANT_UNFASTEN - var/can_be_unfasten = can_be_unfasten_wrench(user) - if(!can_be_unfasten || can_be_unfasten == FAILED_UNFASTEN) - return can_be_unfasten - if(time) - to_chat(user, span_notice("You begin [anchored ? "un" : ""]securing [src]...")) - wrench.play_tool_sound(src, 50) - var/prev_anchored = anchored - //as long as we're the same anchored state and we're either on a floor or are anchored, toggle our anchored state - if(!wrench.use_tool(src, user, time, extra_checks = CALLBACK(src, PROC_REF(unfasten_wrench_check), prev_anchored, user))) - return FAILED_UNFASTEN - if(!anchored && ground.is_blocked_turf(exclude_mobs = TRUE, source_atom = src)) - to_chat(user, span_notice("You fail to secure [src].")) - return CANT_UNFASTEN - to_chat(user, span_notice("You [anchored ? "un" : ""]secure [src].")) - set_anchored(!anchored) - playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) - SEND_SIGNAL(src, COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH, anchored) - return SUCCESSFUL_UNFASTEN - -/obj/proc/unfasten_wrench_check(prev_anchored, mob/user) //for the do_after, this checks if unfastening conditions are still valid - if(anchored != prev_anchored) - return FALSE - if(can_be_unfasten_wrench(user, TRUE) != SUCCESSFUL_UNFASTEN) //if we aren't explicitly successful, cancel the fuck out - return FALSE - return TRUE - /obj/machinery/proc/exchange_parts(mob/user, obj/item/storage/part_replacer/replacer_tool) if(!istype(replacer_tool)) return FALSE diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 397f85a2f95d..0a983d97d08f 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -18,7 +18,6 @@ var/status = TRUE var/start_active = FALSE //If it ignores the random chance to start broken on round start var/invuln = null - var/obj/item/camera_bug/bug = null var/datum/weakref/assembly_ref = null var/area/myarea = null @@ -129,12 +128,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) LAZYREMOVE(myarea.cameras, src) QDEL_NULL(alarm_manager) QDEL_NULL(assembly_ref) - if(bug) - bug.bugged_cameras -= c_tag - if(bug.current == src) - bug.current = null - bug = null - QDEL_NULL(last_shown_paper) return ..() @@ -202,6 +195,13 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) return FALSE return ..() +/obj/machinery/camera/attack_ai(mob/living/silicon/ai/user) + if (!istype(user)) + return + if (!can_use()) + return + user.switchCamera(src) + /obj/machinery/camera/proc/setViewRange(num = 7) src.view_range = num GLOB.cameranet.updateVisibility(src, 0) @@ -415,21 +415,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) to_chat(potential_viewer, "[span_name(user)] holds \a [item_name] up to your camera...") return - - if(istype(attacking_item, /obj/item/camera_bug)) - if(!can_use()) - to_chat(user, span_notice("Camera non-functional.")) - return - if(bug) - to_chat(user, span_notice("Camera bug removed.")) - bug.bugged_cameras -= src.c_tag - bug = null - else - to_chat(user, span_notice("Camera bugged.")) - bug = attacking_item - bug.bugged_cameras[src.c_tag] = WEAKREF(src) - return - return ..() diff --git a/code/game/machinery/camera/trackable.dm b/code/game/machinery/camera/trackable.dm new file mode 100644 index 000000000000..967b68e774b7 --- /dev/null +++ b/code/game/machinery/camera/trackable.dm @@ -0,0 +1,200 @@ +///How many ticks to try to find a target before giving up. +#define CAMERA_TICK_LIMIT 10 + +/datum/trackable + ///Reference to the atom that owns us, used for tracking. + var/atom/tracking_holder + + ///What mob are we currently tracking, if any + var/mob/living/tracked_mob + ///If we're currently rechecking our target's trackability in hopes of something changing + var/rechecking = FALSE + ///How many times we've failed to locate our target. + var/cameraticks = 0 + + ///List of all names that can be tracked. + VAR_PRIVATE/list/names = list() + ///List of all namecounts for mobs with the exact same name, just in-case. + VAR_PRIVATE/list/namecounts = list() + ///List of all humans trackable by cameras. + VAR_PRIVATE/static/list/humans = list() + ///List of all non-humans trackable by cameras, split so humans take priority. + VAR_PRIVATE/static/list/others = list() + +/datum/trackable/New(atom/source) + . = ..() + tracking_holder = source + RegisterSignal(tracking_holder, COMSIG_MOB_RESET_PERSPECTIVE, PROC_REF(perspective_reset)) + +/datum/trackable/Destroy(force, ...) + tracking_holder = null + tracked_mob = null + STOP_PROCESSING(SSprocessing, src) + return ..() + +///Generates a list of trackable people by name, returning a list of Humans + Non-Humans that can be tracked. +/datum/trackable/proc/find_trackable_mobs() + RETURN_TYPE(/list) + + names.Cut() + namecounts.Cut() + + humans.Cut() + others.Cut() + + for(var/mob/living/living_mob as anything in GLOB.mob_living_list) + if(!living_mob.can_track(usr)) + continue + + var/name = living_mob.name + while(name in names) + namecounts[name]++ + name = "[name] ([namecounts[name]])" + names.Add(name) + namecounts[name] = 1 + + if(ishuman(living_mob)) + humans[name] = WEAKREF(living_mob) + else + others[name] = WEAKREF(living_mob) + + var/list/targets = sort_list(humans) + sort_list(others) + return targets + +/// Takes a mob to track, resets our state and begins trying to follow it +/// Best we can at least +/datum/trackable/proc/set_tracked_mob(mob/living/track) + set_rechecking(FALSE) + if(tracked_mob) + UnregisterSignal(tracked_mob, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_UPDATE_GLIDE_SIZE)) + if(track && !isliving(track)) + tracked_mob = null + return + tracked_mob = track + if(tracked_mob) + RegisterSignal(tracked_mob, COMSIG_QDELETING, PROC_REF(target_deleted)) + RegisterSignal(tracked_mob, COMSIG_MOVABLE_MOVED, PROC_REF(target_moved)) + RegisterSignal(tracked_mob, COMSIG_MOVABLE_UPDATE_GLIDE_SIZE, PROC_REF(glide_size_changed)) + attempt_track() + +/datum/trackable/proc/target_deleted(datum/source) + SIGNAL_HANDLER + reset_tracking() + +/datum/trackable/proc/perspective_reset(atom/source) + SIGNAL_HANDLER + reset_tracking() + +/datum/trackable/proc/target_moved(datum/source) + SIGNAL_HANDLER + if(attempt_track()) + return + set_rechecking(TRUE) + +/// Controls if we're processing to recheck the conditions that prevent tracking or not +/datum/trackable/proc/set_rechecking(should_check) + if(should_check) + START_PROCESSING(SSprocessing, src) + cameraticks = initial(cameraticks) + rechecking = TRUE + else + STOP_PROCESSING(SSprocessing, src) + rechecking = FALSE + +/datum/trackable/process() + if(!rechecking) + return PROCESS_KILL + + if(attempt_track()) + set_rechecking(FALSE) + return + + if(cameraticks < CAMERA_TICK_LIMIT) + if(!cameraticks) + to_chat(tracking_holder, span_warning("Target is not near any active cameras. Attempting to reacquire...")) + cameraticks++ + return + + to_chat(tracking_holder, span_warning("Unable to reacquire, cancelling track...")) + reset_tracking() + +/// Tries to track onto our target mob. Returns true if it succeeds, false otherwise +/datum/trackable/proc/attempt_track() + if(!tracked_mob) + reset_tracking() + return FALSE + + if(!tracked_mob.can_track(tracking_holder)) + return FALSE + // In case we've been checking + set_rechecking(FALSE) + SEND_SIGNAL(src, COMSIG_TRACKABLE_TRACKING_TARGET, tracked_mob) + return TRUE + +/datum/trackable/proc/glide_size_changed(datum/source, new_glide_size) + SIGNAL_HANDLER + SEND_SIGNAL(src, COMSIG_TRACKABLE_GLIDE_CHANGED, tracked_mob, new_glide_size) + +/** + * reset_tracking + * + * Resets our tracking + */ +/datum/trackable/proc/reset_tracking() + set_tracked_mob(null) + +/** + * track_input + * + * Sets a mob as being tracked, will give a tgui input list to find targets to track. + * Args: + * tracker - The person trying to track, used for feedback messages. This is not the same as tracking_holder + */ +/datum/trackable/proc/track_input(mob/living/tracker) + if(!tracker || tracker.stat == DEAD) + return + + var/target_name = tgui_input_list(tracker, "Select a target", "Tracking", find_trackable_mobs()) + if(!target_name || isnull(target_name)) + return + var/datum/weakref/mob_ref = isnull(humans[target_name]) ? others[target_name] : humans[target_name] + if(isnull(mob_ref)) + to_chat(tracker, span_notice("Target is not on or near any active cameras. Tracking failed.")) + return + set_tracked_mob(mob_ref.resolve()) + +/** + * track_name + * + * Sets a mob as being tracked, will track the passed in target name's target + * Args: + * tracker - The person trying to track, used for feedback messages. This is not the same as tracking_holder + * tracked_mob_name - The person being tracked. + */ +/datum/trackable/proc/track_name(mob/living/tracker, tracked_mob_name) + if(!tracker || tracker.stat == DEAD) + return + + find_trackable_mobs() //this is in case the tracked mob is newly/no-longer in camera field of view. + var/datum/weakref/mob_ref = isnull(humans[tracked_mob_name]) ? others[tracked_mob_name] : humans[tracked_mob_name] + if(isnull(mob_ref)) + to_chat(tracker, span_notice("Target is not on or near any active cameras. Tracking failed.")) + return + to_chat(tracker, span_notice("Now tracking [tracked_mob_name] on camera.")) + set_tracked_mob(mob_ref.resolve()) + +/** + * track_mob + * + * Sets a mob as being tracked, will track the passed in target + * Args: + * tracker - The person trying to track, used for feedback messages. This is not the same as tracking_holder + * tracked - The person being tracked. + */ +/datum/trackable/proc/track_mob(mob/living/tracker, mob/living/tracked) + if(!tracker || tracker.stat == DEAD) + return + // Need to make sure the tracked mob is in our list + track_name(tracked.name) + +#undef CAMERA_TICK_LIMIT diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm deleted file mode 100644 index 1228930a7a2e..000000000000 --- a/code/game/machinery/camera/tracking.dm +++ /dev/null @@ -1,158 +0,0 @@ -/mob/living/silicon/ai/proc/get_camera_list() - var/list/L = list() - for (var/obj/machinery/camera/C as anything in GLOB.cameranet.cameras) - L.Add(C) - - camera_sort(L) - - var/list/T = list() - - for (var/obj/machinery/camera/C in L) - var/list/tempnetwork = C.network&src.network - if (length(tempnetwork)) - T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C - - return T - -/mob/living/silicon/ai/proc/show_camera_list() - var/list/cameras = get_camera_list() - var/camera = tgui_input_list(src, "Choose which camera you want to view", "Cameras", cameras) - if(isnull(camera)) - return - if(isnull(cameras[camera])) - return - switchCamera(cameras[camera]) - -/datum/trackable - var/initialized = FALSE - var/list/names = list() - var/list/namecounts = list() - var/list/humans = list() - var/list/others = list() - -/mob/living/silicon/ai/proc/trackable_mobs() - track.initialized = TRUE - track.names.Cut() - track.namecounts.Cut() - track.humans.Cut() - track.others.Cut() - - if(usr.stat == DEAD) - return list() - - for(var/i in GLOB.mob_living_list) - var/mob/living/L = i - if(!L.can_track(usr)) - continue - - var/name = L.name - while(name in track.names) - track.namecounts[name]++ - name = text("[] ([])", name, track.namecounts[name]) - track.names.Add(name) - track.namecounts[name] = 1 - - if(ishuman(L)) - track.humans[name] = WEAKREF(L) - else - track.others[name] = WEAKREF(L) - - var/list/targets = sort_list(track.humans) + sort_list(track.others) - - return targets - -/mob/living/silicon/ai/verb/ai_camera_track(target_name in trackable_mobs()) - set name = "track" - set hidden = TRUE //Don't display it on the verb lists. This verb exists purely so you can type "track Oldman Robustin" and follow his ass - - if(!target_name) - return - - if(!track.initialized) - trackable_mobs() - - var/datum/weakref/target = (isnull(track.humans[target_name]) ? track.others[target_name] : track.humans[target_name]) - - ai_actual_track(target?.resolve()) - -/mob/living/silicon/ai/proc/ai_actual_track(mob/living/target) - if(!istype(target)) - return - var/mob/living/silicon/ai/U = usr - - U.cameraFollow = target - U.tracking = 1 - - if(!target || !target.can_track(usr)) - to_chat(U, span_warning("Target is not near any active cameras.")) - U.cameraFollow = null - return - - to_chat(U, span_notice("Now tracking [target.get_visible_name()] on camera.")) - - INVOKE_ASYNC(src, PROC_REF(do_track), target, U) - -/mob/living/silicon/ai/proc/do_track(mob/living/target, mob/living/silicon/ai/U) - var/cameraticks = 0 - - while(U.cameraFollow == target) - if(U.cameraFollow == null) - return - - if(!target.can_track(usr)) - U.tracking = TRUE - if(!cameraticks) - to_chat(U, span_warning("Target is not near any active cameras. Attempting to reacquire...")) - cameraticks++ - if(cameraticks > 9) - U.cameraFollow = null - to_chat(U, span_warning("Unable to reacquire, cancelling track...")) - tracking = FALSE - return - else - sleep(1 SECONDS) - continue - - else - cameraticks = 0 - U.tracking = FALSE - - if(U.eyeobj) - U.eyeobj.setLoc(get_turf(target)) - - else - view_core() - U.cameraFollow = null - return - - sleep(1 SECONDS) - -/proc/near_camera(mob/living/M) - if (!isturf(M.loc)) - return FALSE - if(issilicon(M)) - var/mob/living/silicon/S = M - if((QDELETED(S.builtInCamera) || !S.builtInCamera.can_use()) && !GLOB.cameranet.checkCameraVis(M)) - return FALSE - else if(!GLOB.cameranet.checkCameraVis(M)) - return FALSE - return TRUE - -/obj/machinery/camera/attack_ai(mob/living/silicon/ai/user) - if (!istype(user)) - return - if (!can_use()) - return - user.switchCamera(src) - -/proc/camera_sort(list/L) - var/obj/machinery/camera/a - var/obj/machinery/camera/b - - for (var/i = length(L), i > 0, i--) - for (var/j = 1 to i - 1) - a = L[j] - b = L[j + 1] - if (sorttext(a.c_tag, b.c_tag) < 0) - L.Swap(j, j + 1) - return L diff --git a/code/game/machinery/computer/accounting.dm b/code/game/machinery/computer/accounting.dm index c38ea186f620..58f9f48d6df0 100644 --- a/code/game/machinery/computer/accounting.dm +++ b/code/game/machinery/computer/accounting.dm @@ -21,6 +21,8 @@ for(var/current_account as anything in SSeconomy.bank_accounts_by_id) var/datum/bank_account/current_bank_account = SSeconomy.bank_accounts_by_id[current_account] + if(!current_bank_account.account_job || !current_bank_account) + continue player_accounts += list(list( "name" = current_bank_account.account_holder, "job" = current_bank_account.account_job.title, diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index e8fc202feede..54e622fb12d3 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -82,24 +82,26 @@ /obj/machinery/computer/security/ui_data() var/list/data = list() - data["network"] = network data["activeCamera"] = null if(active_camera) data["activeCamera"] = list( name = active_camera.c_tag, + ref = REF(active_camera), status = active_camera.status, ) return data /obj/machinery/computer/security/ui_static_data() var/list/data = list() + data["network"] = network data["mapRef"] = cam_screen.assigned_map - var/list/cameras = get_available_cameras() + var/list/cameras = get_camera_list(network) data["cameras"] = list() for(var/i in cameras) var/obj/machinery/camera/C = cameras[i] data["cameras"] += list(list( name = C.c_tag, + ref = REF(C), )) return data @@ -110,13 +112,11 @@ return if(action == "switch_camera") - var/c_tag = params["name"] - var/list/cameras = get_available_cameras() - var/obj/machinery/camera/selected_camera = cameras[c_tag] + var/obj/machinery/camera/selected_camera = locate(params["camera"]) in GLOB.cameranet.cameras active_camera = selected_camera playsound(src, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) - if(!selected_camera) + if(isnull(active_camera)) return TRUE update_active_camera_screen() @@ -178,28 +178,6 @@ cam_background.icon_state = "scanline2" cam_background.fill_rect(1, 1, DEFAULT_MAP_SIZE, DEFAULT_MAP_SIZE) -// Returns the list of cameras accessible from this computer -/obj/machinery/computer/security/proc/get_available_cameras() - var/list/L = list() - for (var/obj/machinery/camera/cam as anything in GLOB.cameranet.cameras) - //Get the camera's turf in case it's inside something like a borg - var/turf/camera_turf = get_turf(cam) - if((is_away_level(z) || is_away_level(camera_turf.z)) && (camera_turf.z != z))//if on away mission, can only receive feed from same z_level cameras - continue - L.Add(cam) - var/list/D = list() - for(var/obj/machinery/camera/cam in L) - if(!cam.network) - stack_trace("Camera in a cameranet has no camera network") - continue - if(!(islist(cam.network))) - stack_trace("Camera in a cameranet has a non-list camera network") - continue - var/list/tempnetwork = cam.network & network - if(tempnetwork.len) - D["[cam.c_tag]"] = cam - return D - // SECURITY MONITORS /obj/machinery/computer/security/wooden_tv diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 562a0f0cba77..d46efbe39a47 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -881,8 +881,8 @@ continue shake_camera(crew_member, 15, 1) - var/datum/game_mode/dynamic/dynamic = SSticker.mode - dynamic.unfavorable_situation() + SSgamemode.point_gain_multipliers[EVENT_TRACK_ROLESET]++ + if(HACK_SLEEPER) // Trigger one or multiple sleeper agents with the crew (or for latejoining crew) var/datum/dynamic_ruleset/midround/sleeper_agent_type = /datum/dynamic_ruleset/midround/from_living/autotraitor diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 1560d1f17228..e4419226aea2 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -277,7 +277,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) return results -/datum/crewmonitor/ui_act(action,params) +/datum/crewmonitor/ui_act(action, params) . = ..() if(.) return @@ -286,7 +286,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) var/mob/living/silicon/ai/AI = usr if(!istype(AI)) return - AI.ai_camera_track(params["name"]) + AI.ai_tracking_tool.track_name(AI, params["name"]) #undef SENSORS_UPDATE_PERIOD #undef UNKNOWN_JOB_ID diff --git a/code/game/machinery/computer/operating_computer.dm b/code/game/machinery/computer/operating_computer.dm index f778f08c3ddf..093c96bf57ec 100644 --- a/code/game/machinery/computer/operating_computer.dm +++ b/code/game/machinery/computer/operating_computer.dm @@ -25,12 +25,15 @@ /obj/machinery/computer/operating/LateInitialize() . = ..() - + var/static/list/dissection_signals = list( + COMSIG_OPERATING_COMPUTER_DISSECTION_COMPLETE = TYPE_PROC_REF(/datum/component/experiment_handler, try_run_dissection_experiment) + ) experiment_handler = AddComponent( /datum/component/experiment_handler, \ allowed_experiments = list(/datum/experiment/dissection), \ config_flags = EXPERIMENT_CONFIG_ALWAYS_ACTIVE, \ config_mode = EXPERIMENT_CONFIG_ALTCLICK, \ + experiment_signals = dissection_signals, \ ) /obj/machinery/computer/operating/Destroy() diff --git a/code/game/machinery/computer/orders/order_items/cook/order_milk_eggs.dm b/code/game/machinery/computer/orders/order_items/cook/order_milk_eggs.dm index d3fb31fec302..12ceaee8d3f0 100644 --- a/code/game/machinery/computer/orders/order_items/cook/order_milk_eggs.dm +++ b/code/game/machinery/computer/orders/order_items/cook/order_milk_eggs.dm @@ -31,6 +31,11 @@ item_path = /obj/item/food/fishmeat cost_per_order = 12 +/datum/orderable_item/milk_eggs/octopus + name = "Octopus Tentacle" + item_path = /obj/item/food/fishmeat/octopus + cost_per_order = 12 + /datum/orderable_item/milk_eggs/spider_eggs name = "Spider Eggs" item_path = /obj/item/food/spidereggs @@ -65,6 +70,16 @@ item_path = /obj/item/food/canned/pine_nuts cost_per_order = 20 +/datum/orderable_item/milk_eggs/canned_squid_ink + name = "Canned Squid Ink" + item_path = /obj/item/food/canned/squid_ink + cost_per_order = 20 + +/datum/orderable_item/milk_eggs/chap + name = "Can of CHAP" + item_path = /obj/item/food/canned/chap + cost_per_order = 20 + /datum/orderable_item/milk_eggs/ready_donk name = "Ready-Donk Meal: Bachelor Chow" item_path = /obj/item/food/ready_donk @@ -80,6 +95,16 @@ item_path = /obj/item/food/ready_donk/donkhiladas cost_per_order = 40 +/datum/orderable_item/milk_eggs/ready_donk_nachos + name = "Ready-Donk Meal: Donk Sol Series Boritos Nachos Grandes" + item_path = /obj/item/food/ready_donk/nachos_grandes + cost_per_order = 40 + +/datum/orderable_item/milk_eggs/ready_donk_orange + name = "Ready-Donk Meal: Donk-range Chicken" + item_path = /obj/item/food/ready_donk/donkrange_chicken + cost_per_order = 40 + /datum/orderable_item/milk_eggs/tiziran_goods name = "Tiziran Farm-Fresh Pack" item_path = /obj/item/storage/box/tiziran_goods diff --git a/code/game/machinery/computer/orders/order_items/cook/order_reagents.dm b/code/game/machinery/computer/orders/order_items/cook/order_reagents.dm index db9d20a676ff..584403a1195f 100644 --- a/code/game/machinery/computer/orders/order_items/cook/order_reagents.dm +++ b/code/game/machinery/computer/orders/order_items/cook/order_reagents.dm @@ -65,3 +65,33 @@ name = "Cherry Jelly" item_path = /obj/item/reagent_containers/condiment/cherryjelly cost_per_order = 30 + +/datum/orderable_item/reagents/worcestershire + name = "Worcestershire Sauce" + item_path = /obj/item/reagent_containers/condiment/worcestershire + cost_per_order = 30 + +/datum/orderable_item/reagents/red_bay + name = "Red Bay Seasoning" + item_path = /obj/item/reagent_containers/condiment/red_bay + cost_per_order = 30 + +/datum/orderable_item/reagents/curry_powder + name = "Curry Powder" + item_path = /obj/item/reagent_containers/condiment/curry_powder + cost_per_order = 30 + +/datum/orderable_item/reagents/dashi_concentrate + name = "Dashi Concentrate" + item_path = /obj/item/reagent_containers/condiment/dashi_concentrate + cost_per_order = 30 + +/datum/orderable_item/reagents/coconut_milk + name = "Coconut Milk" + item_path = /obj/item/reagent_containers/condiment/coconut_milk + cost_per_order = 30 + +/datum/orderable_item/reagents/grounding_solution + name = "Grounding Solution" + item_path = /obj/item/reagent_containers/condiment/grounding_solution + cost_per_order = 30 diff --git a/code/game/machinery/computer/orders/order_items/cook/order_veggies.dm b/code/game/machinery/computer/orders/order_items/cook/order_veggies.dm index 8b0f9d71a4c2..996972c61d25 100644 --- a/code/game/machinery/computer/orders/order_items/cook/order_veggies.dm +++ b/code/game/machinery/computer/orders/order_items/cook/order_veggies.dm @@ -84,3 +84,8 @@ name = "Jar of pickles" item_path = /obj/item/storage/fancy/pickles_jar cost_per_order = 60 + +/datum/orderable_item/veggies/pickled_voltvine + name = "Pickled Voltvine" + item_path = /obj/item/food/pickled_voltvine + cost_per_order = 5 diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index f3c7eac92e6c..77b7cccc35fc 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -129,6 +129,7 @@ /obj/structure/barricade/sandbags/Initialize(mapload) . = ..() AddElement(/datum/element/climbable) + AddElement(/datum/element/elevation, pixel_shift = 12) /obj/structure/barricade/security name = "security barrier" diff --git a/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm b/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm index 3af357213b7b..ff9a96b7f397 100644 --- a/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm @@ -105,26 +105,22 @@ /obj/item/organ/internal/heart/rat/on_insert(mob/living/carbon/receiver) . = ..() - if(!. || !ishuman(receiver)) + if(!ishuman(receiver)) return var/mob/living/carbon/human/human_receiver = receiver - if(!human_receiver.can_mutate()) - return - human_receiver.dna.add_mutation(/datum/mutation/human/dwarfism) + if(human_receiver.can_mutate()) + human_receiver.dna.add_mutation(/datum/mutation/human/dwarfism) //but 1.5 damage - if(human_receiver.physiology) - human_receiver.physiology.damage_resistance -= 50 + human_receiver.physiology?.damage_resistance -= 50 /obj/item/organ/internal/heart/rat/on_remove(mob/living/carbon/heartless, special) . = ..() if(!ishuman(heartless)) return var/mob/living/carbon/human/human_heartless = heartless - if(!human_heartless.can_mutate()) - return - human_heartless.dna.remove_mutation(/datum/mutation/human/dwarfism) - if(human_heartless.physiology) - human_heartless.physiology.damage_resistance += 50 + if(human_heartless.can_mutate()) + human_heartless.dna.remove_mutation(/datum/mutation/human/dwarfism) + human_heartless.physiology?.damage_resistance += 50 /// you occasionally squeak, and have some rat related verbal tics /obj/item/organ/internal/tongue/rat diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index e358297834c4..df8eb2e031f4 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -277,6 +277,7 @@ /obj/machinery/door/firedoor/proc/adjacent_change(turf/changed, path, list/new_baseturfs, flags, list/post_change_callbacks) SIGNAL_HANDLER post_change_callbacks += CALLBACK(src, PROC_REF(CalculateAffectingAreas)) + post_change_callbacks += CALLBACK(src, PROC_REF(process_results), changed) //check the atmosphere of the changed turf so we don't hold onto alarm if a wall is built /obj/machinery/door/firedoor/proc/check_atmos(turf/checked_turf) var/datum/gas_mixture/environment = checked_turf.return_air() diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index c3e2cc89b02e..f5a18dc57105 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -46,7 +46,7 @@ return if (deconstruction != BLASTDOOR_FINISHED) return - var/change_id = tgui_input_number(user, "Set the door controllers ID", "Door Controller ID", id, 100) + var/change_id = tgui_input_text(user, "Set the door controllers ID", "Door Controller ID", id, 100) if(!change_id || QDELETED(usr) || QDELETED(src) || !usr.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return id = change_id diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index e691c5d9fc1b..a7ac997db2f5 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -10,6 +10,8 @@ #define MAX_IV_TRANSFER_RATE 5 ///Default IV drip transfer rate in units per second #define DEFAULT_IV_TRANSFER_RATE 5 +//Alert shown to mob the IV is still connected +#define ALERT_IV_CONNECTED "iv_connected" ///Universal IV that can drain blood or feed reagents over a period of time from or to a replaceable container /obj/machinery/iv_drip @@ -26,7 +28,7 @@ mouse_drag_pointer = MOUSE_ACTIVE_POINTER use_power = NO_POWER_USE ///What are we sticking our needle in? - var/atom/attached + var/mob/attached ///Are we donating or injecting? var/mode = IV_INJECTING ///The chemicals flow speed @@ -303,7 +305,7 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN ///called when an IV is attached -/obj/machinery/iv_drip/proc/attach_iv(atom/target, mob/user) +/obj/machinery/iv_drip/proc/attach_iv(mob/target, mob/user) if(isliving(target)) user.visible_message(span_warning("[usr] begins attaching [src] to [target]..."), span_warning("You begin attaching [src] to [target].")) if(!do_after(usr, 1 SECONDS, target)) @@ -314,6 +316,7 @@ var/datum/reagents/container = get_reagents() log_combat(usr, target, "attached", src, "containing: ([container.get_reagent_log_string()])") add_fingerprint(usr) + target.throw_alert(ALERT_IV_CONNECTED, /atom/movable/screen/alert/iv_connected) attached = target START_PROCESSING(SSmachines, src) update_appearance(UPDATE_ICON) @@ -324,6 +327,7 @@ /obj/machinery/iv_drip/proc/detach_iv() if(attached) visible_message(span_notice("[attached] is detached from [src].")) + attached.clear_alert(ALERT_IV_CONNECTED, /atom/movable/screen/alert/iv_connected) SEND_SIGNAL(src, COMSIG_IV_DETACH, attached) attached = null update_appearance(UPDATE_ICON) @@ -439,6 +443,11 @@ default_unfasten_wrench(user, tool) return TOOL_ACT_TOOLTYPE_SUCCESS +/atom/movable/screen/alert/iv_connected + name = "IV Connected" + desc = "You have an IV connected to your arm. Remember to remove it or drag the IV stand with you before moving, or else it will rip out!" + icon_state = ALERT_IV_CONNECTED + #undef IV_TAKING #undef IV_INJECTING @@ -446,3 +455,5 @@ #undef MAX_IV_TRANSFER_RATE #undef IV_TRANSFER_RATE_STEP + +#undef ALERT_IV_CONNECTED diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index 94c4b6590e42..a48c0a691512 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -334,7 +334,7 @@ pad.update_indicator() pad.closed = FALSE user.transferItemToLoc(src, pad, TRUE) - atom_storage.close_all() + atom_storage?.close_all() // monke edit: fix runtime /obj/item/storage/briefcase/launchpad/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/launchpad_remote)) diff --git a/code/game/machinery/medipen_refiller.dm b/code/game/machinery/medipen_refiller.dm index b5c97554865c..40d643a3ddeb 100644 --- a/code/game/machinery/medipen_refiller.dm +++ b/code/game/machinery/medipen_refiller.dm @@ -86,9 +86,9 @@ return ..() /obj/machinery/medipen_refiller/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) - to_chat(user, span_notice("You start furiously plunging [name].")) + user.balloon_alert_to_viewers("furiously plunging...", "plunging medipen refiller...") if(do_after(user, 30, target = src)) - to_chat(user, span_notice("You finish plunging the [name].")) + user.balloon_alert_to_viewers("finished plunging") reagents.expose(get_turf(src), TOUCH) reagents.clear_reagents() diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm index b60b563f7b2d..91673493dcf7 100644 --- a/code/game/machinery/stasis.dm +++ b/code/game/machinery/stasis.dm @@ -22,6 +22,7 @@ /obj/machinery/stasis/Initialize(mapload) . = ..() + AddElement(/datum/element/elevation, pixel_shift = 6) for(var/direction in GLOB.alldirs) op_computer = locate(/obj/machinery/computer/operating) in get_step(src, direction) if(op_computer) @@ -137,19 +138,21 @@ if(target == occupant) update_use_power(IDLE_POWER_USE) -/obj/machinery/stasis/post_buckle_mob(mob/living/L) - if(!can_be_occupant(L)) +/obj/machinery/stasis/post_buckle_mob(mob/living/buckled) + if(!can_be_occupant(buckled)) return - set_occupant(L) + set_occupant(buckled) if(stasis_running() && check_nap_violations()) - chill_out(L) + chill_out(buckled) update_appearance() + buckled.pixel_y -= 2 -/obj/machinery/stasis/post_unbuckle_mob(mob/living/L) - thaw_them(L) - if(L == occupant) +/obj/machinery/stasis/post_unbuckle_mob(mob/living/buckled) + thaw_them(buckled) + if(buckled == occupant) set_occupant(null) update_appearance() + buckled.pixel_y += 2 /obj/machinery/stasis/process() if(!(occupant && isliving(occupant) && check_nap_violations())) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 0a7bfd308ede..96dc1918e7df 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -1,11 +1,15 @@ // Status display -// (formerly Countdown timer display) -#define MAX_STATIC_WIDTH 25 -#define FONT_STYLE "5pt 'Small Fonts'" +#define MAX_STATIC_WIDTH 22 +#define FONT_STYLE "12pt 'TinyUnicode'" #define SCROLL_RATE (0.04 SECONDS) // time per pixel -#define LINE1_Y -8 -#define LINE2_Y -15 +#define SCROLL_PADDING 2 // how many pixels we chop to make a smooth loop +#define LINE1_X 1 +#define LINE1_Y -4 +#define LINE2_X 1 +#define LINE2_Y -11 +#define STATUS_DISPLAY_FONT_DATUM /datum/font/tiny_unicode/size_12pt + /// Status display which can show images and scrolling text. /obj/machinery/status_display name = "status display" @@ -124,14 +128,14 @@ * * message - the new message text. * Returns new /obj/effect/overlay/status_display_text or null if unchanged. */ -/obj/machinery/status_display/proc/update_message(obj/effect/overlay/status_display_text/overlay, line_y, message, x_offset) +/obj/machinery/status_display/proc/update_message(obj/effect/overlay/status_display_text/overlay, line_y, message, x_offset, line_pair) if(overlay && message == overlay.message) return null if(overlay) qdel(overlay) - var/obj/effect/overlay/status_display_text/new_status_display_text = new(src, line_y, message, text_color, header_text_color, x_offset) + var/obj/effect/overlay/status_display_text/new_status_display_text = new(src, line_y, message, text_color, header_text_color, x_offset, line_pair) // Draw our object visually "in front" of this display, taking advantage of sidemap new_status_display_text.pixel_y = -32 new_status_display_text.pixel_z = 32 @@ -149,7 +153,7 @@ return set_light(l_outer_range = 1.4, l_power = 0.7, l_color = LIGHT_COLOR_BLUE) // blue light -/obj/machinery/status_display/update_overlays() +/obj/machinery/status_display/update_overlays(updates) . = ..() if(machine_stat & (NOPOWER|BROKEN)) @@ -167,10 +171,18 @@ if(current_picture == AI_DISPLAY_DONT_GLOW) // If the thing's off, don't display the emissive yeah? return . else - var/overlay = update_message(message1_overlay, LINE1_Y, message1) + var/line1_metric + var/line2_metric + var/line_pair + var/datum/font/display_font = new STATUS_DISPLAY_FONT_DATUM() + line1_metric = display_font.get_metrics(message1) + line2_metric = display_font.get_metrics(message2) + line_pair = (line1_metric > line2_metric ? line1_metric : line2_metric) + + var/overlay = update_message(message1_overlay, LINE1_Y, message1, LINE1_X, line_pair) if(overlay) message1_overlay = overlay - overlay = update_message(message2_overlay, LINE2_Y, message2) + overlay = update_message(message2_overlay, LINE2_Y, message2, LINE2_X, line_pair) if(overlay) message2_overlay = overlay @@ -217,10 +229,10 @@ /obj/machinery/status_display/proc/display_shuttle_status(obj/docking_port/mobile/shuttle) if(!shuttle) // the shuttle is missing - no processing - set_messages("shutl?","") + set_messages("shutl","not in service") return PROCESS_KILL else if(shuttle.timer) - var/line1 = "- [shuttle.getModeStr()] -" + var/line1 = "<<< [shuttle.getModeStr()]" var/line2 = shuttle.getTimerStr() set_messages(line1, line2) @@ -245,39 +257,23 @@ // If the line is short enough to not marquee, and it matches this, it's a header. var/static/regex/header_regex = regex("^-.*-$") - /// Width of each character, including kerning gap afterwards. - /// We don't use rich text or anything fancy, so we can bake these values. - var/static/list/char_widths = list( - // ! " # $ % & ' ( ) * + , - . / - 1, 2, 3, 5, 4, 5, 5, 2, 3, 3, 3, 4, 2, 3, 2, 3, - // 0 1 2 3 4 5 6 7 8 9 : ; < = > ? - 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 3, 3, 3, 3, - // @ A B C D E F G H I J K L M N O - 7, 5, 5, 5, 5, 4, 4, 5, 5, 2, 4, 5, 4, 6, 5, 5, - // P Q R S T U V W X Y Z [ \ ] ^ _ - 5, 5, 5, 5, 4, 5, 4, 6, 4, 4, 4, 3, 3, 3, 4, 4, - // ` a b c d e f g h i j k l m n o - 3, 5, 5, 5, 5, 4, 4, 5, 5, 2, 4, 5, 4, 6, 5, 5, - // p q r s t u v w x y z { | } ~ - 5, 5, 5, 5, 4, 5, 4, 6, 4, 4, 4, 3, 2, 3, 4, - ) - -/obj/effect/overlay/status_display_text/Initialize(mapload, yoffset, line, text_color, header_text_color, xoffset = 0) +/obj/effect/overlay/status_display_text/Initialize(mapload, yoffset, line, text_color, header_text_color, xoffset = 0, line_pair) . = ..() maptext_y = yoffset message = line - var/line_width = measure_width(line) + var/datum/font/display_font = new STATUS_DISPLAY_FONT_DATUM() + var/line_width = display_font.get_metrics(line) if(line_width > MAX_STATIC_WIDTH) // Marquee text - var/marquee_message = "[line] - [line] - [line]" + var/marquee_message = "[line] [line] [line]" // Width of full content. Must of these is never revealed unless the user inputted a single character. - var/full_marquee_width = measure_width(marquee_message) + var/full_marquee_width = display_font.get_metrics("[marquee_message] ") // We loop after only this much has passed. - var/looping_marquee_width = measure_width("[line] - ") + var/looping_marquee_width = (display_font.get_metrics("[line] ]") - SCROLL_PADDING) maptext = generate_text(marquee_message, center = FALSE, text_color = text_color) maptext_width = full_marquee_width @@ -287,45 +283,24 @@ add_filter("mask", 1, alpha_mask_filter(icon = icon(icon, "outline"))) // Scroll. - var/time = looping_marquee_width * SCROLL_RATE - animate(src, maptext_x = -looping_marquee_width, time = time, loop = -1) - animate(maptext_x = 0, time = 0) + var/time = line_pair * SCROLL_RATE + animate(src, maptext_x = (-looping_marquee_width) + MAX_STATIC_WIDTH, time = time, loop = -1) + animate(maptext_x = MAX_STATIC_WIDTH, time = 0) else // Centered text var/color = header_regex.Find(line) ? header_text_color : text_color maptext = generate_text(line, center = TRUE, text_color = color) maptext_x = xoffset //Defaults to 0, this would be centered unless overided -/** - * A hyper-streamlined version of MeasureText that doesn't support different fonts, rich formatting, or multiline. - * But it also doesn't require a client. - * - * Returns the width in pixels - * - * Arguments: - * * text - the text to measure - */ -/obj/effect/overlay/status_display_text/proc/measure_width(text) - var/width = 0 - for(var/text_idx in 1 to length(text)) - var/ascii = text2ascii(text, text_idx) - if(!(ascii in 0x20 to 0x7E)) - // So we can't possibly runtime, even though the input should be in range already. - width += 3 - continue - width += char_widths[ascii - 0x1F] - - return width - /** * Generate the actual maptext. * Arguments: * * text - the text to display - * * center - center the text if TRUE, otherwise left-align + * * center - center the text if TRUE, otherwise right-align (the direction the text is coming from) * * text_color - the text color */ /obj/effect/overlay/status_display_text/proc/generate_text(text, center, text_color) - return {"
[text]
"} + return {"
[text]
"} /// Evac display which shows shuttle timer or message set by Command. /obj/machinery/status_display/evac @@ -412,8 +387,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/evac, 32) if(!SSshuttle.supply) // Might be missing in our first update on initialize before shuttles // have loaded. Cross our fingers that it will soon return. - line1 = "CARGO" - line2 = "shutl?" + line1 = "shutl" + line2 = "not in service" else if(SSshuttle.supply.mode == SHUTTLE_IDLE) if(is_station_level(SSshuttle.supply.z)) line1 = "CARGO" @@ -422,7 +397,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/evac, 32) line1 = "" line2 = "" else - line1 = "- [SSshuttle.supply.getModeStr()] -" + line1 = "<<< [SSshuttle.supply.getModeStr()]" line2 = SSshuttle.supply.getTimerStr() set_messages(line1, line2) @@ -602,5 +577,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/ai, 32) #undef MAX_STATIC_WIDTH #undef FONT_STYLE #undef SCROLL_RATE +#undef LINE1_X #undef LINE1_Y +#undef LINE2_X #undef LINE2_Y +#undef STATUS_DISPLAY_FONT_DATUM diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm index 50dc4af8c9ee..85f4418ede2d 100644 --- a/code/game/machinery/telecomms/broadcasting.dm +++ b/code/game/machinery/telecomms/broadcasting.dm @@ -177,6 +177,8 @@ radios += independent_radio for(var/obj/item/radio/called_radio as anything in radios) + if(QDELETED(called_radio)) + return called_radio.on_recieve_message() // From the list of radios, find all mobs who can hear those. @@ -198,10 +200,9 @@ var/rendered = virt.compose_message(virt, language, message, frequency, spans) for(var/atom/movable/hearer as anything in receive) - if(!hearer) + if(QDELETED(hearer)) stack_trace("null found in the hearers list returned by the spatial grid. this is bad") continue - hearer.Hear(rendered, virt, language, message, frequency, spans, message_mods) // This following recording is intended for research and feedback in the use of department radio channels diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm index b258a8d6f6ea..6096730c2908 100644 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ b/code/game/machinery/telecomms/computers/logbrowser.dm @@ -70,7 +70,7 @@ race = "Humanoid" // NT knows a lot about slimes, but not aliens. Can identify slimes - else if(ispath(mobtype, /mob/living/simple_animal/slime)) + else if(ispath(mobtype, /mob/living/basic/slime)) race = "Slime" // sometimes M gets deleted prematurely for AIs... just check the job diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm index 3d12932d99da..b862a6372b7a 100644 --- a/code/game/machinery/telecomms/computers/telemonitor.dm +++ b/code/game/machinery/telecomms/computers/telemonitor.dm @@ -98,6 +98,7 @@ screen = MAIN_VIEW return TRUE return TRUE + /obj/machinery/computer/telecomms/monitor/attackby() . = ..() updateUsrDialog() diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index 9e799b3595a0..420f43793f14 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -91,9 +91,6 @@ /obj/machinery/telecomms/message_server/Initialize(mapload) . = ..() - if (!decryptkey) - decryptkey = GenerateKey() - if (calibrating) calibrating += world.time say("Calibrating... Estimated wait time: [rand(3, 9)] minutes.") @@ -112,13 +109,6 @@ if(calibrating) . += span_warning("It's still calibrating.") -/obj/machinery/telecomms/message_server/proc/GenerateKey() - var/newKey - newKey += pick("the", "if", "of", "as", "in", "a", "you", "from", "to", "an", "too", "little", "snow", "dead", "drunk", "rosebud", "duck", "al", "le") - 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 - /obj/machinery/telecomms/message_server/process() . = ..() if(calibrating && calibrating <= world.time) @@ -153,6 +143,29 @@ if(calibrating) . += "message_server_calibrate" +// Preset messaging server +/obj/machinery/telecomms/message_server/preset + id = "Messaging Server" + network = "tcommsat" + autolinkers = list("messaging") + calibrating = 0 + +GLOBAL_VAR(preset_station_message_server_key) + +/obj/machinery/telecomms/message_server/preset/Initialize(mapload) + . = ..() + // Just in case there are multiple preset messageservers somehow once the CE arrives, + // we want those on the station to share the same preset default decrypt key shown in his memories. + var/is_on_station = is_station_level(z) + if(is_on_station && GLOB.preset_station_message_server_key) + decryptkey = GLOB.preset_station_message_server_key + return + //Generate a random password for the message server + decryptkey = pick("the", "if", "of", "as", "in", "a", "you", "from", "to", "an", "too", "little", "snow", "dead", "drunk", "rosebud", "duck", "al", "le") + decryptkey += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai") + decryptkey += "[rand(0, 9)]" + if(is_on_station) + GLOB.preset_station_message_server_key = decryptkey // Root messaging signal datum /datum/signal/subspace/messaging diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 83c1717fc448..fdb212266c30 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -293,7 +293,7 @@ GLOBAL_LIST_INIT(dye_registry, list( if(.) var/obj/item/clothing/under/U = . can_adjust = initial(U.can_adjust) - if(!can_adjust && adjusted) //we deadjust the uniform if it's now unadjustable + if(!can_adjust && adjusted == ALT_STYLE) //we deadjust the uniform if it's now unadjustable toggle_jumpsuit_adjust() /obj/item/clothing/head/mob_holder/machine_wash(obj/machinery/washing_machine/washer) diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 2f8cb369f95a..1a06a960f1bf 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -92,6 +92,9 @@ if(!buckled_mobs) buckled_mobs = list() + if(M.buckled) + M.buckled.unbuckle_mob(M) + if(!is_buckle_possible(M, force, check_loc)) return FALSE @@ -193,6 +196,11 @@ if(!has_buckled_mobs()) return for(var/m in buckled_mobs) + if(isliving(m)) + var/mob/living/living = m + if(!living.buckled) //this somehow happens? + buckled_mobs -= m + continue unbuckle_mob(m, force) //Handle any extras after buckling @@ -239,16 +247,16 @@ return FALSE // Make sure the target isn't already buckled to something. - if(target.buckled) - return FALSE + //if(target.buckled) + //return FALSE // Make sure this atom can still have more things buckled to it. if(LAZYLEN(buckled_mobs) >= max_buckled_mobs) return FALSE // Stacking buckling leads to lots of jank and issues, better to just nix it entirely - if(target.has_buckled_mobs()) - return FALSE + //if(target.has_buckled_mobs()) + //return FALSE // If the buckle requires restraints, make sure the target is actually restrained. if(buckle_requires_restraints && !HAS_TRAIT(target, TRAIT_RESTRAINED)) diff --git a/code/game/objects/effects/anomalies/_anomalies.dm b/code/game/objects/effects/anomalies/_anomalies.dm index fe7a3ea99f19..f130595fc387 100644 --- a/code/game/objects/effects/anomalies/_anomalies.dm +++ b/code/game/objects/effects/anomalies/_anomalies.dm @@ -100,8 +100,7 @@ qdel(src) /obj/effect/anomaly/attackby(obj/item/weapon, mob/user, params) - if(weapon.tool_behaviour == TOOL_ANALYZER && aSignal) - to_chat(user, span_notice("Analyzing... [src]'s unstable field is fluctuating along frequency [format_frequency(aSignal.frequency)], code [aSignal.code].")) + if(weapon.tool_behaviour == TOOL_ANALYZER && scan_anomaly(user, weapon)) // monke edit: refactor into scan_anomaly return TRUE return ..() diff --git a/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm b/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm index 9c3bab579a5e..b84ccffc65a8 100644 --- a/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm +++ b/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm @@ -179,7 +179,7 @@ candidate_list += GLOB.current_observers_list candidate_list += GLOB.dead_player_list - var/list/candidates = poll_candidates("Would you like to participate in a spooky ghost swarm? (Warning: you will not be able to return to your body!)", ROLE_SENTIENCE, FALSE, 10 SECONDS, group = candidate_list) + var/list/candidates = SSpolling.poll_candidates("Would you like to participate in a spooky ghost swarm? (Warning: you will not be able to return to your body!)", check_jobban = ROLE_SENTIENCE, poll_time = 10 SECONDS, group = candidate_list, pic_source = src, role_name_text = "ghost swarm") for(var/mob/dead/observer/candidate_ghost as anything in candidates) var/mob/living/basic/ghost/swarm/new_ghost = new(get_turf(src)) ghosts_spawned += new_ghost diff --git a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm index 09d69142e21a..2b4f0874ef47 100644 --- a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm +++ b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm @@ -27,15 +27,22 @@ if(istype(tile)) tile.atmos_spawn_air("o2=500;plasma=500;TEMP=1000") //Make it hot and burny for the new slime - var/new_colour = pick("red", "orange") - var/mob/living/simple_animal/slime/pyro = new(tile, new_colour) - pyro.rabid = TRUE - pyro.amount_grown = SLIME_EVOLUTION_THRESHOLD - pyro.Evolve() - var/datum/action/innate/slime/reproduce/repro_action = new - repro_action.Grant(pyro) + var/new_colour = pick(/datum/slime_color/red, /datum/slime_color/orange) + var/mob/living/basic/slime/pyro = new(tile, new_colour) + ADD_TRAIT(pyro, TRAIT_SLIME_RABID, "pyro") + pyro.maximum_survivable_temperature = INFINITY + pyro.apply_temperature_requirements() - var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as a pyroclastic anomaly slime?", ROLE_SENTIENCE, null, 10 SECONDS, pyro, POLL_IGNORE_PYROSLIME) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob( + "Do you want to play as a pyroclastic anomaly slime?", + check_jobban = ROLE_SENTIENCE, + role = ROLE_SENTIENCE, + poll_time = 10 SECONDS, + target_mob = pyro, + ignore_category = POLL_IGNORE_PYROSLIME, + pic_source = pyro, + role_name_text = "pyroclastic anomaly slime" + ) if(!LAZYLEN(candidates)) return diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm index cccf77b20655..f820397c0d9f 100644 --- a/code/game/objects/effects/countdown.dm +++ b/code/game/objects/effects/countdown.dm @@ -64,7 +64,7 @@ displayed_text = new_val if(displayed_text) - maptext = MAPTEXT("[displayed_text]") + maptext = MAPTEXT("[displayed_text]") else maptext = null @@ -102,14 +102,13 @@ /obj/effect/countdown/supermatter name = "supermatter damage" - text_size = 1 color = "#00ff80" /obj/effect/countdown/supermatter/get_value() var/obj/machinery/power/supermatter_crystal/S = attached_to if(!istype(S)) return - return "
[round(S.get_integrity_percent())]%
" + return "
[round(S.get_integrity_percent())]%
" /obj/effect/countdown/transformer name = "transformer countdown" diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 27b5f1f97dc4..83d905882447 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -13,6 +13,7 @@ var/drydesc = "Looks like it's been here a while. Eew." //as above var/drytime = 0 var/count = 0 + var/footprint_sprite = null /obj/effect/decal/cleanable/blood/Initialize(mapload) . = ..() @@ -232,7 +233,7 @@ name = "footprints" desc = "WHOSE FOOTPRINTS ARE THESE?" icon = 'icons/effects/footprints.dmi' - icon_state = "blood1" + icon_state = "blood_shoes_enter" random_icon_states = null blood_state = BLOOD_STATE_HUMAN //the icon state to load images from var/entered_dirs = 0 @@ -247,12 +248,13 @@ dryname = "dried footprints" drydesc = "HMM... SOMEONE WAS HERE!" -/obj/effect/decal/cleanable/blood/footprints/Initialize(mapload) +/obj/effect/decal/cleanable/blood/footprints/Initialize(mapload, footprint_sprite) + src.footprint_sprite = footprint_sprite . = ..() icon_state = "" //All of the footprint visuals come from overlays if(mapload) entered_dirs |= dir //Keep the same appearance as in the map editor - update_appearance() + update_appearance(mapload ? (ALL) : (UPDATE_NAME | UPDATE_DESC)) //Rotate all of the footprint directions too /obj/effect/decal/cleanable/blood/footprints/setDir(newdir) @@ -274,6 +276,21 @@ update_appearance() return ..() +/obj/effect/decal/cleanable/blood/footprints/update_name(updates) + switch(footprint_sprite) + if(FOOTPRINT_SPRITE_CLAWS) + name = "clawprints" + if(FOOTPRINT_SPRITE_SHOES) + name = "footprints" + if(FOOTPRINT_SPRITE_PAWS) + name = "pawprints" + dryname = "dried [name]" + return ..() + +/obj/effect/decal/cleanable/blood/footprints/update_desc(updates) + desc = "WHOSE [uppertext(name)] ARE THESE?" + return ..() + /obj/effect/decal/cleanable/blood/footprints/update_icon() . = ..() alpha = min(BLOODY_FOOTPRINT_BASE_ALPHA + (255 - BLOODY_FOOTPRINT_BASE_ALPHA) * bloodiness / (BLOOD_ITEM_MAX / 2), 255) @@ -288,22 +305,22 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache) . = ..() for(var/Ddir in GLOB.cardinals) if(entered_dirs & Ddir) - var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] + var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["entered-[footprint_sprite]-[blood_state]-[Ddir]"] if(!bloodstep_overlay) - GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]1", dir = Ddir) + GLOB.bloody_footprints_cache["entered-[footprint_sprite]-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]_[footprint_sprite]_enter", dir = Ddir) . += bloodstep_overlay if(exited_dirs & Ddir) - var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] + var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["exited-[footprint_sprite]-[blood_state]-[Ddir]"] if(!bloodstep_overlay) - GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]2", dir = Ddir) + GLOB.bloody_footprints_cache["exited-[footprint_sprite]-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]_[footprint_sprite]_exit", dir = Ddir) . += bloodstep_overlay /obj/effect/decal/cleanable/blood/footprints/examine(mob/user) . = ..() if((shoe_types.len + species_types.len) > 0) - . += "You recognise the footprints as belonging to:" + . += "You recognise the [name] as belonging to:" for(var/sole in shoe_types) var/obj/item/clothing/item = sole var/article = initial(item.gender) == PLURAL ? "Some" : "A" @@ -313,14 +330,18 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache) if(species == "unknown") . += "Some feet." else if(species == SPECIES_MONKEY) - . += "[icon2html('icons/mob/species/human/human.dmi', user, "monkey")] Some monkey feet." + . += "[icon2html('icons/mob/species/human/human.dmi', user, "monkey")] Some monkey paws." + else if(species == SPECIES_SIMIAN) + . += "[icon2html('monkestation/icons/mob/species/simian/bodyparts.dmi', user, "simian_l_leg")] Some simian paws." + else if(species == SPECIES_LIZARD) + . += "[icon2html('icons/mob/species/lizard/bodyparts.dmi', user, "digitigrade_l_leg")] Some lizard claws." else if(species == SPECIES_HUMAN) . += "[icon2html('icons/mob/species/human/bodyparts.dmi', user, "default_human_l_leg")] Some human feet." else . += "[icon2html('icons/mob/species/human/bodyparts.dmi', user, "[species]_l_leg")] Some [species] feet." -/obj/effect/decal/cleanable/blood/footprints/replace_decal(obj/effect/decal/cleanable/C) - if(blood_state != C.blood_state) //We only replace footprints of the same type as us +/obj/effect/decal/cleanable/blood/footprints/replace_decal(obj/effect/decal/cleanable/blood/blood_decal) + if(blood_state != blood_decal.blood_state || footprint_sprite != blood_decal.footprint_sprite) //We only replace footprints of the same type as us return FALSE return ..() diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index 377c8470480b..0c050579de45 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -48,6 +48,7 @@ ///The abstract effect ignores even more effects and is often typechecked for atoms that should truly not be fucked with. /obj/effect/abstract + resistance_flags = parent_type::resistance_flags | SHUTTLE_CRUSH_PROOF /obj/effect/abstract/singularity_pull() return diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index ba0b31853f85..ceb48b9c7440 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -76,7 +76,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) /obj/effect/landmark/start/bitrunner name = "Bitrunner" - icon_state = "x3" + icon_state = "Bitrunner" /obj/effect/landmark/start/bartender name = "Bartender" diff --git a/code/game/objects/effects/particles/smoke.dm b/code/game/objects/effects/particles/smoke.dm index 4f31ffc08699..b41b4eb1d96c 100644 --- a/code/game/objects/effects/particles/smoke.dm +++ b/code/game/objects/effects/particles/smoke.dm @@ -46,3 +46,16 @@ fadein = 0.7 SECONDS position = generator(GEN_VECTOR, list(-3, 5, 0), list(3, 6.5, 0), NORMAL_RAND) velocity = generator(GEN_VECTOR, list(-0.1, 0.4, 0), list(0.1, 0.5, 0), NORMAL_RAND) + +/particles/fog + icon = 'icons/effects/particles/smoke.dmi' + icon_state = list("chill_1" = 2, "chill_2" = 2, "chill_3" = 1) + +/particles/fog/breath + count = 1 + spawning = 1 + lifespan = 1 SECONDS + fade = 0.5 SECONDS + grow = 0.05 + spin = 2 + color = "#fcffff77" diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index a29be972dc61..167d359551bd 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -18,16 +18,31 @@ anchored = TRUE density = TRUE // dense for receiving bumbs layer = HIGH_OBJ_LAYER + light_system = STATIC_LIGHT + light_outer_range = 3 + light_power = 1 + light_on = TRUE + light_color = COLOR_BLUE_LIGHT + /// Are mechs able to enter this portal? var/mech_sized = FALSE + /// A reference to another "linked" destination portal var/obj/effect/portal/linked - var/hardlinked = TRUE //Requires a linked portal at all times. Destroy if there's no linked portal, if there is destroy it when this one is deleted. + /// Requires a linked portal at all times. Destroy if there's no linked portal, if there is destroy it when this one is deleted. + var/hardlinked = TRUE + /// What teleport channel does this portal use? var/teleport_channel = TELEPORT_CHANNEL_BLUESPACE - var/turf/hard_target //For when a portal needs a hard target and isn't to be linked. + /// For when a portal needs a hard target and isn't to be linked. + var/turf/hard_target + /// Do we teleport anchored objects? var/allow_anchored = FALSE + /// What precision value do we pass to do_teleport (how far from the target destination we will pop out at). var/innate_accuracy_penalty = 0 + /// Used to track how often sparks should be output. Might want to turn this into a cooldown. var/last_effect = 0 /// Does this portal bypass teleport restrictions? like TRAIT_NO_TELEPORT and NOTELEPORT flags. var/force_teleport = FALSE + /// Does this portal create spark effect when teleporting? + var/sparkless = FALSE /obj/effect/portal/anom name = "wormhole" @@ -37,6 +52,7 @@ plane = ABOVE_GAME_PLANE mech_sized = TRUE teleport_channel = TELEPORT_CHANNEL_WORMHOLE + light_on = FALSE /obj/effect/portal/Move(newloc) for(var/T in newloc) diff --git a/code/game/objects/effects/spawners/random/exotic.dm b/code/game/objects/effects/spawners/random/exotic.dm index ce48a31e5fdd..616225bce2e2 100644 --- a/code/game/objects/effects/spawners/random/exotic.dm +++ b/code/game/objects/effects/spawners/random/exotic.dm @@ -9,7 +9,7 @@ loot = list( // Space loot spawner. Couple of random bits of technology-adjacent stuff including anomaly cores and BEPIS techs. /obj/item/raw_anomaly_core/random, /obj/item/disk/design_disk/bepis, - /obj/item/camera_bug, + /obj/item/computer_disk/syndicate/camera_app, ) /obj/effect/spawner/random/exotic/languagebook diff --git a/code/game/objects/effects/spawners/random/food_or_drink.dm b/code/game/objects/effects/spawners/random/food_or_drink.dm index b20f1c19d61a..a3fd296408fa 100644 --- a/code/game/objects/effects/spawners/random/food_or_drink.dm +++ b/code/game/objects/effects/spawners/random/food_or_drink.dm @@ -119,6 +119,7 @@ icon_state = "can" loot = list( /obj/item/reagent_containers/cup/glass/drinkingglass/filled/nuka_cola = 3, + /obj/item/reagent_containers/cup/glass/drinkingglass/filled/sunset_sarsaparilla = 3, //monkestation edit /obj/item/reagent_containers/cup/soda_cans/grey_bull = 3, /obj/item/reagent_containers/cup/soda_cans/monkey_energy = 2, /obj/item/reagent_containers/cup/soda_cans/thirteenloko = 2, diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 02588d175c03..7f1afd127867 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -467,7 +467,7 @@ add_fingerprint(user) ui_interact(user) -/obj/item/ui_act(action, list/params) +/obj/item/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) add_fingerprint(usr) return ..() @@ -1533,7 +1533,7 @@ /// Common proc used by painting tools like spraycans and palettes that can access the entire 24 bits color space. /obj/item/proc/pick_painting_tool_color(mob/user, default_color) - var/chosen_color = input(user,"Pick new color", "[src]", default_color) as color|null + var/chosen_color = tgui_color_picker(user, "Pick new color", "[src]", default_color) if(!chosen_color || QDELETED(src) || IS_DEAD_OR_INCAP(user) || !user.is_holding(src)) return set_painting_tool_color(chosen_color) diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index 1ee2a1567d7b..b7150915540a 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -329,7 +329,6 @@ /datum/asset/spritesheet/decals name = "floor_decals" - cross_round_cachable = TRUE /// The floor icon used for blend_preview_floor() var/preview_floor_icon = 'icons/turf/floors.dmi' diff --git a/code/game/objects/items/broom.dm b/code/game/objects/items/broom.dm index 7bf5cd885973..d3dd19b71b15 100644 --- a/code/game/objects/items/broom.dm +++ b/code/game/objects/items/broom.dm @@ -4,7 +4,7 @@ /obj/item/pushbroom name = "push broom" desc = "This is my BROOMSTICK! It can be used manually or braced with two hands to sweep items as you move. It has a telescopic handle for compact storage." - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/service/janitor.dmi' icon_state = "broom0" base_icon_state = "broom" lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 55fb6cedd8ff..f9c7a42f4054 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -649,7 +649,12 @@ if(loc != user) to_chat(user, span_warning("You must be holding the ID to continue!")) return FALSE - var/new_bank_id = tgui_input_number(user, "Enter your account ID number", "Account Reclamation", 111111, 999999, 111111) + var/list/user_memories = user.mind.memories + var/datum/memory/key/account/user_key = user_memories[/datum/memory/key/account] + var/user_account = 11111 + if(!isnull(user_key)) + user_account = user_key.remembered_id + var/new_bank_id = tgui_input_number(user, "Enter the account ID to associate with this card.", "Link Bank Account", user_account, 999999, 111111) if(!new_bank_id || QDELETED(user) || QDELETED(src) || issilicon(user) || !alt_click_can_use_id(user) || loc != user) return FALSE if(registered_account?.account_id == new_bank_id) diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index f86f2de5a306..b3dd4b330beb 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -219,17 +219,27 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(!lighting_text) return ..() - if(!reagents.has_reagent(/datum/reagent/oxygen)) //cigarettes need oxygen - var/datum/gas_mixture/air = return_air() - if(!air || !air.has_gas(/datum/gas/oxygen, 1)) //or oxygen on a tile to burn - to_chat(user, span_notice("Your [name] needs a source of oxygen to burn.")) - return ..() + if(!check_oxygen(user)) //cigarettes need oxygen + balloon_alert(user, "no air!") + return ..() if(smoketime > 0) light(lighting_text) else to_chat(user, span_warning("There is nothing to smoke!")) +/// Checks that we have enough air to smoke +/obj/item/clothing/mask/cigarette/proc/check_oxygen(mob/user) + if (reagents.has_reagent(/datum/reagent/oxygen)) + return TRUE + var/datum/gas_mixture/air = return_air() + if (!isnull(air) && air.has_gas(/datum/gas/oxygen, 1)) + return TRUE + if (!iscarbon(user)) + return FALSE + var/mob/living/carbon/the_smoker = user + return the_smoker.can_breathe_helmet() + /obj/item/clothing/mask/cigarette/afterattack(obj/item/reagent_containers/cup/glass, mob/user, proximity) . = ..() if(!proximity || lit) //can't dip if cigarette is lit (it will heat the reagents in the glass instead) @@ -333,9 +343,24 @@ CIGARETTE PACKETS ARE IN FANCY.DM return var/to_smoke = smoke_all ? (reagents.total_volume * (dragtime / smoketime)) : REAGENTS_METABOLISM var/mob/living/carbon/smoker = loc - if(!istype(smoker) || src != smoker.wear_mask) - reagents.remove_any(to_smoke) - return + // These checks are a bit messy but at least they're fairly readable + // Check if the smoker is a carbon mob, since it needs to have wear_mask + if(!istype(smoker)) + // If not, check if it's a gas mask + if(!istype(smoker, /obj/item/clothing/mask/gas)) + reagents.remove_any(to_smoke) + return + + smoker = smoker.loc + + // If it is, check if that mask is on a carbon mob + if(!istype(smoker) || smoker.get_item_by_slot(ITEM_SLOT_MASK) != loc) + reagents.remove_any(to_smoke) + return + else + if(src != smoker.wear_mask) + reagents.remove_any(to_smoke) + return reagents.expose(smoker, INGEST, min(to_smoke / reagents.total_volume, 1)) var/obj/item/organ/internal/lungs/lungs = smoker.get_organ_slot(ORGAN_SLOT_LUNGS) @@ -349,11 +374,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/mob/living/user = isliving(loc) ? loc : null var/turf/location = get_turf(src) user?.ignite_mob() - if(!reagents.has_reagent(/datum/reagent/oxygen)) //cigarettes need oxygen - var/datum/gas_mixture/air = return_air() - if(!air || !air.has_gas(/datum/gas/oxygen, 1)) //or oxygen on a tile to burn - extinguish() - return + + if(!check_oxygen(user)) + extinguish() + return location.pollute_turf(pollution_type, 5, POLLUTION_PASSIVE_EMITTER_CAP) diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 8cce4e3b66e2..6190201eac31 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -408,11 +408,6 @@ greyscale_colors = CIRCUIT_COLOR_SCIENCE build_path = /obj/machinery/computer/teleporter -/obj/item/circuitboard/computer/xenobiology - name = "Xenobiology Console" - greyscale_colors = CIRCUIT_COLOR_SCIENCE - build_path = /obj/machinery/computer/camera_advanced/xenobio - /obj/item/circuitboard/computer/scan_consolenew name = "DNA Console" greyscale_colors = CIRCUIT_COLOR_SCIENCE diff --git a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm index 454441552506..49d821a8cd81 100644 --- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm @@ -222,10 +222,10 @@ /datum/stock_part/manipulator = 1) needs_anchored = FALSE -/obj/item/circuitboard/machine/generator +/obj/item/circuitboard/machine/thermoelectric_generator name = "Thermo-Electric Generator" greyscale_colors = CIRCUIT_COLOR_ENGINEERING - build_path = /obj/machinery/power/generator + build_path = /obj/machinery/power/thermoelectric_generator req_components = list() /obj/item/circuitboard/machine/ntnet_relay @@ -962,20 +962,6 @@ /datum/stock_part/micro_laser = 1, /obj/item/stack/sheet/glass = 1) -/obj/item/circuitboard/machine/monkey_recycler - name = "Monkey Recycler" - greyscale_colors = CIRCUIT_COLOR_SCIENCE - build_path = /obj/machinery/monkey_recycler - req_components = list( - /datum/stock_part/matter_bin = 1, - /datum/stock_part/manipulator = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/processor/slime - name = "Slime Processor" - greyscale_colors = CIRCUIT_COLOR_SCIENCE - build_path = /obj/machinery/processor/slime - /obj/item/circuitboard/machine/protolathe/department/science name = "Departmental Protolathe - Science" greyscale_colors = CIRCUIT_COLOR_SCIENCE @@ -1227,14 +1213,9 @@ needs_anchored = FALSE /obj/item/circuitboard/machine/processor/screwdriver_act(mob/living/user, obj/item/tool) - if(build_path == /obj/machinery/processor) - name = "Slime Processor" - build_path = /obj/machinery/processor/slime - to_chat(user, span_notice("Name protocols successfully updated.")) - else - name = "Food Processor" - build_path = /obj/machinery/processor - to_chat(user, span_notice("Defaulting name protocols.")) + name = "Food Processor" + build_path = /obj/machinery/processor + to_chat(user, span_notice("Defaulting name protocols.")) return TRUE /obj/item/circuitboard/machine/protolathe/department/service @@ -1483,8 +1464,8 @@ greyscale_colors = CIRCUIT_COLOR_SCIENCE build_path = /obj/machinery/artifact_xray req_components = list( - /obj/item/stock_parts/capacitor = 1, - /datum/stock_part/scanning_module = 1, + /obj/item/stock_parts/capacitor = 1, + /datum/stock_part/scanning_module = 1, /obj/item/stock_parts/micro_laser = 1) /obj/item/circuitboard/machine/artifactheater @@ -1505,7 +1486,7 @@ /datum/stock_part/scanning_module = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/glass = 3) - + /obj/item/circuitboard/machine/navbeacon name = "Bot Navigational Beacon" greyscale_colors = CIRCUIT_COLOR_SCIENCE diff --git a/code/game/objects/items/crab17.dm b/code/game/objects/items/crab17.dm index fd73dadc7f79..2bc057adafe1 100644 --- a/code/game/objects/items/crab17.dm +++ b/code/game/objects/items/crab17.dm @@ -197,7 +197,7 @@ if(!(B?.being_dumped)) accounts_to_rob -= B continue - var/amount = B.account_balance * percentage_lost + var/amount = round(B.account_balance * percentage_lost) // We don't want fractions of a credit stolen. That's just agony for everyone. var/datum/bank_account/account = bogdanoff?.get_bank_account() if (account) // get_bank_account() may return FALSE account.transfer_money(B, amount, "?VIVA¿: !LA CRABBE¡") diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 28d08ad15f8e..437a85e6febe 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -592,6 +592,9 @@ playsound(src, 'sound/machines/defib_failed.ogg', 50, FALSE) do_cancel() return + if(SEND_SIGNAL(H, COMSIG_DEFIBRILLATOR_PRE_HELP_ZAP, user, src) & COMPONENT_DEFIB_STOP) + do_cancel() + return if(H.stat == DEAD) H.visible_message(span_warning("[H]'s body convulses a bit.")) playsound(src, SFX_BODYFALL, 50, TRUE) diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 61ba48c081b4..71b6080f6cea 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -3,6 +3,7 @@ desc = "A storage device for AIs. Patent pending." icon = 'icons/obj/aicards.dmi' icon_state = "aicard" // aicard-full + base_icon_state = "aicard" inhand_icon_state = "electronic" worn_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' @@ -13,51 +14,91 @@ var/flush = FALSE var/mob/living/silicon/ai/AI +/obj/item/aicard/Destroy(force) + if(AI) + AI.ghostize(can_reenter_corpse = FALSE) + QDEL_NULL(AI) + + return ..() + /obj/item/aicard/aitater name = "intelliTater" desc = "A stylish upgrade (?) to the intelliCard." icon_state = "aitater" + base_icon_state = "aitater" /obj/item/aicard/aispook name = "intelliLantern" desc = "A spoOoOoky upgrade to the intelliCard." icon_state = "aispook" + base_icon_state = "aispook" /obj/item/aicard/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is trying to upload [user.p_them()]self into [src]! That's not going to work out well!")) return BRUTELOSS /obj/item/aicard/pre_attack(atom/target, mob/living/user, params) - if(AI) //AI is on the card, implies user wants to upload it. - var/our_ai = AI - target.transfer_ai(AI_TRANS_FROM_CARD, user, AI, src) - if(!AI) - log_combat(user, our_ai, "uploaded", src, "to [target].") - update_appearance() + . = ..() + if(.) + return + + if(AI) + if(upload_ai(target, user)) return TRUE - else //No AI on the card, therefore the user wants to download one. - target.transfer_ai(AI_TRANS_TO_CARD, user, null, src) - if(AI) - log_silicon("[key_name(user)] carded [key_name(AI)]", src) - update_appearance() + else + if(capture_ai(target, user)) return TRUE - return ..() -/obj/item/aicard/update_icon_state() - if(!AI) - name = initial(name) - icon_state = initial(icon_state) - return ..() - name = "[initial(name)] - [AI.name]" - icon_state = "[initial(icon_state)][AI.stat == DEAD ? "-404" : "-full"]" +/// Tries to get an AI from the atom clicked +/obj/item/aicard/proc/capture_ai(atom/from_what, mob/living/user) + from_what.transfer_ai(AI_TRANS_TO_CARD, user, null, src) + if(isnull(AI)) + return FALSE + + log_silicon("[key_name(user)] carded [key_name(AI)]", src) + update_appearance() AI.cancel_camera() + RegisterSignal(AI, COMSIG_MOB_STATCHANGE, PROC_REF(on_ai_stat_change)) + return TRUE + +/// Tries to upload the AI we have captured to the atom clicked +/obj/item/aicard/proc/upload_ai(atom/to_what, mob/living/user) + var/mob/living/silicon/ai/old_ai = AI + to_what.transfer_ai(AI_TRANS_FROM_CARD, user, AI, src) + if(!isnull(AI)) + return FALSE + + log_combat(user, old_ai, "uploaded", src, "to [to_what].") + update_appearance() + old_ai.cancel_camera() + UnregisterSignal(old_ai, COMSIG_MOB_STATCHANGE) + return TRUE + +/obj/item/aicard/proc/on_ai_stat_change(datum/source, new_stat, old_stat) + SIGNAL_HANDLER + + if(new_stat == DEAD || old_stat == DEAD) + update_appearance() + +/obj/item/aicard/update_name(updates) + . = ..() + if(AI) + name = "[initial(name)] - [AI.name]" + else + name = initial(name) + +/obj/item/aicard/update_icon_state() + if(AI) + icon_state = "[base_icon_state][AI.stat == DEAD ? "-404" : "-full"]" + else + icon_state = base_icon_state return ..() /obj/item/aicard/update_overlays() . = ..() if(!AI?.control_disabled) return - . += "[initial(icon_state)]-on" + . += "[base_icon_state]-on" /obj/item/aicard/ui_state(mob/user) return GLOB.hands_state @@ -93,13 +134,7 @@ var/confirm = tgui_alert(usr, "Are you sure you want to wipe this card's memory?", name, list("Yes", "No")) if(confirm == "Yes" && !..()) flush = TRUE - if(AI && AI.loc == src) - to_chat(AI, span_userdanger("Your core files are being wiped!")) - while(AI.stat != DEAD && flush) - AI.adjustOxyLoss(5) - AI.updatehealth() - sleep(0.5 SECONDS) - flush = FALSE + wipe_ai() . = TRUE if("wireless") AI.control_disabled = !AI.control_disabled @@ -114,3 +149,14 @@ to_chat(AI, span_warning("Your Subspace Transceiver has been [AI.radio_enabled ? "enabled" : "disabled"]!")) . = TRUE update_appearance() + +/obj/item/aicard/proc/wipe_ai() + set waitfor = FALSE + + if(AI && AI.loc == src) + to_chat(AI, span_userdanger("Your core files are being wiped!")) + while(AI.stat != DEAD && flush) + AI.adjustOxyLoss(5) + AI.updatehealth() + sleep(0.5 SECONDS) + flush = FALSE diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm deleted file mode 100644 index 918b7313691a..000000000000 --- a/code/game/objects/items/devices/camera_bug.dm +++ /dev/null @@ -1,319 +0,0 @@ - -#define BUGMODE_LIST 0 -#define BUGMODE_MONITOR 1 -#define BUGMODE_TRACK 2 - - - -/obj/item/camera_bug - name = "camera bug" - desc = "For illicit snooping through the camera network." - icon = 'icons/obj/device.dmi' - icon_state = "camera_bug" - w_class = WEIGHT_CLASS_TINY - inhand_icon_state = "camera_bug" - throw_speed = 4 - throw_range = 20 - item_flags = NOBLUDGEON - - var/obj/machinery/camera/current = null - - var/last_net_update = 0 - var/list/bugged_cameras = list() - - var/track_mode = BUGMODE_LIST - var/last_tracked = 0 - var/refresh_interval = 50 - - var/tracked_name = null - var/atom/tracking = null - - var/last_found = null - var/last_seen = null - -/obj/item/camera_bug/Initialize(mapload) - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/camera_bug/Destroy() - STOP_PROCESSING(SSobj, src) - get_cameras() - for(var/cam_tag in bugged_cameras) - var/datum/weakref/camera_ref = bugged_cameras[cam_tag] - var/obj/machinery/camera/camera = camera_ref.resolve() - if(camera && camera.bug == src) - camera.bug = null - bugged_cameras = list() - if(tracking) - tracking = null - return ..() - -/obj/item/camera_bug/interact(mob/user) - ui_interact(user) - -/obj/item/camera_bug/ui_interact(mob/user = usr) - . = ..() - var/datum/browser/popup = new(user, "camerabug","Camera Bug",nref=src) - popup.set_content(menu(get_cameras())) - popup.open() - -/obj/item/camera_bug/attack_self(mob/user) - user.set_machine(src) - interact(user) - -/obj/item/camera_bug/check_eye(mob/user) - if ( loc != user || user.incapacitated() || user.is_blind() || !current ) - user.unset_machine() - return FALSE - if(!is_valid_z_level(get_turf(current), get_turf(user.loc)) || !current.can_use()) - to_chat(user, span_danger("[src] has lost the signal.")) - current = null - user.unset_machine() - return FALSE - return TRUE -/obj/item/camera_bug/on_unset_machine(mob/user) - user.reset_perspective(null) - -/obj/item/camera_bug/proc/get_cameras() - if( world.time > (last_net_update + 100)) - bugged_cameras = list() - for(var/obj/machinery/camera/camera as anything in GLOB.cameranet.cameras) - if(camera.machine_stat || !camera.can_use()) - continue - if(length(list("ss13","mine", "rd", "labor", "ordnance", "minisat") & camera.network)) - var/datum/weakref/camera_ref = WEAKREF(camera) - if(!camera_ref || !camera.c_tag) - continue - bugged_cameras[camera.c_tag] = camera_ref - return sort_list(bugged_cameras) - - -/obj/item/camera_bug/proc/menu(list/cameras) - if(!cameras || !cameras.len) - return "No bugged cameras found." - - var/html - switch(track_mode) - if(BUGMODE_LIST) - html = "

Select a camera:

\[Cancel camera view\]
" - for(var/entry in cameras) - var/datum/weakref/camera_ref = cameras[entry] - var/obj/machinery/camera/camera = camera_ref.resolve() - if(!camera) - cameras -= camera_ref - continue - var/functions = "" - if(camera.bug == src) - functions = " - \[Monitor\]\[Disable\]" - else - functions = " - \[Monitor\]" - html += "" - - if(BUGMODE_MONITOR) - if(current) - html = "Analyzing Camera '[current.c_tag]' \[Select Camera\]
" - html += camera_report() - else - track_mode = BUGMODE_LIST - return .(cameras) - if(BUGMODE_TRACK) - if(tracking) - html = "Tracking '[tracked_name]' \[Cancel Tracking\]\[Cancel camera view\]
" - if(last_found) - var/time_diff = round((world.time - last_seen) / 150) - var/datum/weakref/camera_ref = bugged_cameras[last_found] - var/obj/machinery/camera/camera = camera_ref.resolve() - var/outstring - if(camera) - outstring = "[last_found]" - else - outstring = last_found - if(!time_diff) - html += "Last seen near [outstring] (now)
" - else - // 15 second intervals ~ 1/4 minute - var/m = round(time_diff/4) - var/s = (time_diff - 4*m) * 15 - if(!s) - s = "00" - html += "Last seen near [outstring] ([m]:[s] minute\s ago)
" - if(camera && (camera.bug == src)) //Checks to see if the camera has a bug - html += "\[Disable\]" - - else - html += "Not yet seen." - else - track_mode = BUGMODE_LIST - return .(cameras) - return html - -/obj/item/camera_bug/proc/get_seens() - return current?.can_see() - -/obj/item/camera_bug/proc/camera_report() - // this should only be called if current exists - var/dat = "" - var/list/seen = get_seens() - if(seen && seen.len >= 1) - var/list/names = list() - for(var/obj/singularity/S in seen) // god help you if you see more than one - if(S.name in names) - names[S.name]++ - dat += "[S.name] ([names[S.name]])" - else - names[S.name] = 1 - dat += "[S.name]" - var/stage = round(S.current_size / 2)+1 - dat += " (Stage [stage])" - dat += " \[Track\]
" - - for(var/obj/vehicle/sealed/mecha/M in seen) - if(M.name in names) - names[M.name]++ - dat += "[M.name] ([names[M.name]])" - else - names[M.name] = 1 - dat += "[M.name]" - dat += " \[Track\]
" - - - for(var/mob/living/M in seen) - if(M.name in names) - names[M.name]++ - dat += "[M.name] ([names[M.name]])" - else - names[M.name] = 1 - dat += "[M.name]" - if(M.body_position == LYING_DOWN) - if(M.buckled) - dat += " (Sitting)" - else - dat += " (Laying down)" - dat += " \[Track\]
" - if(length(dat) == 0) - dat += "No motion detected." - return dat - else - return "Camera Offline
" - -/obj/item/camera_bug/Topic(href,list/href_list) - if(usr != loc) - usr.unset_machine() - usr << browse(null, "window=camerabug") - return - usr.set_machine(src) - if("mode" in href_list) - track_mode = text2num(href_list["mode"]) - if("monitor" in href_list) - //You can't locate on a list with keys - var/list/cameras = flatten_list(bugged_cameras) - var/datum/weakref/camera_ref = locate(href_list["monitor"]) in cameras - var/obj/machinery/camera/camera = camera_ref.resolve() - if(camera && istype(camera)) - if(!same_z_level(camera)) - return - track_mode = BUGMODE_MONITOR - current = camera - usr.reset_perspective(null) - interact() - if("track" in href_list) - var/list/seen = get_seens() - if(seen && seen.len >= 1) - var/atom/A = locate(href_list["track"]) in seen - if(A && istype(A)) - tracking = A - tracked_name = A.name - last_found = current.c_tag - last_seen = world.time - track_mode = BUGMODE_TRACK - if("emp" in href_list) - //You can't locate on a list with keys - var/list/cameras = flatten_list(bugged_cameras) - var/datum/weakref/camera_ref = locate(href_list["emp"]) in cameras - var/obj/machinery/camera/camera = camera_ref.resolve() - if(camera && istype(camera) && camera.bug == src) - if(!same_z_level(camera)) - return - camera.emp_act(EMP_HEAVY) - camera.bug = null - bugged_cameras -= camera.c_tag - interact() - return - if("close" in href_list) - usr.unset_machine() - current = null - return - if("view" in href_list) - //You can't locate on a list with keys - var/list/cameras = flatten_list(bugged_cameras) - var/datum/weakref/camera_ref = locate(href_list["view"]) in cameras - var/obj/machinery/camera/camera = camera_ref.resolve() - if(camera && istype(camera)) - if(!same_z_level(camera)) - return - if(!camera.can_use()) - to_chat(usr, span_warning("Something's wrong with that camera! You can't get a feed.")) - return - current = camera - addtimer(CALLBACK(src, PROC_REF(view_camera), usr, camera), 0.6 SECONDS) - return - else - usr.unset_machine() - - interact() - -/obj/item/camera_bug/proc/view_camera(mob/show, obj/machinery/camera/camera) - if(check_eye(show)) - show.reset_perspective(camera) - interact() - else - show.unset_machine() - show << browse(null, "window=camerabug") - -/obj/item/camera_bug/process() - if(track_mode == BUGMODE_LIST || (world.time < (last_tracked + refresh_interval))) - return - last_tracked = world.time - if(track_mode == BUGMODE_TRACK ) // search for user - // Note that it will be tricked if your name appears to change. - // This is not optimal but it is better than tracking you relentlessly despite everything. - if(!tracking) - src.updateSelfDialog() - return - - if(tracking.name != tracked_name) // Hiding their identity, tricksy - var/mob/M = tracking - if(istype(M)) - if(!(tracked_name == "Unknown" && findtext(tracking.name,"Unknown"))) // we saw then disguised before - if(!(tracked_name == M.real_name && findtext(tracking.name,M.real_name))) // or they're still ID'd - src.updateSelfDialog()//But if it's neither of those cases - return // you won't find em on the cameras - else - src.updateSelfDialog() - return - - var/list/tracking_cams = list() - var/list/b_cams = get_cameras() - for(var/entry in b_cams) - tracking_cams += b_cams[entry] - var/list/target_region = view(tracking) - - for(var/obj/machinery/camera/C in (target_region & tracking_cams)) - if(!can_see(C,tracking)) // target may have xray, that doesn't make them visible to cameras - continue - if(C.can_use()) - last_found = C.c_tag - last_seen = world.time - break - src.updateSelfDialog() - -/obj/item/camera_bug/proc/same_z_level(obj/machinery/camera/C) - var/turf/T_bug = get_turf(loc) - if(!T_bug || !is_valid_z_level(T_bug, get_turf(C))) - to_chat(usr, span_warning("You can't get a signal!")) - return FALSE - return TRUE - -#undef BUGMODE_LIST -#undef BUGMODE_MONITOR -#undef BUGMODE_TRACK diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 534871bdda67..f5ef78a60c98 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -137,8 +137,6 @@ /obj/effect/dummy/chameleon/attack_animal(mob/user, list/modifiers) master.disrupt() -/obj/effect/dummy/chameleon/attack_slime(mob/user, list/modifiers) - master.disrupt() /obj/effect/dummy/chameleon/attack_alien(mob/user, list/modifiers) master.disrupt() diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index a3a2bc5b4ac4..a64d1bab3b9b 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -104,6 +104,8 @@ to_chat(user, "[span_warning("\The [src] isn't bright enough to see anything!")] ") return + var/render_list = list()//information will be packaged in a list for clean display to the user + switch(user.zone_selected) if(BODY_ZONE_PRECISE_EYES) if((M.head && M.head.flags_cover & HEADCOVERSEYES) || (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSEYES) || (M.glasses && M.glasses.flags_cover & GLASSESCOVERSEYES)) @@ -111,24 +113,38 @@ return var/obj/item/organ/internal/eyes/E = M.get_organ_slot(ORGAN_SLOT_EYES) + var/obj/item/organ/internal/brain = M.get_organ_slot(ORGAN_SLOT_BRAIN) if(!E) to_chat(user, span_warning("[M] doesn't have any eyes!")) return + M.flash_act(visual = TRUE, length = (user.istate & ISTATE_HARM) ? 2.5 SECONDS : 1 SECONDS) // Apply a 1 second flash effect to the target. The duration increases to 2.5 Seconds if you have combat mode on. + if(M == user) //they're using it on themselves - if(M.flash_act(visual = 1)) - M.visible_message(span_notice("[M] directs [src] to [M.p_their()] eyes."), span_notice("You wave the light in front of your eyes! Trippy!")) + user.visible_message(span_warning("[user] shines [src] into [M.p_their()] eyes."), ignored_mobs = user) + render_list += span_info("You direct [src] to into your eyes:\n") + + if(M.is_blind()) + render_list += "You're not entirely certain what you were expecting...\n" else - M.visible_message(span_notice("[M] directs [src] to [M.p_their()] eyes."), span_notice("You wave the light in front of your eyes.")) + render_list += "Trippy!\n" + else - user.visible_message(span_warning("[user] directs [src] to [M]'s eyes."), \ - span_danger("You direct [src] to [M]'s eyes.")) - if(M.stat == DEAD || (M.is_blind()) || !M.flash_act(visual = 1)) //mob is dead or fully blind - to_chat(user, span_warning("[M]'s pupils don't react to the light!")) - else if(M.dna && M.dna.check_mutation(/datum/mutation/human/xray)) //mob has X-ray vision - to_chat(user, span_danger("[M]'s pupils give an eerie glow!")) - else //they're okay! - to_chat(user, span_notice("[M]'s pupils narrow.")) + user.visible_message(span_warning("[user] directs [src] to [M]'s eyes."), ignored_mobs = user) + render_list += span_info("You direct [src] to [M]'s eyes:\n") + + if(M.stat == DEAD || M.is_blind()) + render_list += "[M.p_their(TRUE)] pupils don't react to the light!\n"//mob is dead + else if(brain.damage > 20) + render_list += "[M.p_their(TRUE)] pupils contract unevenly!\n"//mob has sustained damage to their brain + else + render_list += "[M.p_their(TRUE)] pupils narrow.\n"//they're okay :D + + if(M.dna && M.dna.check_mutation(/datum/mutation/human/xray)) + render_list += "[M.p_their(TRUE)] pupils give an eerie glow!\n"//mob has X-ray vision + + //display our packaged information in an examine block for easy reading + to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO) if(BODY_ZONE_PRECISE_MOUTH) @@ -136,8 +152,6 @@ to_chat(user, span_warning("You're going to need to remove that [(M.head && M.head.flags_cover & HEADCOVERSMOUTH) ? "helmet" : "mask"] first!")) return - var/their = M.p_their() - var/list/mouth_organs = new for(var/obj/item/organ/organ as anything in M.organs) if(organ.zone == BODY_ZONE_PRECISE_MOUTH) @@ -158,7 +172,7 @@ for(var/datum/action/item_action/hands_free/activate_pill/AP in M.actions) pill_count++ - if(M == user) + if(M == user)//if we're looking on our own mouth var/can_use_mirror = FALSE if(isturf(user.loc)) var/obj/structure/mirror/mirror = locate(/obj/structure/mirror, user.loc) @@ -173,27 +187,57 @@ if(WEST) can_use_mirror = mirror.pixel_x < 0 - M.visible_message(span_notice("[M] directs [src] to [their] mouth."), \ - span_notice("You point [src] into your mouth.")) + M.visible_message(span_notice("[M] directs [src] to [ M.p_their()] mouth."), ignored_mobs = user) + render_list += span_info("You point [src] into your mouth:\n") if(!can_use_mirror) to_chat(user, span_notice("You can't see anything without a mirror.")) return if(organ_count) - to_chat(user, span_notice("Inside your mouth [organ_count > 1 ? "are" : "is"] [organ_list].")) + render_list += "Inside your mouth [organ_count > 1 ? "are" : "is"] [organ_list].\n" else - to_chat(user, span_notice("There's nothing inside your mouth.")) + render_list += "There's nothing inside your mouth.\n" if(pill_count) - to_chat(user, span_notice("You have [pill_count] implanted pill[pill_count > 1 ? "s" : ""].")) + render_list += "You have [pill_count] implanted pill[pill_count > 1 ? "s" : ""].\n" - else - user.visible_message(span_notice("[user] directs [src] to [M]'s mouth."),\ - span_notice("You direct [src] to [M]'s mouth.")) + else //if we're looking in someone elses mouth + user.visible_message(span_notice("[user] directs [src] to [M]'s mouth."), ignored_mobs = user) + render_list += span_info("You point [src] into [M]'s mouth:\n") if(organ_count) - to_chat(user, span_notice("Inside [their] mouth [organ_count > 1 ? "are" : "is"] [organ_list].")) + render_list += "Inside [ M.p_their()] mouth [organ_count > 1 ? "are" : "is"] [organ_list].\n" else - to_chat(user, span_notice("[M] doesn't have any organs in [their] mouth.")) + render_list += "[M] doesn't have any organs in [ M.p_their()] mouth.\n" if(pill_count) - to_chat(user, span_notice("[M] has [pill_count] pill[pill_count > 1 ? "s" : ""] implanted in [their] teeth.")) + render_list += "[M] has [pill_count] pill[pill_count > 1 ? "s" : ""] implanted in [ M.p_their()] teeth.\n" + + //assess any suffocation damage + var/hypoxia_status = M.getOxyLoss() > 20 + + if(M == user) + if(hypoxia_status) + render_list += "Your lips appear blue!\n"//you have suffocation damage + else + render_list += "Your lips appear healthy.\n"//you're okay! + else + if(hypoxia_status) + render_list += "[M.p_their(TRUE)] lips appear blue!\n"//they have suffocation damage + else + render_list += "[M.p_their(TRUE)] lips appear healthy.\n"//they're okay! + + //assess blood level + if(M == user) + render_list += span_info("You press a finger to your gums:\n") + else + render_list += span_info("You press a finger to [M.p_their()] gums:\n") + + if(M.blood_volume <= BLOOD_VOLUME_SAFE && M.blood_volume > BLOOD_VOLUME_OKAY) + render_list += "Color returns slowly!\n"//low blood + else if(M.blood_volume <= BLOOD_VOLUME_OKAY) + render_list += "Color does not return!\n"//critical blood + else + render_list += "Color returns quickly.\n"//they're okay :D + + //display our packaged information in an examine block for easy reading + to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO) else return ..() @@ -202,6 +246,7 @@ /obj/item/flashlight/equipped(mob/user, slot, initial) . = ..() setDir(initial(dir)) + SEND_SIGNAL(user, COMSIG_ATOM_DIR_CHANGE, user.dir, user.dir) // This is dumb, but if we don't do this then the lighting overlay may be facing the wrong direction depending on how it is picked up /// for directional sprites - so when we drop the flashlight, it drops facing the same way the user is facing /obj/item/flashlight/dropped(mob/user, silent = FALSE) @@ -841,6 +886,11 @@ light_outer_range = 1 light_power = 0.07 +/obj/item/flashlight/eyelight/glow + light_system = MOVABLE_LIGHT_BEAM + light_outer_range = 4 + light_power = 2 + #undef FAILURE #undef SUCCESS #undef NO_FUEL diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index cf23e3ff4ab8..9cf424d0a6c6 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -34,7 +34,7 @@ /obj/item/lightreplacer name = "light replacer" desc = "A device to automatically replace lights. Refill with broken or working light bulbs, or sheets of glass." - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/service/janitor.dmi' icon_state = "lightreplacer" inhand_icon_state = "electronic" worn_icon_state = "light_replacer" diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index b514cb0b1abd..35780928819e 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -86,10 +86,6 @@ /obj/item/multitool/ai_detect/proc/multitool_detect() var/turf/our_turf = get_turf(src) detect_state = PROXIMITY_NONE - for(var/mob/living/silicon/ai/AI as anything in GLOB.ai_list) - if(AI.cameraFollow == src) - detect_state = PROXIMITY_ON_SCREEN - return for(var/mob/camera/ai_eye/AI_eye as anything in GLOB.aiEyes) if(!AI_eye.ai_detector_visible) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 646a3fc01582..9210a6af5c3f 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -17,7 +17,6 @@ throw_range = 7 w_class = WEIGHT_CLASS_SMALL custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT * 0.75, /datum/material/glass=SMALL_MATERIAL_AMOUNT * 0.25) - obj_flags = USES_TGUI ///if FALSE, broadcasting and listening dont matter and this radio shouldnt do anything VAR_PRIVATE/on = TRUE diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 6640b7cb0cfd..1421a4963dd6 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -111,7 +111,17 @@ return CONTEXTUAL_SCREENTIP_SET -// Used by the PDA medical scanner too +/** + * healthscan + * returns a list of everything a health scan should give to a player. + * Examples of where this is used is Health Analyzer and the Physical Scanner tablet app. + * Args: + * user - The person with the scanner + * target - The person being scanned + * mode - Uses SCANNER_CONDENSED or SCANNER_VERBOSE to decide whether to give a list of all individual limb damage + * advanced - Whether it will give more advanced details, such as husk source. + * tochat - Whether to immediately post the result into the chat of the user, otherwise it will return the results. + */ /proc/healthscan(mob/user, mob/living/target, mode = SCANNER_VERBOSE, advanced = FALSE, tochat = TRUE) if(user.incapacitated()) return @@ -132,8 +142,6 @@ render_list += "[span_info("Analyzing results for [target]:")]\nOverall status: [mob_status]\n" - SEND_SIGNAL(target, COMSIG_LIVING_HEALTHSCAN, render_list, advanced, user, mode) - if(ishuman(target)) var/mob/living/carbon/human/humantarget = target if(humantarget.undergoing_cardiac_arrest() && humantarget.stat != DEAD) @@ -141,6 +149,8 @@ if(humantarget.has_reagent(/datum/reagent/inverse/technetium)) advanced = TRUE + SEND_SIGNAL(target, COMSIG_LIVING_HEALTHSCAN, render_list, advanced, user, mode) + // Husk detection if(HAS_TRAIT(target, TRAIT_HUSK)) if(advanced) @@ -248,6 +258,9 @@ dmgreport += "" dmgreport += "
[entry][functions]
[(limb.burn_dam > 0) ? "[CEILING(limb.burn_dam,1)]" : "0"]
" render_list += dmgreport // tables do not need extra linebreak + for(var/obj/item/bodypart/limb as anything in carbontarget.bodyparts) + for(var/obj/item/embed as anything in limb.embedded_objects) + render_list += "Embedded object: [embed] located in \the [limb.plaintext_zone]\n" if(ishuman(target)) var/mob/living/carbon/human/humantarget = target @@ -317,8 +330,21 @@ || istype(humantarget.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS), /obj/item/organ/external/wings/functional) render_list += "Species: [targetspecies.name][mutant ? "-derived mutant" : ""]\n" - render_list += "Core temperature: [round(humantarget.coretemperature-T0C,0.1)] °C ([round(humantarget.coretemperature*1.8-459.67,0.1)] °F)\n" - render_list += "Body temperature: [round(target.bodytemperature-T0C,0.1)] °C ([round(target.bodytemperature*1.8-459.67,0.1)] °F)\n" + var/core_temperature_message = "Core temperature: [round(humantarget.coretemperature-T0C, 0.1)] °C ([round(humantarget.coretemperature*1.8-459.67,0.1)] °F)" + if(humantarget.coretemperature >= humantarget.get_body_temp_heat_damage_limit()) + render_list += "☼ [core_temperature_message] ☼\n" + else if(humantarget.coretemperature <= humantarget.get_body_temp_cold_damage_limit()) + render_list += "❄ [core_temperature_message] ❄\n" + else + render_list += "[core_temperature_message]\n" + + var/body_temperature_message = "Body temperature: [round(target.bodytemperature-T0C, 0.1)] °C ([round(target.bodytemperature*1.8-459.67,0.1)] °F)" + if(target.bodytemperature >= target.get_body_temp_heat_damage_limit()) + render_list += "☼ [body_temperature_message] ☼\n" + else if(target.bodytemperature <= target.get_body_temp_cold_damage_limit()) + render_list += "❄ [body_temperature_message] ❄\n" + else + render_list += "[body_temperature_message]\n" // Time of death if(target.tod && (target.stat == DEAD || ((HAS_TRAIT(target, TRAIT_FAKEDEATH)) && !advanced))) @@ -352,11 +378,9 @@ var/mob/living/carbon/carbontarget = target var/blood_id = carbontarget.get_blood_id() if(blood_id) - if(ishuman(carbontarget)) - var/mob/living/carbon/human/humantarget = carbontarget - if(humantarget.is_bleeding()) - render_list += "Subject is bleeding!\n" - var/blood_percent = round((carbontarget.blood_volume / BLOOD_VOLUME_NORMAL)*100) + if(carbontarget.is_bleeding()) + render_list += "Subject is bleeding!\n" + var/blood_percent = round((carbontarget.blood_volume / BLOOD_VOLUME_NORMAL) * 100) var/blood_type = carbontarget.dna.blood_type if(blood_id != /datum/reagent/blood) // special blood substance var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id] diff --git a/code/game/objects/items/devices/scanners/slime_scanner.dm b/code/game/objects/items/devices/scanners/slime_scanner.dm deleted file mode 100644 index 430796e02ca2..000000000000 --- a/code/game/objects/items/devices/scanners/slime_scanner.dm +++ /dev/null @@ -1,53 +0,0 @@ -/obj/item/slime_scanner - name = "slime scanner" - desc = "A device that analyzes a slime's internal composition and measures its stats." - icon = 'icons/obj/device.dmi' - icon_state = "slime_scanner" - inhand_icon_state = "analyzer" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - flags_1 = CONDUCT_1 - throwforce = 0 - throw_speed = 3 - throw_range = 7 - custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*0.30, /datum/material/glass=SMALL_MATERIAL_AMOUNT * 0.20) - -/obj/item/slime_scanner/attack(mob/living/M, mob/living/user) - if(user.stat || !user.can_read(src) || user.is_blind()) - return - if (!isslime(M)) - to_chat(user, span_warning("This device can only scan slimes!")) - return - var/mob/living/simple_animal/slime/T = M - slime_scan(T, user) - -/proc/slime_scan(mob/living/simple_animal/slime/T, mob/living/user) - var/to_render = "Slime scan results:\ - \n[span_notice("[T.colour] [T.is_adult ? "adult" : "baby"] slime")]\ - \nNutrition: [T.nutrition]/[T.get_max_nutrition()]" - if (T.nutrition < T.get_starve_nutrition()) - to_render += "\n[span_warning("Warning: slime is starving!")]" - else if (T.nutrition < T.get_hunger_nutrition()) - to_render += "\n[span_warning("Warning: slime is hungry")]" - to_render += "\nElectric change strength: [T.powerlevel]\nHealth: [round(T.health/T.maxHealth,0.01)*100]%" - if (T.slime_mutation[4] == T.colour) - to_render += "\nThis slime does not evolve any further." - else - if (T.slime_mutation[3] == T.slime_mutation[4]) - if (T.slime_mutation[2] == T.slime_mutation[1]) - to_render += "\nPossible mutation: [T.slime_mutation[3]]\ - \nGenetic destability: [T.mutation_chance/2] % chance of mutation on splitting" - else - to_render += "\nPossible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]] (x2)\ - \nGenetic destability: [T.mutation_chance] % chance of mutation on splitting" - else - to_render += "\nPossible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]], [T.slime_mutation[4]]\ - \nGenetic destability: [T.mutation_chance] % chance of mutation on splitting" - if (T.cores > 1) - to_render += "\nMultiple cores detected" - to_render += "\nGrowth progress: [T.amount_grown]/[SLIME_EVOLUTION_THRESHOLD]" - if(T.effectmod) - to_render += "\n[span_notice("Core mutation in progress: [T.effectmod]")]\ - \n[span_notice("Progress in core mutation: [T.applied] / [SLIME_EXTRACT_CROSSING_REQUIRED]")]" - to_chat(user, examine_block(to_render)) diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm index 34e98bad04e2..28e95ac33dcf 100644 --- a/code/game/objects/items/dice.dm +++ b/code/game/objects/items/dice.dm @@ -442,7 +442,7 @@ var/mob/living/carbon/human/human_servant = new(drop_location()) do_smoke(0, holder = src, location = drop_location()) - var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as [user.real_name]'s Servant?", ROLE_WIZARD, ROLE_WIZARD, 5 SECONDS, human_servant) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as [user.real_name]'s Servant?", check_jobban = ROLE_WIZARD, role = ROLE_WIZARD, poll_time = 5 SECONDS, target_mob = human_servant, pic_source = user, role_name_text = "dice servant") if(LAZYLEN(candidates)) var/mob/dead/observer/candidate = pick(candidates) message_admins("[ADMIN_LOOKUPFLW(candidate)] was spawned as Dice Servant") diff --git a/code/game/objects/items/dyekit.dm b/code/game/objects/items/dyekit.dm index f2b26a56dc3e..df6763cd94f1 100644 --- a/code/game/objects/items/dyekit.dm +++ b/code/game/objects/items/dyekit.dm @@ -34,7 +34,7 @@ if(!user.can_perform_action(src, NEED_DEXTERITY)) return - var/new_grad_color = input(user, "Choose a secondary hair color:", "Character Preference",human_target.grad_color) as color|null + var/new_grad_color = tgui_color_picker(user, "Choose a secondary hair color:", "Character Preference",human_target.grad_color) if(!new_grad_color || !user.can_perform_action(src, NEED_DEXTERITY) || !user.CanReach(target)) return diff --git a/code/game/objects/items/food/martian.dm b/code/game/objects/items/food/martian.dm new file mode 100644 index 000000000000..ffd9e7523a14 --- /dev/null +++ b/code/game/objects/items/food/martian.dm @@ -0,0 +1,1264 @@ +//Ingredients and Simple Dishes +/obj/item/food/kimchi + name = "kimchi" + desc = "A classic Korean dish in the Martian style- shredded cabbage with chilli peppers, konbu, bonito, and a mix of spices." + icon = 'icons/obj/food/martian.dmi' + icon_state = "kimchi" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 3, + /datum/reagent/consumable/capsaicin = 1, + ) + tastes = list("spicy cabbage" = 1) + foodtypes = VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/inferno_kimchi + name = "inferno kimchi" + desc = "For when ordinary kimchi just can't scratch your itch for insane heat, inferno kimchi picks up the slack." + icon = 'icons/obj/food/martian.dmi' + icon_state = "inferno_kimchi" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 3, + /datum/reagent/consumable/capsaicin = 3, + ) + tastes = list("very spicy cabbage" = 1) + foodtypes = VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/garlic_kimchi + name = "garlic kimchi" + desc = "A new twist on a classic formula- kimchi and garlic, finally together in perfect harmony." + icon = 'icons/obj/food/martian.dmi' + icon_state = "garlic_kimchi" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 3, + /datum/reagent/consumable/capsaicin = 1, + /datum/reagent/consumable/garlic = 2, + ) + tastes = list("spicy cabbage" = 1, "garlic" = 1) + foodtypes = VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/surimi + name = "surimi" + desc = "A portion of uncured fish surimi." + icon = 'icons/obj/food/martian.dmi' + icon_state = "surimi" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/nutriment/vitamin = 2, + ) + tastes = list("fish" = 1) + foodtypes = SEAFOOD + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/surimi/Initialize(mapload) + . = ..() + AddElement(/datum/element/dryable, /obj/item/food/kamaboko) + +/obj/item/food/kamaboko + name = "kamaboko" + desc = "A Japanese-style cured fishcake frequently used in snacks and ramen." + icon = 'icons/obj/food/martian.dmi' + icon_state = "kamaboko_sunrise" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/nutriment/vitamin = 4, + ) + tastes = list("fish" = 1) + foodtypes = SEAFOOD + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/kamaboko/Initialize(mapload) + . = ..() + var/design = pick("smiling", "spiral", "star", "sunrise") + name = "[design] kamaboko" + icon_state = "kamaboko_[design]" + +/obj/item/food/kamaboko/make_processable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/kamaboko_slice, 4, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut") + +/obj/item/food/kamaboko_slice + name = "kamaboko slice" + desc = "A slice of fishcake. Goes good in ramen." + icon = 'icons/obj/food/martian.dmi' + icon_state = "kamaboko_slice" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 1, + /datum/reagent/consumable/nutriment/vitamin = 1, + ) + tastes = list("fish" = 1) + foodtypes = SEAFOOD + w_class = WEIGHT_CLASS_TINY + +/obj/item/food/sambal + name = "sambal" + desc = "A spice paste from Indonesia, used widely in cooking throughout South East Asia." + icon = 'icons/obj/food/martian.dmi' + icon_state = "sambal" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 5, + /datum/reagent/consumable/capsaicin = 2 + ) + tastes = list("chilli heat" = 1, "umami" = 1) + foodtypes = SEAFOOD | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/katsu_fillet + name = "katsu fillet" + desc = "Breaded and deep fried meat, used for a variety of dishes." + icon = 'icons/obj/food/martian.dmi' + icon_state = "katsu_fillet" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment/vitamin = 2, + /datum/reagent/consumable/nutriment = 2 + ) + tastes = list("meat" = 1, "breadcrumbs" = 1) + foodtypes = MEAT | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/rice_dough + name = "rice dough" + desc = "A piece of dough made with equal parts rice flour and wheat flour, for a unique flavour." + icon = 'icons/obj/food/martian.dmi' + icon_state = "rice_dough" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6 + ) + tastes = list("rice" = 1) + foodtypes = GRAIN + +/obj/item/food/rice_dough/make_bakeable() + AddComponent(/datum/component/bakeable, /obj/item/food/bread/reispan, rand(30 SECONDS, 45 SECONDS), TRUE, TRUE) + +/obj/item/food/rice_dough/make_processable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/spaghetti/rawnoodles, 6, 3 SECONDS, table_required = TRUE) + +/obj/item/food/spaghetti/rawnoodles + name = "fresh noodles" + desc = "Rice noodles, made fresh. Remember, there is no secret ingredient." + icon = 'icons/obj/food/martian.dmi' + icon_state = "raw_noodles" + + food_reagents = list( + /datum/reagent/consumable/nutriment = 3 + ) + tastes = list("rice" = 1) + foodtypes = GRAIN + +/obj/item/food/spaghetti/boilednoodles + name = "cooked noodles" + desc = "Cooked fresh to order." + icon = 'icons/obj/food/martian.dmi' + icon_state = "cooked_noodles" + food_reagents = list( + /datum/reagent/consumable/nutriment = 3 + ) + tastes = list("rice" = 1) + foodtypes = GRAIN + +/obj/item/food/bread/reispan + name = "reispan" + desc = "Though the concept of rice bread has been common in Asia for centuries, the reispan as we know it today is most commonly associated with Mars- where limited arable land has forced ingenuity." + icon = 'icons/obj/food/martian.dmi' + icon_state = "reispan" + food_reagents = list( + /datum/reagent/consumable/nutriment = 15 + ) + burns_in_oven = TRUE + tastes = list("bread" = 10) + foodtypes = GRAIN | VEGETABLES + venue_value = FOOD_PRICE_TRASH + +/obj/item/food/bread/reispan/make_processable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/breadslice/reispan, 5, 3 SECONDS, table_required = TRUE) + +/obj/item/food/breadslice/reispan + name = "reispan slice" + desc = "A slice of reispan, for use in Martian-style sandwiches." + icon = 'icons/obj/food/martian.dmi' + icon_state = "reispan_slice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 3 + ) + foodtypes = GRAIN | VEGETABLES + +// Fried Rice + +/obj/item/food/salad/hurricane_rice + name = "hurricane fried rice" + desc = "Inspired by nasi goreng, this piquant rice dish comes straight from Prospect, on Mars, and its night markets. It's named for its distinctive cooking style, where the frying rice is given lots of airtime while being flipped, mostly because it looks really cool for the customers." + icon = 'icons/obj/food/martian.dmi' + icon_state = "hurricane_rice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 10, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment/vitamin = 10, + ) + tastes = list("rice" = 1, "meat" = 1, "pineapple" = 1, "veggies" = 1) + foodtypes = MEAT | GRAIN | PINEAPPLE | FRUIT | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/ikareis + name = "ikareis" + desc = "A spicy rice dish made with squid-ink, peppers, onions, sausage, and flavourful chillis." + icon = 'icons/obj/food/martian.dmi' + icon_state = "ikareis" + food_reagents = list( + /datum/reagent/consumable/nutriment = 10, + /datum/reagent/consumable/nutriment/protein = 10, + /datum/reagent/consumable/nutriment/vitamin = 6, + /datum/reagent/consumable/capsaicin = 4 + ) + tastes = list("rice" = 1, "squid ink" = 1, "veggies" = 1, "sausage" = 1, "chilli heat" = 1) + foodtypes = MEAT | GRAIN | SEAFOOD | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/hawaiian_fried_rice + name = "\improper Hawaiian fried rice" + desc = "Not a traditional Hawaiian dish, Hawaiian fried rice instead utilises a pastiche of Hawaiian ingredients- including diced Chap and, controversially, pineapple. Purists are split on whether pineapple belongs in rice." + icon = 'icons/obj/food/martian.dmi' + icon_state = "hawaiian_fried_rice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 10, + /datum/reagent/consumable/nutriment/protein = 10, + /datum/reagent/consumable/nutriment/vitamin = 8, + ) + tastes = list("rice" = 1, "pork" = 1, "pineapple" = 1, "soy sauce" = 1, "veggies" = 1) + foodtypes = MEAT | GRAIN | VEGETABLES | FRUIT | PINEAPPLE + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/ketchup_fried_rice + name = "ketchup fried rice" + desc = "A classic Japanese comfort food, made with sausage, veggies, worchestershire sauce, rice- oh, and of course, ketchup." + icon = 'icons/obj/food/martian.dmi' + icon_state = "ketchup_fried_rice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 10, + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment/vitamin = 8, + /datum/reagent/consumable/ketchup = 2, + ) + tastes = list("rice" = 1, "sausage" = 1, "ketchup" = 1, "veggies" = 1) + foodtypes = MEAT | GRAIN | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/mediterranean_fried_rice + name = "mediterranean fried rice" + desc = "A strange take on the fried rice formula: herbs, cheese, olives, and of course, meatballs. Sorta like a hybrid of risotto and fried rice." + icon = 'icons/obj/food/martian.dmi' + icon_state = "mediterranean_fried_rice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 8, + /datum/reagent/consumable/nutriment/protein = 10, + /datum/reagent/consumable/nutriment/vitamin = 10, + ) + tastes = list("rice" = 1, "cheese" = 1, "meatball" = 1, "olives" = 1, "herbs" = 1) + foodtypes = MEAT | GRAIN | VEGETABLES | DAIRY + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/egg_fried_rice + name = "egg fried rice" + desc = "As simple as fried rice gets: rice, egg, soy sauce. Simple, elegant, and infinitely customisable." + icon = 'icons/obj/food/martian.dmi' + icon_state = "egg_fried_rice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 8, + /datum/reagent/consumable/nutriment/protein = 2, + ) + tastes = list("rice" = 1, "egg" = 1, "soy sauce" = 1) + foodtypes = MEAT | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/egg_fried_rice/Initialize(mapload) + . = ..() + AddComponent(/datum/component/customizable_reagent_holder, null, CUSTOM_INGREDIENT_ICON_STACK) + +/obj/item/food/salad/bibimbap + name = "bibimbap" + desc = "A Korean dish consisting of rice and various toppings, served in a hot stone bowl." + icon = 'icons/obj/food/martian.dmi' + icon_state = "bibimbap" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/nutriment/vitamin = 8, + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/capsaicin = 2, + ) + tastes = list("rice" = 1, "spicy cabbage" = 1, "chilli heat" = 1, "egg" = 1, "meat" = 1) + foodtypes = MEAT | VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/bibimbap/Initialize(mapload) + . = ..() + AddComponent(/datum/component/customizable_reagent_holder, null, CUSTOM_INGREDIENT_ICON_STACK) + +// Noodles +/obj/item/food/salad/bulgogi_noodles + name = "bulgogi noodles" + desc = "Korean barbecue meat served with noodles! Made with gochujang, for extra spicy flavour." + icon = 'icons/obj/food/martian.dmi' + icon_state = "bulgogi_noodles" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment = 8, + /datum/reagent/consumable/capsaicin = 2, + ) + tastes = list("barbecue meat" = 1, "noodles" = 1, "chilli heat" = 1) + foodtypes = MEAT | GRAIN | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/yakisoba_katsu + name = "yakisoba katsu" + desc = "Breaded and deep fried meat on a bed of fried noodles. Delicious, if unconventional." + icon = 'icons/obj/food/martian.dmi' + icon_state = "yakisoba_katsu" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/nutriment = 8, + ) + tastes = list("fried noodles" = 1, "meat" = 1, "breadcrumbs" = 1, "veggies" = 1) + foodtypes = MEAT | VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/martian_fried_noodles + name = "\improper Martian fried noodles" + desc = "Fried noodles from the red planet. Martian cooking draws from many cultures, and these noodles are no exception- there's elements of Malay, Thai, Chinese, Korean and Japanese cuisine in here." + icon = 'icons/obj/food/martian.dmi' + icon_state = "martian_fried_noodles" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/nutriment = 8, + ) + tastes = list("noodles" = 1, "meat" = 1, "nuts" = 1, "onion" = 1, "egg" = 1) + foodtypes = GRAIN | NUTS | MEAT | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/simple_fried_noodles + name = "simple fried noodles" + desc = "A simple yet delicious fried noodle dish, perfect for the creative chef to make whatever fried noodles they want." + icon = 'icons/obj/food/martian.dmi' + icon_state = "simple_fried_noodles" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/nutriment = 6, + ) + tastes = list("noodles" = 1, "soy sauce" = 1) + foodtypes = GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/simple_fried_noodles/Initialize(mapload) + . = ..() + AddComponent(/datum/component/customizable_reagent_holder, null, CUSTOM_INGREDIENT_ICON_STACK) + +// Curry +/obj/item/food/salad/setagaya_curry //let me explain... + name = "\improper Setagaya curry" + desc = "Made famous by a cafe in Setagaya, this curry's extensive recipe has gone on to be a closely-guarded secret amongst cafe owners across human space. The taste is said to replenish the diner's soul, whatever that means." + icon = 'icons/obj/food/martian.dmi' + icon_state = "setagaya_curry" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment/vitamin = 8, + /datum/reagent/consumable/nutriment = 8, + /datum/reagent/medicine/omnizine = 5, + ) + tastes = list("masterful curry" = 1, "rice" = 1) + foodtypes = GRAIN | MEAT | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +// Burgers and Sandwiches +/obj/item/food/burger/big_blue + name = "\improper Big Blue burger" + desc = "The original and best Big Blue, straight outta Mars' favourite burger joint. Catch the wave, brother!" + icon = 'icons/obj/food/martian.dmi' + icon_state = "big_blue_burger" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment/vitamin = 8, + ) + tastes = list("bun" = 1, "burger" = 2, "teriyaki onions" = 1, "cheese" = 1, "bacon" = 1, "pineapple" = 1) + foodtypes = MEAT | GRAIN | DAIRY | VEGETABLES | FRUIT | PINEAPPLE + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/burger/chappy + name = "\improper Chappy patty" + desc = "Originally born of a night of drinking in a Big Blue Burger's kitchen, the Chappy patty has since become a staple of both Big Blue's menu and Hawaiian (or at least, faux-Hawaiian) cuisine galaxy-wide. Given Big Kahuna operates most of its stores on Mars, it's perhaps no wonder this dish is popular there." + icon = 'icons/obj/food/martian.dmi' + icon_state = "chappy_patty" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment/protein = 6, + ) + tastes = list("bun" = 1, "fried pork" = 2, "egg" = 1, "cheese" = 1, "ketchup" = 1) + foodtypes = MEAT | GRAIN | DAIRY | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/king_katsu_sandwich + name = "\improper King Katsu sandwich" + desc = "A big sandwich with crispy fried katsu, bacon, kimchi slaw and salad, all on reispan bread. Truly the king of meat between bread." + icon = 'icons/obj/food/martian.dmi' + icon_state = "king_katsu_sandwich" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment/vitamin = 6, + /datum/reagent/consumable/capsaicin = 1, + ) + tastes = list("meat" = 1, "bacon" = 1, "kimchi" = 1, "salad" = 1, "rice bread" = 1) + foodtypes = MEAT | GRAIN | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/marte_cubano_sandwich + name = "\improper Marte Cubano sandwich" + desc = "A fusion food from Mars, the Marte-Cubano is based on the classic Cubano, but updated for ingredient availability and changes in tastes." + icon = 'icons/obj/food/martian.dmi' + icon_state = "marte_cubano_sandwich" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment/vitamin = 4, + ) + tastes = list("bacon" = 1, "pickles" = 1, "cheese" = 1, "rice bread" = 1) + foodtypes = MEAT | DAIRY | VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/little_shiro_sandwich + name = "\improper Little Shiro sandwich" + desc = "A classic Martian sandwich, named for the first president of TerraGov to come from Mars. It features fried eggs, bulgogi beef, a kimchi salad, and a healthy topping of mozzarella cheese." + icon = 'icons/obj/food/martian.dmi' + icon_state = "marte_cubano_sandwich" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment/vitamin = 6, + /datum/reagent/consumable/capsaicin = 1, + ) + tastes = list("egg" = 1, "meat" = 1, "kimchi" = 1, "mozzarella" = 1) + foodtypes = MEAT | DAIRY | VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/croque_martienne + name = "croque-martienne" + desc = "The quintessential Martian breakfast sandwich. Egg, belly pork, pineapple, cheese. Simple. Classic. Available in every cafe across New Osaka." + icon = 'icons/obj/food/martian.dmi' + icon_state = "croque_martienne" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment/vitamin = 4, + ) + tastes = list("egg" = 1, "toast" = 1, "pork" = 1, "pineapple" = 1, "cheese" = 1) + foodtypes = MEAT | DAIRY | VEGETABLES | GRAIN | PINEAPPLE | BREAKFAST + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/prospect_sunrise + name = "\improper Prospect Sunrise" + desc = "The second-most quintessential Martian breakfast sandwich. The most beautiful combination of omelette, bacon, pickles and cheese. Available in every cafe across Prospect." + icon = 'icons/obj/food/martian.dmi' + icon_state = "prospect_sunrise" + food_reagents = list( + /datum/reagent/consumable/nutriment = 5, + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment/vitamin = 3, + ) + tastes = list("egg" = 1, "toast" = 1, "bacon" = 1, "pickles" = 1, "cheese" = 1) + foodtypes = MEAT | DAIRY | VEGETABLES | GRAIN | PINEAPPLE | BREAKFAST + w_class = WEIGHT_CLASS_SMALL + +// Snacks +/obj/item/food/takoyaki + name = "takoyaki" + desc = "A classic Japanese street food, takoyaki (or octopus balls) are made from octopus and onion inside a fried batter, topped with a savoury sauce." + icon = 'icons/obj/food/martian.dmi' + icon_state = "takoyaki" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/cooking_oil = 2, + ) + tastes = list("octopus" = 1, "batter" = 1, "onion" = 1, "worcestershire sauce" = 1) + foodtypes = MEAT | GRAIN | FRIED | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/takoyaki/russian + name = "russian takoyaki" + desc = "A dangerous twist on a classic dish, that makes for the perfect cover for evading the police." + icon = 'icons/obj/food/martian.dmi' + icon_state = "russian_takoyaki" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/capsaicin = 10, + ) + tastes = list("octopus" = 1, "batter" = 1, "onion" = 1, "chilli heat" = 1) + foodtypes = MEAT | GRAIN | FRIED | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/takoyaki/taco + name = "tacoyaki" + desc = "Straight outta Mars' most innovative street food stands, it's tacoyaki- trading octopus for taco meat and corn, and worcestershire sauce for queso. ¡Tan sabroso!" + icon = 'icons/obj/food/martian.dmi' + icon_state = "tacoyaki" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/cooking_oil = 2, + ) + tastes = list("taco meat" = 1, "batter" = 1, "corn" = 1, "cheese" = 1) + foodtypes = MEAT | GRAIN | FRIED | VEGETABLES | DAIRY + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/okonomiyaki + name = "okonomiyaki" + desc = "A Kansai classic, okonomiyaki consists of a savoury pancake filled with... well, whatever you want- although cabbage, nagaimo and dashi are pretty much required, as is the eponymous okonomiyaki sauce." + icon = 'icons/obj/food/martian.dmi' + icon_state = "okonomiyaki" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/vitamin = 6, + ) + tastes = list("batter" = 1, "cabbage" = 1, "onion" = 1, "worcestershire sauce" = 1) + foodtypes = MEAT | GRAIN | FRIED | VEGETABLES | DAIRY + w_class = WEIGHT_CLASS_SMALL + +//hey, the name literally means "grilled how you like it", it'd be crazy to not make it customisable +/obj/item/food/okonomiyaki/Initialize(mapload) + . = ..() + AddComponent(/datum/component/customizable_reagent_holder, null, CUSTOM_INGREDIENT_ICON_STACK) + +/obj/item/food/brat_kimchi + name = "brat-kimchi" + desc = "Fried kimchi, mixed with sugar and topped with bratwurst. A popular dish at izakayas on Mars." + icon = 'icons/obj/food/martian.dmi' + icon_state = "brat_kimchi" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/capsaicin = 2, + /datum/reagent/consumable/sugar = 2, + ) + tastes = list("spicy cabbage" = 1, "sausage" = 1) + foodtypes = MEAT | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/tonkatsuwurst + name = "tonkatsuwurst" + desc = "A cultural fusion between German and Japanese cooking, tonkatsuwurst blends the currywurst and tonkatsu sauce into something familiar, yet new." + icon = 'icons/obj/food/martian.dmi' + icon_state = "tonkatsuwurst" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 3, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/worcestershire = 2, + ) + tastes = list("sausage" = 1, "spicy sauce" = 1, "fries" = 1) + foodtypes = MEAT | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/kebab/ti_hoeh_koe + name = "ti hoeh koe skewer" + desc = "Pig blood, mixed with rice, fried, and topped with peanut and coriander. It's an... acquired taste for sure, but it's popular at Prospect's night markets, brought by Taiwanese settlers." + icon = 'icons/obj/food/martian.dmi' + icon_state = "ti_hoeh_koe" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 1, + /datum/reagent/consumable/nutriment/protein = 5, + /datum/reagent/consumable/peanut_butter = 1, + ) + tastes = list("blood" = 1, "nuts" = 1, "herbs" = 1) + foodtypes = MEAT | NUTS | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/kitzushi + name = "kitzushi" + desc = "A variant on inarizushi popular on Mars amongst vulpinids (and the wider animalid community), kitzushi integrates a spicy cheese and chilli mix inside the pocket for extra flavour." + icon = 'icons/obj/food/martian.dmi' + icon_state = "kitzushi" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 3, + /datum/reagent/consumable/nutriment = 3, + /datum/reagent/consumable/capsaicin = 2, + ) + tastes = list("rice" = 1, "tofu" = 1, "chilli cheese" = 1) + foodtypes = GRAIN | FRIED | VEGETABLES | DAIRY + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/epok_epok + name = "epok-epok" + desc = "A fried pastry snack from Malaysia, which migrated via Singapore into the Martian diet. Stuffed with curried chicken and potatoes, alongside a slice of hard boiled egg, it's a popular street food on the Red Planet." + icon = 'icons/obj/food/martian.dmi' + icon_state = "epok_epok" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/protein = 4, + ) + tastes = list("curry" = 1, "egg" = 1, "pastry" = 1) + foodtypes = GRAIN | MEAT | VEGETABLES | FRIED + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/roti_john + name = "roti john" + desc = "A classic Malaysian snack, the roti john consists of bread fried in a mixture of meat, egg and onion, yielding a result that's somewhere between French toast and an omelette." + icon = 'icons/obj/food/martian.dmi' + icon_state = "roti_john" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 6, + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment = 10, + ) + tastes = list("bread" = 1, "egg" = 1, "meat" = 1, "onion" = 1) + foodtypes = GRAIN | MEAT | VEGETABLES | FRIED | BREAKFAST + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/izakaya_fries + name = "izakaya fries" + desc = "New Osaka's favourite fries, 2 centuries running- and it's all thanks to the marriage of Red Bay, furikake and mayonnaise." + icon = 'icons/obj/food/martian.dmi' + icon_state = "izakaya_fries" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment/protein = 2, + /datum/reagent/consumable/capsaicin = 2, + /datum/reagent/consumable/salt = 2, + ) + tastes = list("fries" = 1, "mars" = 1) + foodtypes = VEGETABLES | FRIED + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/kurry_ok_subsando + name = "kurry-ok subsando" + desc = "The bunny chow meets Martian ingenuity in the form of the kurry-ok subsando, with fries and katsu curry in perfect harmony." + icon = 'icons/obj/food/martian.dmi' + icon_state = "kurry_ok_subsando" + food_reagents = list( + /datum/reagent/consumable/nutriment = 10, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment/vitamin = 8, + ) + tastes = list("bread" = 1, "spicy fries" = 1, "mayonnaise" = 1, "curry" = 1, "meat" = 1) + foodtypes = MEAT | GRAIN | VEGETABLES | FRIED + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/loco_moco + name = "loco moco" + desc = "A simple classic from Hawaii. Makes for a filling, tasty, and cheap meal." + icon = 'icons/obj/food/martian.dmi' + icon_state = "loco_moco" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment/protein = 8, + ) + tastes = list("rice" = 1, "burger" = 1, "gravy" = 1, "egg" = 1) + foodtypes = MEAT | GRAIN | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/wild_duck_fries + name = "wild duck fries" + desc = "Fries with shredded duck, ketchup, mayo, and Red Bay. A classic street food on Mars, although they're most often associated with Kwik-Kwak, Mars' favourite (and indeed, only) duck themed fast food chain." + icon = 'icons/obj/food/martian.dmi' + icon_state = "wild_duck_fries" + food_reagents = list( + /datum/reagent/consumable/nutriment = 8, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/capsaicin = 2, + /datum/reagent/consumable/salt = 2, + ) + tastes = list("fries" = 1, "duck" = 1, "ketchup" = 1, "mayo" = 1, "spicy seasoning" = 1) + foodtypes = MEAT | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/little_hawaii_hotdog + name = "\improper Little Hawaii hotdog" + desc = "From the friendly vendors of Honolulu Avenue comes the Little Hawaii dog- tropical and fattening, all at the same time!" + icon = 'icons/obj/food/martian.dmi' + icon_state = "little_hawaii_hotdog" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment/vitamin = 6, + ) + tastes = list("sausage" = 1, "pineapple" = 1, "onion" = 1, "teriyaki" = 1) + foodtypes = MEAT | VEGETABLES | FRUIT | PINEAPPLE + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salt_chilli_fries + name = "salt n' chilli fries" + desc = "The simple name of this dish doesn't tell the full story of its deliciousness- sure, salt and chilli are big components, but the onion, ginger and garlic are the real flavour heroes here." + icon = 'icons/obj/food/martian.dmi' + icon_state = "salt_chilli_fries" + food_reagents = list( + /datum/reagent/consumable/nutriment = 8, + /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/capsaicin = 2, + /datum/reagent/consumable/salt = 2, + ) + tastes = list("fries" = 1, "garlic" = 1, "ginger" = 1, "numbing heat" = 1, "salt" = 1) + foodtypes = VEGETABLES | FRIED + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/grilled_octopus + name = "grilled octopus tentacle" + desc = "A simple seafood dish, typical to everywhere that octopus is eaten. Martians like it with Red Bay." + icon = 'icons/obj/food/martian.dmi' + icon_state = "grilled_octopus" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment/vitamin = 2, + /datum/reagent/consumable/char = 2) + tastes = list("octopus" = 1) + foodtypes = SEAFOOD | FRIED + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/steak_croquette + name = "steak croquette" + desc = "Man, sticking chunks of steak in a croquette. Must be the countryside way." + icon = 'icons/obj/food/martian.dmi' + icon_state = "steak_croquette" + food_reagents = list( + /datum/reagent/consumable/nutriment = 3, + /datum/reagent/consumable/nutriment/protein = 6, + ) + tastes = list("steak" = 1, "potato" = 1) + foodtypes = MEAT | VEGETABLES | FRIED + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/chapsilog + name = "chapsilog" + desc = "A traditional Filipino-style silog consisting of sinangag, a fried egg, and slices of chap. Makes for a simple, yet filling, breakfast." + icon = 'icons/obj/food/martian.dmi' + icon_state = "chapsilog" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment/vitamin = 3, + /datum/reagent/consumable/garlic = 1, + ) + tastes = list("ham" = 1, "garlic rice" = 1, "egg" = 1) + foodtypes = MEAT | GRAIN | VEGETABLES | BREAKFAST + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/chap_hash + name = "chap hash" + desc = "What do you get when you combine chap, onions, peppers and potatoes? The chap hash, of course! Add some red bay, and you've got yourself a tasty breakfast." + icon = 'icons/obj/food/martian.dmi' + icon_state = "chap_hash" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 6, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment = 3, + ) + tastes = list("ham" = 1, "onion" = 1, "pepper" = 1, "potato" = 1) + foodtypes = MEAT | VEGETABLES | BREAKFAST + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/agedashi_tofu + name = "agedashi tofu" + desc = "Crispy fried tofu, served in a tasty umami broth. Frequently served at izakayas." + icon = 'icons/obj/food/martian.dmi' + icon_state = "agedashi_tofu" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment/protein = 2, + /datum/reagent/consumable/nutriment/vitamin = 4, + ) + tastes = list("umami broth" = 1, "tofu" = 1) + foodtypes = SEAFOOD | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +// Curries and Stews +/obj/item/food/salad/po_kok_gai + name = "po kok gai" + desc = "Also known as galinha à portuguesa, or Portuguese chicken, this dish is a Macanese classic born of Portuguese colonialism, though the dish itself is not a Portuguese dish. It consists of chicken in \"Portuguese Sauce\", a mild coconut-based curry." + icon = 'icons/obj/food/martian.dmi' + icon_state = "po_kok_gai" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment/vitamin = 2, + ) + tastes = list("chicken" = 1, "coconut" = 1, "curry" = 1) + foodtypes = MEAT | VEGETABLES | DAIRY + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/huoxing_tofu + name = "\improper Huoxing tofu" + desc = "An adaptation of mapo tofu made famous in Prospect, the foodie Mecca of Mars. It even kinda looks like Mars, if you really squint." + icon = 'icons/obj/food/martian.dmi' + icon_state = "huoxing_tofu" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/capsaicin = 2 + ) + tastes = list("meat" = 1, "chilli heat" = 1, "tofu" = 1) + foodtypes = MEAT | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/feizhou_ji + name = "fēizhōu jī" + desc = "Considered a Macanese variant on piri-piri, fēizhōu jī, or galinha à africana, or African chicken (if you're feeling like speaking Common), is a popular dish in the TID, and subsequently also on Mars due to its influx of Macanese settlers." + icon = 'icons/obj/food/martian.dmi' + icon_state = "feizhou_ji" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/capsaicin = 2, + ) + tastes = list("chicken" = 1, "chilli heat" = 1, "vinegar" = 1) + foodtypes = MEAT | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/galinha_de_cabidela + name = "galinha de cabidela" + desc = "Originally a Portuguese dish, cabidela rice is traditionally made with chicken in Portugal, and duck in Macau- ultimately, the chicken version won out on Mars due to European influence." + icon = 'icons/obj/food/martian.dmi' + icon_state = "galinha_de_cabidela" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment/protein = 12, + ) + tastes = list("chicken" = 1, "iron" = 1, "vinegar" = 1, "rice" = 1) + foodtypes = MEAT | VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/katsu_curry + name = "katsu curry" + desc = "Breaded and deep fried meat, topped with curry sauce and served on a bed of rice." + icon = 'icons/obj/food/martian.dmi' + icon_state = "katsu_curry" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment/protein = 8, + ) + tastes = list("curry" = 1, "meat" = 1, "breadcrumbs" = 1, "rice" = 1) + foodtypes = MEAT | VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/beef_bowl + name = "beef bowl" + desc = "A tasty mix of stewed beef and onion, served over rice. Typical toppings include pickled ginger, chilli powder, and fried eggs." + icon = 'icons/obj/food/martian.dmi' + icon_state = "beef_bowl" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment/vitamin = 2, + ) + tastes = list("beef" = 25, "onion" = 25, "chili heat" = 15, "rice" = 34, "soul" = 1) //I pour my soul into this bowl + foodtypes = MEAT | VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/salt_chilli_bowl + name = "salt n' chilli octopus bowl" + desc = "Inspired by the Japanese donburi tradition, this spicy take on ten-don is a flavour sensation that's swept the Martian nation." + icon = 'icons/obj/food/martian.dmi' + icon_state = "salt_chilli_bowl" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment/vitamin = 6, + /datum/reagent/consumable/capsaicin = 2, + /datum/reagent/consumable/salt = 2, + ) + tastes = list("seafood" = 1, "rice" = 1, "garlic" = 1, "ginger" = 1, "numbing heat" = 1, "salt" = 1) + foodtypes = SEAFOOD | VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/kansai_bowl + name = "\improper Kansai bowl" + desc = "Also known as konohadon, this donburi is typical to the Kansai region, and consists of kamaboko fishcake, egg and onion served over rice." + icon = 'icons/obj/food/martian.dmi' + icon_state = "kansai_bowl" + food_reagents = list( + /datum/reagent/consumable/nutriment = 8, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment/vitamin = 2, + ) + tastes = list("seafood" = 1, "rice" = 1, "egg" = 1, "onion" = 1) + foodtypes = SEAFOOD | MEAT | VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/salad/eigamudo_curry //curry is meant to be really spicy or kinda mild, this just stinks! + name = "\improper Eigamudo curry" + desc = "An inexplicable curry dish made from a cacophony of ingredients. Presumably tastes good to someone, somewhere- though good luck finding them." + icon = 'icons/obj/food/martian.dmi' + icon_state = "eigamudo_curry" + food_reagents = list( + /datum/reagent/consumable/nutraslop = 8, + /datum/reagent/consumable/capsaicin = 2, + /datum/reagent/toxin/slimejelly = 4, + ) + tastes = list("grit" = 1, "slime" = 1, "gristle" = 1, "rice" = 1, "Mystery Food X" = 1) + foodtypes = GROSS | GRAIN | TOXIC + w_class = WEIGHT_CLASS_SMALL + +// Entrees +/obj/item/food/cilbir + name = "çilbir" + desc = "Eggs, served on a savoury yoghurt base with a spicy oil topping. Originally a Turkish dish, it came to Mars with German-Turkish settlers and has become a breakfast mainstay since." + icon = 'icons/obj/food/martian.dmi' + icon_state = "cilbir" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/nutriment/vitamin = 6, + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/capsaicin = 2, + /datum/reagent/consumable/garlic = 1, + ) + tastes = list("yoghurt" = 1, "garlic" = 1, "lemon" = 1, "egg" = 1, "chilli heat" = 1) + foodtypes = DAIRY | VEGETABLES | FRUIT | BREAKFAST + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/peking_duck_crepes + name = "\improper Peking duck crepes a l'orange" + desc = "This dish takes the best of Beijing's and Paris' cuisines to make a deliciously tangy and savoury meal." + icon = 'icons/obj/food/martian.dmi' + icon_state = "peking_duck_crepes" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 10, + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/orangejuice = 4, + ) + tastes = list("meat" = 1, "crepes" = 1, "orange" = 1) + foodtypes = MEAT | DAIRY | VEGETABLES | FRUIT + w_class = WEIGHT_CLASS_SMALL + +// Desserts +/obj/item/food/cake/spekkoek + name = "vulgaris spekkoek" + desc = "Brought to Mars by both Dutch and Indonesian settlers, spekkoek is a common holiday cake on the Red Planet, often being served as part of a traditional rijsttafel. Use of ambrosia vulgaris as a flavouring is one of necessity in deep space, as pandan leaf is rare this far from Earth." + icon = 'icons/obj/food/martian.dmi' + icon_state = "spekkoek" + food_reagents = list( + /datum/reagent/consumable/nutriment = 30, + /datum/reagent/consumable/nutriment/vitamin = 15 + ) + tastes = list("winter spices" = 2, "ambrosia vulgaris" = 2, "cake" = 5) + foodtypes = GRAIN | SUGAR | DAIRY + burns_in_oven = TRUE + +/obj/item/food/cake/spekkoek/make_processable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/spekkoek, 5, 3 SECONDS, table_required = TRUE) + +/obj/item/food/cakeslice/spekkoek + name = "vulgaris spekkoek slice" + desc = "A slice of vulgaris spekkoek. If you're Martian, this might remind you of home." + icon = 'icons/obj/food/martian.dmi' + icon_state = "spekkoek_slice" + tastes = list("winter spices" = 2, "ambrosia vulgaris" = 2, "cake" = 5) + foodtypes = GRAIN | SUGAR | DAIRY + +/obj/item/food/salad/pineapple_foster + name = "pineapple foster" + desc = "A classic Martian adaptation of another classic dessert, Pineapple Foster is a toasty sweet treat which presents only a mild-to-moderate fire risk." + icon = 'icons/obj/food/martian.dmi' + icon_state = "pineapple_foster" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 6, + /datum/reagent/consumable/nutriment = 2, + /datum/reagent/consumable/caramel = 4, + /datum/reagent/consumable/pineapplejuice = 2, + /datum/reagent/consumable/milk = 4 + ) + tastes = list("pineapple" = 1, "vanilla" = 1, "caramel" = 1, "ice cream" = 1) + foodtypes = FRUIT | DAIRY | PINEAPPLE + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/pastel_de_nata + name = "pastel de nata" + desc = "Originally created by Portuguese monks, pastéis de nata went worldwide under the Portuguese colonial empire- including Macau, from which it came to Mars with settlers from the TID of Hong Kong and Macau." + icon = 'icons/obj/food/martian.dmi' + icon_state = "pastel_de_nata" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/sugar = 4, + ) + tastes = list("custard" = 1, "vanilla" = 1, "sweet pastry" = 1) + foodtypes = DAIRY | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/boh_loh_yah + name = "boh loh yah" + desc = "Confusingly referred to as a \"pineapple bun\", this Hong Konger treat contains no actual pineapple- instead, it's a sugar-cookie like bun with a butter filling." + icon = 'icons/obj/food/martian.dmi' + icon_state = "boh_loh_yah" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/sugar = 4, + ) + tastes = list("cookie" = 1, "butter" = 1) + foodtypes = DAIRY | GRAIN | PINEAPPLE //it's funny + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/banana_fritter + name = "banana fritter" + desc = "A ubiquitous sweet snack from much of Maritime South-East Asia, the banana fritter has many names, but all share a similar style- banana, coated in batter, and fried." + icon = 'icons/obj/food/martian.dmi' + icon_state = "banana_fritter" + food_reagents = list( + /datum/reagent/consumable/nutriment = 3, + /datum/reagent/consumable/nutriment/vitamin = 1, + /datum/reagent/consumable/sugar = 1, + ) + tastes = list("banana" = 1, "batter" = 1) + foodtypes = GRAIN | FRUIT | FRIED + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/pineapple_fritter + name = "pineapple fritter" + desc = "Like its cousin, the banana fritter, the pineapple fritter is a popular snack, though somewhat let down by pineapple's infamous \"love it or hate it\" flavour." + icon = 'icons/obj/food/martian.dmi' + icon_state = "pineapple_fritter" + food_reagents = list( + /datum/reagent/consumable/nutriment = 3, + /datum/reagent/consumable/nutriment/vitamin = 1, + /datum/reagent/consumable/sugar = 1, + ) + tastes = list("pineapple" = 1, "batter" = 1) + foodtypes = GRAIN | FRUIT | FRIED | PINEAPPLE + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/kebab/kasei_dango + name = "kasei dango" + desc = "Japanese-style dango balls, flavoured with grenadine and orange, giving a final result that looks like Mars and tastes like dessert, served three to a stick." + icon = 'icons/obj/food/martian.dmi' + icon_state = "kasei_dango" + food_reagents = list( + /datum/reagent/consumable/sugar = 6, + /datum/reagent/consumable/nutriment = 2, + /datum/reagent/consumable/orangejuice = 3, + /datum/reagent/consumable/grenadine = 3 + ) + tastes = list("pomegranate" = 1, "orange" = 1) + foodtypes = FRUIT | GRAIN + w_class = WEIGHT_CLASS_SMALL + +// Frozen +/obj/item/food/pb_ice_cream_mochi + 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 = 'icons/obj/food/martian.dmi' + icon_state = "pb_ice_cream_mochi" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/sugar = 6, + /datum/reagent/consumable/peanut_butter = 4, + /datum/reagent/consumable/milk = 2, + ) + tastes = list("peanut butter" = 1, "mochi" = 1) + foodtypes = NUTS | GRAIN | DAIRY | SUGAR + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/popsicle/pineapple_pop + 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." + overlay_state = "pineapple_pop" + food_reagents = list( + /datum/reagent/consumable/pineapplejuice = 4, + /datum/reagent/consumable/sugar = 4, + /datum/reagent/consumable/nutriment = 2, + /datum/reagent/consumable/nutriment/vitamin = 2, + ) + tastes = list("cold pineapple" = 1, "chocolate" = 1) + foodtypes = SUGAR | PINEAPPLE + +/obj/item/food/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!" + overlay_state = "sea_salt_pop" + food_reagents = list( + /datum/reagent/consumable/salt = 1, + /datum/reagent/consumable/nutriment = 2, + /datum/reagent/consumable/cream = 2, + /datum/reagent/consumable/vanilla = 2, + /datum/reagent/consumable/sugar = 4, + ) + tastes = list("salt" = 1, "sweet" = 1) + foodtypes = SUGAR | DAIRY + +// topsicles, also known as tofu popsicles +/obj/item/food/popsicle/topsicle + 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..." + overlay_state = "topsicle_berry" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/sugar = 6, + /datum/reagent/consumable/berryjuice = 4 + ) + tastes = list("berry" = 1, "tofu" = 1) + foodtypes = FRUIT | VEGETABLES + +/obj/item/food/popsicle/topsicle/banana + name = "banana topsicle" + desc = "A frozen treat made from tofu and banana juice blended smooth, then frozen. Popular in rural Japan in the summer." + overlay_state = "topsicle_banana" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/sugar = 6, + /datum/reagent/consumable/banana = 4 + ) + tastes = list("banana" = 1, "tofu" = 1) + +/obj/item/food/popsicle/topsicle/pineapple + name = "pineapple topsicle" + desc = "A frozen treat made from tofu and pineapple juice blended smooth, then frozen. As seen on TV." + overlay_state = "topsicle_pineapple" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/sugar = 6, + /datum/reagent/consumable/pineapplejuice = 4 + ) + tastes = list("pineapple" = 1, "tofu" = 1) + +// Ballpark Food +/obj/item/food/plasma_dog_supreme + name = "\improper Plasma Dog Supreme" + desc = "The signature snack of Cybersun Park, home of the New Osaka Woodpeckers: a ballpark hot-dog with sambal, dashi-grilled onions and pineapple-lime salsa. You know, the sort of bold flavours they enjoy on Mars." + icon = 'icons/obj/food/martian.dmi' + icon_state = "plasma_dog_supreme" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 8, + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment = 6 + ) + tastes = list("sausage" = 1, "relish" = 1, "onion" = 1, "fruity salsa" = 1) + foodtypes = FRUIT | MEAT | PINEAPPLE | VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/frickles + name = "frickles" + desc = "Spicy fried pickle spears? Such a bold combination can surely come only from one place- Martian ballparks? Well, not really, but they are a popular snack there." + icon = 'icons/obj/food/martian.dmi' + icon_state = "frickles" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/cooking_oil = 2, + /datum/reagent/consumable/capsaicin = 1, + ) + tastes = list("frickles" = 1) + foodtypes = VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/raw_ballpark_pretzel + name = "raw pretzel" + desc = "A twisted knot of dough, ready to be baked, or possibly griddled?" + icon = 'icons/obj/food/martian.dmi' + icon_state = "raw_ballpark_pretzel" + food_reagents = list( + /datum/reagent/consumable/nutriment = 3, + /datum/reagent/consumable/salt = 1, + ) + tastes = list("bread" = 1, "salt" = 1) + foodtypes = GRAIN | RAW + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/raw_ballpark_pretzel/make_bakeable() + AddComponent(/datum/component/bakeable, /obj/item/food/ballpark_pretzel, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) + +/obj/item/food/raw_ballpark_pretzel/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/ballpark_pretzel, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) + +/obj/item/food/ballpark_pretzel + name = "ballpark pretzel" + desc = "A classic German bread, transformed by the hand of American imperialism into a game-day snack, and then carried to the Red Planet on the backs of Japanese settlers. How multicultural." + icon = 'icons/obj/food/martian.dmi' + icon_state = "ballpark_pretzel" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/salt = 1, + ) + burns_on_grill = TRUE + burns_in_oven = TRUE + tastes = list("bread" = 1, "salt" = 1) + foodtypes = GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/kebab/raw_ballpark_tsukune + name = "raw tsukune" + desc = "Raw chicken meatballs on a skewer, ready to be griddled into something delicious." + icon = 'icons/obj/food/martian.dmi' + icon_state = "raw_ballpark_tsukune" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 3, + /datum/reagent/consumable/nutriment = 2, + ) + tastes = list("raw chicken" = 7, "salmonella" = 1) + foodtypes = MEAT | RAW + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/kebab/raw_ballpark_tsukune/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/kebab/ballpark_tsukune, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) + +/obj/item/food/kebab/ballpark_tsukune + name = "ballpark tsukune" + desc = "Skewered chicken meatballs in a sweet-and-savoury yakitori sauce. A common sight at Martian ballparks." + icon = 'icons/obj/food/martian.dmi' + icon_state = "ballpark_tsukune" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment = 4, + ) + burns_on_grill = TRUE + tastes = list("chicken" = 1, "umami sauce" = 1) + foodtypes = MEAT + w_class = WEIGHT_CLASS_SMALL + +// Ethereal-suitable cross-culture food +/* Ethereals are, as part of the uplifting process, considered as citizens of the Terran Federation. + For this reason, a lot of ethereals have chosen to move throughout human space, settling on various planets to a mixed reception. + Mars is no exception to this rule, where the ethereal population has been more welcomed than most, due to Mars' more cosmopolitan past. + Here, the ethereals have developed a distinct culture, neither that of their homeland nor that of Mars, and with that a distinct cuisine. +*/ + +// Pickled Voltvine +/obj/item/food/pickled_voltvine + name = "pickled voltvine" + desc = "A traditional dish from Sprout (where it is known as hinu'sashuruhk), pickled voltvine has taken on a new identity amongst the pickle masters of Mars, earning a seat at the holy pickle pantheon alongside pickled ginger and kimchi (once appropriately discharged, at least)." + icon = 'icons/obj/food/martian.dmi' + icon_state = "pickled_voltvine" + food_reagents = list( + /datum/reagent/consumable/liquidelectricity = 4, //Monkestation edit: no enriched + /datum/reagent/consumable/nutriment/vitamin = 2, + ) + tastes = list("sour radish" = 1) + foodtypes = VEGETABLES + w_class = WEIGHT_CLASS_SMALL + +// 24-Volt Energy +/obj/item/food/volt_fish + name = "24-volt fish" + desc = "Some may question the 24-volt fish. After all, fish poached in electric-blue super-sour energy drink looks awful. And, indeed, tastes awful. So why do the Martian ethereals like it, then?" //beats the hell out of me + icon = 'icons/obj/food/martian.dmi' + icon_state = "volt_fish" + food_reagents = list( + /datum/reagent/consumable/liquidelectricity = 6, //Monkestation edit: no enriched + /datum/reagent/consumable/nutriment/protein = 4, + ) + tastes = list("fish" = 1, "sour pear" = 1) + foodtypes = SEAFOOD + w_class = WEIGHT_CLASS_SMALL + +// Sprout Bowl +/obj/item/food/salad/sprout_bowl + name = "\improper Sprout bowl" + desc = "Named for the Ethereal homeworld, this rice-based bowl draws on the donburi tradition, but rejects typical donburi toppings, instead using sashimi grade fish and pickled voltvine." + icon = 'icons/obj/food/martian.dmi' + icon_state = "sprout_bowl" + food_reagents = list( + /datum/reagent/consumable/liquidelectricity = 8, //Monkestation edit: no enriched + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/nutriment/vitamin = 2, + ) + tastes = list("fish" = 1, "sour radish" = 1, "rice" = 1) + foodtypes = SEAFOOD | VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL diff --git a/code/game/objects/items/food/meatdish.dm b/code/game/objects/items/food/meatdish.dm index 6861118bd203..e246c7476e9a 100644 --- a/code/game/objects/items/food/meatdish.dm +++ b/code/game/objects/items/food/meatdish.dm @@ -88,6 +88,16 @@ desc = "The dreaded donkfish fillet. No sane spaceman would eat this, and it does not get better when cooked." icon_state = "donkfillet" +/obj/item/food/fishmeat/octopus + name = "octopus tentacle" + desc = "A large tentacle from an octopus." + icon = 'icons/obj/food/martian.dmi' + icon_state = "octopus_fillet" + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 3) + +/obj/item/food/fishmeat/octopus/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/grilled_octopus, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) + /obj/item/food/fishfingers name = "fish fingers" desc = "A finger of fish." diff --git a/code/game/objects/items/food/packaged.dm b/code/game/objects/items/food/packaged.dm index ce8a6f6a8256..e0226497a8aa 100644 --- a/code/game/objects/items/food/packaged.dm +++ b/code/game/objects/items/food/packaged.dm @@ -145,6 +145,54 @@ playsound(loc, 'sound/items/eatfood.ogg', rand(30, 50), TRUE) qdel(src) +/obj/item/food/canned/squid_ink + name = "canned squid ink" + desc = "An odd ingredient in typical cooking, squid ink lends a taste of the sea to any dish- while also dyeing it jet black in the process." + icon_state = "squidinkcan" + trash_type = /obj/item/trash/can/food/squid_ink + food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/salt = 5) + tastes = list("seafood" = 7, "tin" = 1) + foodtypes = SEAFOOD + +/obj/item/food/canned/chap + name = "can of CHAP" + desc = "CHAP: Chopped Ham And Pork. The classic American canned meat product that won a world war, then sent millions of servicemen home with heart congestion." + icon_state = "chapcan" + trash_type = /obj/item/trash/can/food/chap + food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/salt = 5) + tastes = list("meat" = 7, "tin" = 1) + foodtypes = MEAT + +/obj/item/food/canned/chap/make_processable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/chapslice, 5, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut") + +/obj/item/food/chapslice + name = "slice of chap" + desc = "A thin slice of chap. Useful for frying, or making sandwiches." + icon = 'icons/obj/food/martian.dmi' + icon_state = "chapslice" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 3 + ) + tastes = list("meat" = 1) + foodtypes = MEAT + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/chapslice/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/grilled_chapslice, rand(20 SECONDS, 40 SECONDS), TRUE, TRUE) + +/obj/item/food/grilled_chapslice + name = "grilled slice of chap" + desc = "A greasy hot slice of chap. Forms a good part of a balanced meal." + icon = 'icons/obj/food/martian.dmi' + icon_state = "chapslice_grilled" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 3 + ) + burns_on_grill = TRUE + tastes = list("meat" = 1) + foodtypes = MEAT + w_class = WEIGHT_CLASS_SMALL // DONK DINNER: THE INNOVATIVE WAY TO GET YOUR DAILY RECOMMENDED ALLOWANCE OF SALT... AND THEN SOME! /obj/item/food/ready_donk @@ -218,6 +266,35 @@ tastes = list("enchiladas" = 2, "laziness" = 1) foodtypes = GRAIN | DAIRY | MEAT | VEGETABLES | JUNKFOOD +/obj/item/food/ready_donk/nachos_grandes //which translates to... big nachos + name = "\improper Ready-Donk: Donk Sol Series Boritos Nachos Grandes" + desc = "Get ready for game day with Donk's classic Nachos Grandes, sponsors of the Donk Sol Series! Boritos chips loaded with cheese, spicy meat and beans, alongside separate guac, pico and donk sauce. Batter up!" + tastes = list("nachos" = 2, "laziness" = 1) + foodtypes = GRAIN | DAIRY | MEAT | VEGETABLES | JUNKFOOD + + warm_type = /obj/item/food/ready_donk/warm/nachos_grandes + +/obj/item/food/ready_donk/warm/nachos_grandes + name = "warm Ready-Donk: Donk Sol Series Boritos Nachos Grandes" + desc = "Get ready for game day with Donk's classic Nachos Grandes, sponsors of the Donk Sol Series! Boritos chips loaded with cheese, spicy meat and beans, alongside separate guac, pico and donk sauce. Served hotter than Sakamoto's fastball!" + icon_state = "ready_donk_warm_nachos" + tastes = list("nachos" = 2, "laziness" = 1) + foodtypes = GRAIN | DAIRY | MEAT | VEGETABLES | JUNKFOOD + +/obj/item/food/ready_donk/donkrange_chicken + name = "\improper Ready-Donk: Donk-range Chicken" + desc = "A Chinese classic, it's Donk's original spicy orange chicken with stir-fried peppers and onions, all over steamed rice." + tastes = list("orange chicken" = 2, "laziness" = 1) + foodtypes = GRAIN | MEAT | VEGETABLES | JUNKFOOD + + warm_type = /obj/item/food/ready_donk/warm/donkrange_chicken + +/obj/item/food/ready_donk/warm/donkrange_chicken + name = "warm Ready-Donk: Ready-Donk: Donk-range Chicken" + desc = "A Chinese classic, it's Donk's original spicy orange chicken with stir-fried peppers and onions, all over steamed rice and served hotter than a dragon's breath." + icon_state = "ready_donk_warm_orange" + tastes = list("orange chicken" = 2, "laziness" = 1) + foodtypes = GRAIN | MEAT | VEGETABLES | JUNKFOOD // Rations /obj/item/food/rationpack diff --git a/code/game/objects/items/food/salad.dm b/code/game/objects/items/food/salad.dm index ebbccd53af10..db8c39df7626 100644 --- a/code/game/objects/items/food/salad.dm +++ b/code/game/objects/items/food/salad.dm @@ -70,11 +70,13 @@ tastes = list("rice" = 1) foodtypes = GRAIN | RAW +/* Monkestation Edit: You have to boil it /obj/item/food/uncooked_rice/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/boiledrice, rand(15 SECONDS, 20 SECONDS), TRUE, TRUE) /obj/item/food/uncooked_rice/make_microwaveable() AddElement(/datum/element/microwavable, /obj/item/food/boiledrice) +End Monkestation Edit */ /obj/item/food/boiledrice name = "boiled rice" diff --git a/code/game/objects/items/food/snacks.dm b/code/game/objects/items/food/snacks.dm index 8e96ebd37014..1b3364291d25 100644 --- a/code/game/objects/items/food/snacks.dm +++ b/code/game/objects/items/food/snacks.dm @@ -540,3 +540,153 @@ GLOBAL_LIST_INIT(safe_peanut_types, populate_safe_peanut_types()) qdel(sample) . = ..() + +/obj/item/food/hot_shots + name = "\improper Hot Shots" + desc = "The ultimate baseball snack. Once you start, it's hard to stop!" + icon_state = "hot_shots" + trash_type = /obj/item/trash/hot_shots + food_reagents = list( + /datum/reagent/consumable/nutriment = 2, + /datum/reagent/consumable/nutriment/vitamin = 1, + ) + tastes = list("popcorn" = 1, "caramel" = 1, "peanuts" = 1) + foodtypes = JUNKFOOD | SUGAR | NUTS + junkiness = 25 + w_class = WEIGHT_CLASS_SMALL + grind_results = list(/datum/reagent/consumable/cornoil = 3, /datum/reagent/consumable/caramel = 2) + +/obj/item/food/sticko + name = "\improper Sticko Classic" + desc = "A classic treat for all ages, it's Sticko, the original chocolate-coated biscuit stick! This one's the original (and as some would say, best) flavour: biscuit and milk chocolate." + icon_state = "sticko_classic" + trash_type = /obj/item/trash/sticko + food_reagents = list( + /datum/reagent/consumable/sugar = 3, + /datum/reagent/consumable/coco = 1, + ) + tastes = list("biscuit" = 1, "chocolate" = 1) + junkiness = 25 + foodtypes = JUNKFOOD | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/sticko/matcha + name = "\improper Sticko Matcha" + desc = "A classic treat for all ages, it's Sticko, the original chocolate-coated biscuit stick! This one's got matcha flavoured white chocolate as its coating, to evoke feelings of tradition." + icon_state = "sticko_matcha" + trash_type = /obj/item/trash/sticko/matcha + food_reagents = list( + /datum/reagent/consumable/sugar = 2, + /datum/reagent/consumable/coco = 1, + /datum/reagent/consumable/caramel = 1, + ) + tastes = list("biscuit" = 1, "matcha" = 1) + +/obj/item/food/sticko/nutty + name = "\improper Sticko Nutty" + desc = "A classic treat for all ages, it's Sticko, the original chocolate-coated biscuit stick! This one's got peanut-butter flavoured chocolate as its coating, for a nutty twist." + icon_state = "sticko_nutty" + trash_type = /obj/item/trash/sticko/nutty + food_reagents = list( + /datum/reagent/consumable/sugar = 2, + /datum/reagent/consumable/nutriment = 1, + /datum/reagent/consumable/coco = 1, + ) + tastes = list("biscuit" = 1, "peanut butter" = 1) + foodtypes = JUNKFOOD | GRAIN | NUTS + +/obj/item/food/sticko/pineapple + name = "\improper Sticko Pineapple" + desc = "A classic treat for all ages, it's Sticko, the original chocolate-coated biscuit stick! This one's got pineapple flavoured white chocolate as its coating, for those ananas fan-as." + icon_state = "sticko_pineapple" + trash_type = /obj/item/trash/sticko/pineapple + food_reagents = list( + /datum/reagent/consumable/sugar = 2, + /datum/reagent/consumable/coco = 1, + /datum/reagent/consumable/peanut_butter = 1, + ) + tastes = list("biscuit" = 1, "pineapple" = 1) + foodtypes = JUNKFOOD | GRAIN | PINEAPPLE + +/obj/item/food/sticko/yuyake + name = "\improper Sticko Yūyake" + desc = "A classic treat for all ages, it's Sticko, the original chocolate-coated biscuit stick! This one's got Yūyake flavoured white chocolate as its coating, for a refreshing melony treat." + icon_state = "sticko_yuyake" + trash_type = /obj/item/trash/sticko/yuyake + food_reagents = list( + /datum/reagent/consumable/sugar = 2, + /datum/reagent/consumable/coco = 1, + /datum/reagent/consumable/banana = 1, + ) + tastes = list("biscuit" = 1, "melon" = 1) + +/obj/item/food/sticko/random + name = "\improper Sticko Mystery" + desc = "A classic treat for all ages, it's Sticko, the original chocolate-coated biscuit stick! This one's got an obscuring paper sheath, to hide the true flavour..." + +/obj/item/food/sticko/random/Initialize(mapload) + var/random_flavour = pick(subtypesof(/obj/item/food/sticko) - /obj/item/food/sticko/random) + var/obj/item/food/sample = new random_flavour(loc) + name = sample.name + desc = sample.desc + food_reagents = sample.food_reagents + tastes = sample.tastes + + qdel(sample) + + . = ..() + +/obj/item/food/shok_roks + name = "\improper Shok-Roks - Stormcloud Candy flavour" + desc = "You've heard of Snap-Roks, now get ready for Shok-Roks: the popping candy for Ethereals! Available in 5 exciting flavours, of which this bag contains Stormcloud Candy- like cotton candy, but electric!" + icon_state = "shok_roks_candy" + trash_type = /obj/item/trash/shok_roks + food_reagents = list( + /datum/reagent/consumable/liquidelectricity = 2, //Monkestation edit: no enriched + /datum/reagent/consumable/sugar = 3 + ) + tastes = list("sugar" = 1, "lightning" = 1) + +/obj/item/food/shok_roks/citrus + name = "\improper Shok-Roks - Cirrus Citrus flavour" + desc = "You've heard of Snap-Roks, now get ready for Shok-Roks: the popping candy for Ethereals! Available in 5 exciting flavours, of which this bag contains Cirrus Citrus- all the citrus flavour, none of the real citrus extract." + icon_state = "shok_roks_citrus" + trash_type = /obj/item/trash/shok_roks/citrus + tastes = list("citrus" = 1, "lightning" = 1) + +/obj/item/food/shok_roks/berry + name = "\improper Shok-Roks - Berry Storm flavour" + desc = "You've heard of Snap-Roks, now get ready for Shok-Roks: the popping candy for Ethereals! Available in 5 exciting flavours, of which this bag contains Berry Storm- filled with non-descript sour berry flavour!" + icon_state = "shok_roks_berry" + trash_type = /obj/item/trash/shok_roks/berry + tastes = list("sour berry" = 1, "lightning" = 1) + +/obj/item/food/shok_roks/tropical + name = "\improper Shok-Roks - Tropical Thunder flavour" + desc = "You've heard of Snap-Roks, now get ready for Shok-Roks: the popping candy for Ethereals! Available in 5 exciting flavours, of which this bag contains Tropical Thunder- all the tropical fruits! ALL OF THEM!" + icon_state = "shok_roks_tropical" + trash_type = /obj/item/trash/shok_roks/tropical + tastes = list("tropical fruits" = 1, "lightning" = 1) + +/obj/item/food/shok_roks/lanternfruit + name = "\improper Shok-Roks - Lightning Lanternfruit flavour" + desc = "You've heard of Snap-Roks, now get ready for Shok-Roks: the popping candy for Ethereals! Available in 5 exciting flavours, of which this bag contains Lightning Lanternfruit- the only Sprout-native fruit in any Shok-Rok flavour." + icon_state = "shok_roks_lanternfruit" + trash_type = /obj/item/trash/shok_roks/lanternfruit + tastes = list("sour pear" = 1, "lightning" = 1) + +/obj/item/food/shok_roks/random + name = "\improper Shok-Roks - Hidden Hurricane flavour" + desc = "You've heard of Snap-Roks, now get ready for Shok-Roks: the popping candy for Ethereals! Available in 5 exciting flavours, any of which could be in this bag!" + +/obj/item/food/shok_roks/random/Initialize(mapload) + var/random_flavour = pick(subtypesof(/obj/item/food/shok_roks) - /obj/item/food/shok_roks/random) + var/obj/item/food/sample = new random_flavour(loc) + name = sample.name + desc = sample.desc + food_reagents = sample.food_reagents + tastes = sample.tastes + + qdel(sample) + + . = ..() diff --git a/code/game/objects/items/granters/chuuni_granter.dm b/code/game/objects/items/granters/chuuni_granter.dm index ebd2109c6568..46308cf97bae 100644 --- a/code/game/objects/items/granters/chuuni_granter.dm +++ b/code/game/objects/items/granters/chuuni_granter.dm @@ -1,5 +1,7 @@ /// Turns the user into a chuunibyou. /obj/item/book/granter/chuunibyou + starting_title = "I Found a Mysterious Book in the Library That Teaches Me How to Become a Chuunibyou, But It Turns Out It's Actually a Grimoire That Unlocks My Hidden Powers!" + starting_author = "Anonymous" name = "I Found a Mysterious Book in the Library That Teaches Me How to Become a Chuunibyou, But It Turns Out It's Actually a Grimoire That Unlocks My Hidden Powers!" desc = "I'd rather get caught holding a syndicate revolver, honestly." icon_state ="chuuni_manga" diff --git a/code/game/objects/items/implants/implant_freedom.dm b/code/game/objects/items/implants/implant_freedom.dm index 4a40fcc7f91e..671bbecf06b9 100644 --- a/code/game/objects/items/implants/implant_freedom.dm +++ b/code/game/objects/items/implants/implant_freedom.dm @@ -3,37 +3,45 @@ desc = "Use this to escape from those evil Red Shirts." icon_state = "freedom" implant_color = "r" - uses = 4 + uses = FREEDOM_IMPLANT_CHARGES +/obj/item/implant/freedom/implant(mob/living/target, mob/user, silent, force) + . = ..() + if(!.) + return FALSE + if(!iscarbon(target)) //This is pretty much useless for anyone else since they can't be cuffed + balloon_alert(user, "that would be a waste!") + return FALSE + return TRUE /obj/item/implant/freedom/activate() . = ..() + var/mob/living/carbon/carbon_imp_in = imp_in + if(!carbon_imp_in.handcuffed && !carbon_imp_in.legcuffed) + balloon_alert(carbon_imp_in, "no restraints!") + return + uses-- - to_chat(imp_in, span_hear("You feel a faint click.")) - if(iscarbon(imp_in)) - var/mob/living/carbon/C_imp_in = imp_in - C_imp_in.uncuff() + + carbon_imp_in.uncuff() if(!uses) + addtimer(CALLBACK(carbon_imp_in, TYPE_PROC_REF(/atom, balloon_alert), carbon_imp_in, "implant degraded!"), 1 SECONDS) qdel(src) - /obj/item/implant/freedom/get_data() var/dat = {" -Implant Specifications:
-Name: Freedom Beacon
-Life: optimum 5 uses
-Important Notes: Illegal
-
-Implant Details:
-Function: Transmits a specialized cluster of signals to override handcuff locking -mechanisms
-Special Features:
-Neuro-Scan- Analyzes certain shadow signals in the nervous system
-
-No Implant Specifics"} + Implant Specifications:
+ Name: Freedom Beacon
+ Life: Optimum [initial(uses)] uses
+ Important Notes: Illegal
+
+ Implant Details:
+ Function: Transmits a specialized cluster of signals to override handcuff locking + mechanisms. These signals will release any bindings on both the arms and legs.
+ Disclaimer: Heavy-duty restraints such as straightjackets are deemed "too complex" to release from. + "} return dat - /obj/item/implanter/freedom name = "implanter (freedom)" imp_type = /obj/item/implant/freedom diff --git a/code/game/objects/items/janitor_key.dm b/code/game/objects/items/janitor_key.dm index 06370b5af842..8f96205984b4 100644 --- a/code/game/objects/items/janitor_key.dm +++ b/code/game/objects/items/janitor_key.dm @@ -6,7 +6,7 @@ desc = "A key ring with a beeper, allowing the keys to change shape depending on which department it has access to." icon_state = "access_key" inhand_icon_state = "access_key" - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/service/janitor.dmi' lefthand_file = 'icons/mob/inhands/items/keys_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/keys_righthand.dmi' hitsound = 'sound/items/rattling_keys_attack.ogg' diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm index c054ccfb48b0..25ec917416e5 100644 --- a/code/game/objects/items/melee/baton.dm +++ b/code/game/objects/items/melee/baton.dm @@ -204,7 +204,11 @@ target.Paralyze((isnull(stun_override) ? stun_time_cyborg : stun_override) * (trait_check ? 0.1 : 1)) additional_effects_cyborg(target, user) else - target.stamina.adjust(-stamina_damage) + if(!trait_check) + target.stamina.adjust(-stamina_damage) + else + var/stamina_to_min = (target.stamina.maximum * 0.35) + target.stamina.adjust_to(-stamina_damage, stamina_to_min) if(!trait_check) target.Knockdown((isnull(stun_override) ? knockdown_time : stun_override)) additional_effects_non_cyborg(target, user) diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm index bfbf3a47a29b..871b5434d882 100644 --- a/code/game/objects/items/mop.dm +++ b/code/game/objects/items/mop.dm @@ -1,7 +1,7 @@ /obj/item/mop desc = "The world of janitalia wouldn't be complete without a mop." name = "mop" - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/service/janitor.dmi' icon_state = "mop" inhand_icon_state = "mop" lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm index 9f0b3cf3616f..2d4ce0b30486 100644 --- a/code/game/objects/items/pinpointer.dm +++ b/code/game/objects/items/pinpointer.dm @@ -39,6 +39,10 @@ /obj/item/pinpointer/examine(mob/user) . = ..() + // MONKESTATION ADDITION START -- CONTRACTORS -- USED BY /obj/item/pinpointer/area_pinpointer + if(special_examine) // need it here else it would say "it is current tracking the floor". Technically correct but not really + return + // MONKESTATION ADDITION END if(target) . += "It is currently tracking [target]." diff --git a/code/game/objects/items/rcd/RLD.dm b/code/game/objects/items/rcd/RLD.dm index 4cfc3d086c0e..9d07929a9091 100644 --- a/code/game/objects/items/rcd/RLD.dm +++ b/code/game/objects/items/rcd/RLD.dm @@ -65,7 +65,7 @@ mode = GLOW_MODE to_chat(user, span_notice("You change RLD's mode to 'Light Launcher'.")) if("Color Pick") - var/new_choice = input(user,"","Choose Color",color_choice) as color + var/new_choice = tgui_color_picker(user, "", "Choose Color", color_choice) if(new_choice == null) return diff --git a/code/game/objects/items/rcd/RPLD.dm b/code/game/objects/items/rcd/RPLD.dm index febf901e0212..6b308ea92e68 100644 --- a/code/game/objects/items/rcd/RPLD.dm +++ b/code/game/objects/items/rcd/RPLD.dm @@ -49,6 +49,7 @@ /obj/item/construction/plumbing/proc/set_plumbing_designs() plumbing_design_types = list( //category 1 Synthesizers i.e devices which creates , reacts & destroys chemicals + /obj/machinery/plumbing/synthesizer = 15, /obj/machinery/plumbing/reaction_chamber/chem = 15, /obj/machinery/plumbing/grinder_chemical = 30, /obj/machinery/plumbing/growing_vat = 20, @@ -292,12 +293,16 @@ /obj/item/construction/plumbing/research/set_plumbing_designs() plumbing_design_types = list( //category 1 synthesizers + /obj/machinery/plumbing/synthesizer = 15, /obj/machinery/plumbing/reaction_chamber = 15, /obj/machinery/plumbing/grinder_chemical = 30, /obj/machinery/plumbing/disposer = 10, /obj/machinery/plumbing/growing_vat = 20, //category 2 Distributors + /obj/machinery/plumbing/ooze_sucker = 5, + /obj/machinery/plumbing/slime_grinder = 5, + /obj/machinery/plumbing/ooze_compressor = 20, /obj/machinery/duct = 1, /obj/machinery/plumbing/input = 5, /obj/machinery/plumbing/filter = 5, diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 06f33f98750f..1150041264e0 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -21,8 +21,13 @@ var/obj/item/bodypart/head/robot/head = null /// Forced name of the cyborg var/created_name = "" + /// Forced master AI of the cyborg var/mob/living/silicon/ai/forced_ai + /// The name of the AI being forced, tracked separately to above + /// so we can reference handle without worrying about making "AI got gibbed" detectors + var/forced_ai_name + /// If the cyborg starts movement free and not under lockdown var/locomotion = TRUE /// If the cyborg synchronizes it's laws with it's master AI @@ -36,6 +41,30 @@ . = ..() update_appearance() +/obj/item/robot_suit/Destroy() + QDEL_NULL(l_arm) + QDEL_NULL(r_arm) + QDEL_NULL(l_leg) + QDEL_NULL(r_leg) + QDEL_NULL(chest) + QDEL_NULL(head) + return ..() + +/obj/item/robot_suit/Exited(atom/movable/gone, direction) + . = ..() + if(gone == l_arm) + l_arm = null + if(gone == r_arm) + r_arm = null + if(gone == l_leg) + l_leg = null + if(gone == r_leg) + r_leg = null + if(gone == chest) + chest = null + if(gone == head) + head = null + /obj/item/robot_suit/prebuilt/Initialize(mapload) . = ..() l_arm = new(src) @@ -76,38 +105,31 @@ var/turf/T = get_turf(src) if(l_leg || r_leg || chest || l_arm || r_arm || head) if(I.use_tool(src, user, 5, volume=50)) - if(l_leg) - l_leg.forceMove(T) - l_leg = null - if(r_leg) - r_leg.forceMove(T) - r_leg = null - if(chest) - if (chest.cell) //Sanity check. - chest.cell.forceMove(T) - chest.cell = null - chest.forceMove(T) - new /obj/item/stack/cable_coil(T, 1) - chest.wired = FALSE - chest = null - if(l_arm) - l_arm.forceMove(T) - l_arm = null - if(r_arm) - r_arm.forceMove(T) - r_arm = null - if(head) - head.forceMove(T) - head.flash1.forceMove(T) - head.flash1 = null - head.flash2.forceMove(T) - head.flash2 = null - head = null + drop_all_parts(T) to_chat(user, span_notice("You disassemble the cyborg shell.")) else to_chat(user, span_warning("There is nothing to remove from the endoskeleton!")) update_appearance() +/// Drops all included parts to the passed location +/// This will also dissassemble the parts being dropped into components as well +/obj/item/robot_suit/proc/drop_all_parts(atom/drop_to = drop_location()) + l_leg?.forceMove(drop_to) + r_leg?.forceMove(drop_to) + l_arm?.forceMove(drop_to) + r_arm?.forceMove(drop_to) + + if(chest) + chest.forceMove(drop_to) + new /obj/item/stack/cable_coil(drop_to, 1) + chest.wired = FALSE + chest.cell?.forceMove(drop_to) + + if(head) + head.flash1?.forceMove(drop_to) + head.flash2?.forceMove(drop_to) + head.forceMove(drop_to) + /obj/item/robot_suit/proc/put_in_hand_or_drop(mob/living/user, obj/item/I) //normal put_in_hands() drops the item ontop of the player, this drops it at the suit's loc if(!user.put_in_hands(I)) I.forceMove(drop_location()) @@ -124,7 +146,7 @@ return var/obj/item/stock_parts/cell/temp_cell = user.is_holding_item_of_type(/obj/item/stock_parts/cell) - var/swap_failed + var/swap_failed = FALSE if(!temp_cell) //if we're not holding a cell swap_failed = TRUE else if(!user.transferItemToLoc(temp_cell, chest)) @@ -295,10 +317,9 @@ O.cell = chest.cell chest.cell.forceMove(O) - chest.cell = null + W.forceMove(O)//Should fix cybros run time erroring when blown up. It got deleted before, along with the frame. - if(O.mmi) //we delete the mmi created by robot/New() - qdel(O.mmi) + QDEL_NULL(O.mmi) //we delete the mmi created by robot/New() O.mmi = W //and give the real mmi to the borg. O.updatename(brainmob.client) // This canonizes that MMI'd cyborgs have memories of their previous life @@ -359,7 +380,7 @@ O.cell = chest.cell chest.cell.forceMove(O) - chest.cell = null + O.locked = panel_locked O.job = JOB_CYBORG forceMove(O) @@ -403,7 +424,7 @@ data["locomotion"] = locomotion data["panel"] = panel_locked data["aisync"] = aisync - data["master"] = forced_ai ? forced_ai.name : null + data["master"] = forced_ai_name data["lawsync"] = lawsync return data @@ -436,16 +457,47 @@ log_silicon("[key_name(user)] has [aisync ? "enabled" : "disabled"] the AI sync for a cyborg shell at [loc_name(user)]") return TRUE if("set_ai") - var/selected_ai = select_active_ai(user, z) - if(!in_range(src, user) && loc != user) - return - if(!selected_ai) + if(length(active_ais(check_mind = FALSE, z = z)) <= 0) to_chat(user, span_alert("No active AIs detected.")) return - forced_ai = selected_ai + + var/selected_ai = select_active_ai(user, z) // this one runs input() + if(!in_range(src, user) && loc != user) + return + if(!selected_ai) // null = clear + clear_forced_ai() + return TRUE + if(forced_ai == selected_ai) // same AI = clear + clear_forced_ai() + to_chat(user, span_notice("You reset [src]'s AI setting.")) + return TRUE + + set_forced_ai(selected_ai, user) + to_chat(user, span_notice("You set [src]'s AI setting to [forced_ai_name].")) log_silicon("[key_name(user)] set the default AI for a cyborg shell to [key_name(selected_ai)] at [loc_name(user)]") return TRUE + if("lawsync") lawsync = !lawsync log_silicon("[key_name(user)] has [lawsync ? "enabled" : "disabled"] the law sync for a cyborg shell at [loc_name(user)]") return TRUE + +/// Sets [forced_ai] and [forced_ai_name] to the passed AI +/obj/item/robot_suit/proc/set_forced_ai(mob/living/silicon/ai/ai) + forced_ai = ai + forced_ai_name = ai.name + RegisterSignal(ai, COMSIG_QDELETING, PROC_REF(ai_die)) + +/// Clears [forced_ai] and [forced_ai_name] +/obj/item/robot_suit/proc/clear_forced_ai() + if(forced_ai) + UnregisterSignal(forced_ai, COMSIG_QDELETING) + forced_ai = null + forced_ai_name = null + +/// Clears the forced_ai ref +/obj/item/robot_suit/proc/ai_die(datum/source) + SIGNAL_HANDLER + // Does not use [proc/clear_forced_ai] because we'd like to keep the AI name tracked for metagaming purposes + UnregisterSignal(forced_ai, COMSIG_QDELETING) + forced_ai = null diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 2f96aae1e8c9..3133ab79f039 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -567,17 +567,15 @@ robot.SetLockdown(FALSE) robot.set_anchored(FALSE) REMOVE_TRAIT(robot, TRAIT_NO_TRANSFORM, REF(src)) - robot.resize = 2 robot.hasExpanded = TRUE - robot.update_transform() + robot.update_transform(2) /obj/item/borg/upgrade/expand/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) if (R.hasExpanded) R.hasExpanded = FALSE - R.resize = 0.5 - R.update_transform() + R.update_transform(0.5) /obj/item/borg/upgrade/rped name = "engineering cyborg RPED" diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 28c1a9283537..2ba0ab73eab0 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -1,14 +1,17 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ - new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = TRUE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 25, one_per_turf = FALSE, category = CAT_ENTERTAINMENT), \ - new/datum/stack_recipe("linen bin", /obj/structure/bedsheetbin/empty, 2, time = 5, one_per_turf = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("railing", /obj/structure/railing, 6, time = 3.6 SECONDS, check_direction = TRUE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("tank holder", /obj/structure/tank_holder, 2, time = 5, one_per_turf = TRUE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("ladder", /obj/structure/ladder/crafted, 15, time = 150, one_per_turf = TRUE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 2.5 SECONDS, one_per_turf = FALSE, category = CAT_ENTERTAINMENT), \ + new/datum/stack_recipe("linen bin", /obj/structure/bedsheetbin/empty, 2, time = 0.5 SECONDS, one_per_turf = FALSE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("railing", /obj/structure/railing, 2, time = 1 SECONDS, check_direction = TRUE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("railing corner", /obj/structure/railing/corner, 1, time = 1 SECONDS, check_direction = TRUE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("railing end", /obj/structure/railing/corner/end, 1, time = 1 SECONDS, check_direction = TRUE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("railing end (flipped)", /obj/structure/railing/corner/end/flip, 1, time = 1 SECONDS, check_direction = TRUE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("tank holder", /obj/structure/tank_holder, 2, time = 0.5 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("ladder", /obj/structure/ladder/crafted, 15, time = 15 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("catwalk floor tile", /obj/item/stack/tile/catwalk_tile, 1, 4, 20, category = CAT_TILES), \ new/datum/stack_recipe("stairs frame", /obj/structure/stairs_frame, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("white cane", /obj/item/cane/white, 3, time = 10, one_per_turf = FALSE, category = CAT_TOOLS), \ + new/datum/stack_recipe("white cane", /obj/item/cane/white, 3, time = 1 SECONDS, one_per_turf = FALSE, category = CAT_TOOLS), \ )) /obj/item/stack/rods diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 4b9b9671f860..ce5efefaa0c9 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -256,6 +256,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ max_amount = 6 novariants = FALSE item_flags = NOBLUDGEON + resistance_flags = FIRE_PROOF w_class = WEIGHT_CLASS_NORMAL layer = MOB_LAYER merge_type = /obj/item/stack/sheet/animalhide/goliath_hide diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index ecb4832a1dbd..370cc5def0de 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -71,6 +71,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ )), null, \ new/datum/stack_recipe("rack parts", /obj/item/rack_parts, category = CAT_FURNITURE), \ + new/datum/stack_recipe("cargo shelf parts", /obj/item/rack_parts/cargo_shelf, 4, category = CAT_FURNITURE), \ new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ null, \ new/datum/stack_recipe("unfinished canister frame", /obj/structure/canister_frame/machine/unfinished_canister_frame, 5, time = 0.8 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ATMOSPHERIC), \ @@ -83,7 +84,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ new/datum/stack_recipe("tram wall girders (anchored)", /obj/structure/girder/tram, 2, time = 4 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, check_density = FALSE, on_tram = TRUE, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ null, \ new/datum/stack_recipe("computer frame", /obj/structure/frame/computer, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \ - new/datum/stack_recipe("modular console", /obj/machinery/modular_computer/console, 10, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \ + new/datum/stack_recipe("modular console", /obj/machinery/modular_computer, 10, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \ new/datum/stack_recipe("machine frame", /obj/structure/frame/machine, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \ null, \ new /datum/stack_recipe_list("airlock assemblies", list( \ @@ -122,6 +123,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ new/datum/stack_recipe("fire alarm frame", /obj/item/wallframe/firealarm, 2, check_density = FALSE, category = CAT_EQUIPMENT), \ new/datum/stack_recipe("extinguisher cabinet frame", /obj/item/wallframe/extinguisher_cabinet, 2, check_density = FALSE, category = CAT_EQUIPMENT), \ new/datum/stack_recipe("button frame", /obj/item/wallframe/button, 1, check_density = FALSE, category = CAT_EQUIPMENT), \ + new/datum/stack_recipe("slime pen management frame", /obj/item/wallframe/slime_pen_controller, 1, check_density = FALSE, category = CAT_EQUIPMENT), \ null, \ new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \ new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 2, time = 10 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index 43b7a497b767..4fa379a9796d 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -37,8 +37,8 @@ set_greyscale(colors = list(generated_base_color, generated_ribbon_color)) /obj/item/stack/wrapping_paper/AltClick(mob/user, modifiers) - var/new_base = input(user, "", "Select a base color", color) as color - var/new_ribbon = input(user, "", "Select a ribbon color", color) as color + var/new_base = tgui_color_picker(user, "", "Select a base color", color) + var/new_ribbon = tgui_color_picker(user, "", "Select a ribbon color", color) if(!user.can_perform_action(src)) return set_greyscale(colors = list(new_base, new_ribbon)) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 84534458943f..569af765e5bf 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -612,19 +612,20 @@ inhand_icon_state = "duffel-syndiemed" /obj/item/storage/backpack/duffelbag/syndie/surgery/PopulateContents() - new /obj/item/scalpel(src) - new /obj/item/hemostat(src) - new /obj/item/retractor(src) - new /obj/item/circular_saw(src) - new /obj/item/bonesetter(src) - new /obj/item/surgicaldrill(src) - new /obj/item/cautery(src) + new /obj/item/scalpel/advanced(src) + new /obj/item/retractor/advanced(src) + new /obj/item/cautery/advanced(src) new /obj/item/surgical_drapes(src) + new /obj/item/reagent_containers/medigel/sterilizine(src) + new /obj/item/surgicaldrill(src) + new /obj/item/bonesetter(src) + new /obj/item/blood_filter(src) + new /obj/item/stack/medical/bone_gel(src) + new /obj/item/stack/sticky_tape/surgical(src) + new /obj/item/roller(src) new /obj/item/clothing/suit/jacket/straight_jacket(src) new /obj/item/clothing/mask/muzzle(src) new /obj/item/mmi/syndie(src) - new /obj/item/blood_filter(src) - new /obj/item/stack/medical/bone_gel(src) /obj/item/storage/backpack/duffelbag/syndie/ammo name = "ammunition duffel bag" diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 8b34adfbaab4..2ef99e3dc5f2 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -34,7 +34,7 @@ /obj/item/storage/bag/trash name = "trash bag" desc = "It's the heavy-duty black polymer kind. Time to take out the trash!" - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/service/janitor.dmi' icon_state = "trashbag" inhand_icon_state = "trashbag" lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' @@ -327,8 +327,9 @@ atom_storage.set_holdable(list( /obj/item/book, /obj/item/spellbook, - /obj/item/storage/book, - )) + /obj/item/storage/book, //TG#75350 Refactors these to be just /obj/item/book, but it also add burning bibles. May look back at it another time + /obj/item/poster, + )) /* * Trays - Agouri diff --git a/code/game/objects/items/storage/holsters.dm b/code/game/objects/items/storage/holsters.dm index 616524e28c6a..75f1e8b500b0 100644 --- a/code/game/objects/items/storage/holsters.dm +++ b/code/game/objects/items/storage/holsters.dm @@ -186,6 +186,24 @@ atom_storage.silent = TRUE +// MONKESTATION ADDITION START +/obj/item/storage/belt/holster/chameleon/attackby(obj/item/W, mob/user, params) + if(W.tool_behaviour != TOOL_MULTITOOL) + return ..() + + if(chameleon_action.hidden) + chameleon_action.hidden = FALSE + actions += chameleon_action + chameleon_action.Grant(user) + log_game("[key_name(user)] has removed the disguise lock on the chameleon holster ([name]) with [W]") + else + chameleon_action.hidden = TRUE + actions -= chameleon_action + chameleon_action.Remove(user) + log_game("[key_name(user)] has locked the disguise of the chameleon holster ([name]) with [W]") +// MONKESTATION ADDITION END + + /obj/item/storage/belt/holster/nukie name = "operative holster" desc = "A deep shoulder holster capable of holding almost any form of firearm and its ammo." diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 40cfe25f9017..6514377887d6 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -52,7 +52,7 @@ new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set new /obj/item/clothing/mask/chameleon(src) // Goes with above new /obj/item/clothing/shoes/chameleon/noslip(src) // 2 tc - new /obj/item/camera_bug(src) // 1 tc + new /obj/item/computer_disk/syndicate/camera_app(src) // 1 tc new /obj/item/multitool/ai_detect(src) // 1 tc new /obj/item/encryptionkey/syndicate(src) // 2 tc new /obj/item/reagent_containers/syringe/mulligan(src) // 4 tc @@ -115,7 +115,7 @@ new /obj/item/ai_module/toy_ai(src) // ~6 tc new /obj/item/multitool/ai_detect(src) // 1 tc new /obj/item/storage/toolbox/syndicate(src) // 1 tc - new /obj/item/camera_bug(src) // 1 tc + new /obj/item/computer_disk/syndicate/camera_app(src) // 1 tc new /obj/item/clothing/glasses/thermal/syndi(src) // 4 tc new /obj/item/card/id/advanced/chameleon(src) // 2 tc @@ -136,7 +136,7 @@ if(KIT_SABOTAGE) new /obj/item/storage/backpack/duffelbag/syndie/sabotage(src) // 5 tc for 3 c4 and 2 x4 - new /obj/item/camera_bug(src) // 1 tc + new /obj/item/computer_disk/syndicate/camera_app(src) // 1 tc new /obj/item/sbeacondrop/powersink(src) // 11 tc new /obj/item/computer_disk/virus/detomatix(src) // 6 tc new /obj/item/storage/toolbox/syndicate(src) // 1 tc diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index bd1124dcf1f4..ffca12c094ff 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -1,6 +1,6 @@ //Added by Jack Rost /obj/item/trash - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/service/janitor.dmi' lefthand_file = 'icons/mob/inhands/items/food_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/food_righthand.dmi' desc = "This is rubbish." @@ -180,3 +180,46 @@ desc = "It's been Donk-decimated." icon_state = "ready_donk" +/obj/item/trash/can/food/squid_ink + name = "canned squid ink" + icon_state = "squidinkcan_empty" + +/obj/item/trash/can/food/chap + name = "can of CHAP" + icon_state = "chapcan_empty" + +/obj/item/trash/hot_shots + name = "\improper Hot Shots box" + icon_state = "hot_shots" + +/obj/item/trash/sticko + name = "\improper Sticko box" + icon_state = "sticko" + +/obj/item/trash/sticko/matcha + icon_state = "sticko_matcha" + +/obj/item/trash/sticko/nutty + icon_state = "sticko_nutty" + +/obj/item/trash/sticko/pineapple + icon_state = "sticko_pineapple" + +/obj/item/trash/sticko/yuyake + icon_state = "sticko_yuyake" + +/obj/item/trash/shok_roks + name = "\improper Shok-Roks packet" + icon_state = "shok_roks" + +/obj/item/trash/shok_roks/citrus + icon_state = "shok_roks_citrus" + +/obj/item/trash/shok_roks/berry + icon_state = "shok_roks_berry" + +/obj/item/trash/shok_roks/tropical + icon_state = "shok_roks_tropical" + +/obj/item/trash/shok_roks/lanternfruit + icon_state = "shok_roks_lanternfruit" diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 383c9d88af7e..66f7b9b07e90 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -98,12 +98,6 @@ var/amt = max(0, ((force - (move_resist * MOVE_FORCE_CRUSH_RATIO)) / (move_resist * MOVE_FORCE_CRUSH_RATIO)) * 10) take_damage(amt, BRUTE) -/obj/attack_slime(mob/living/simple_animal/slime/user, list/modifiers) - if(!user.is_adult) - return - if(attack_generic(user, rand(10, 15), BRUTE, MELEE, 1)) - log_combat(user, src, "attacked") - /obj/singularity_act() SSexplosions.high_mov_atom += src if(src && !QDELETED(src)) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 4d0b8b2ce6a5..09669efc0acd 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -10,6 +10,9 @@ /// Icon to use as a 32x32 preview in crafting menus and such var/icon_preview var/icon_state_preview + /// The vertical pixel offset applied when the object is anchored on a tile with table + /// Ignored when set to 0 - to avoid shifting directional wall-mounted objects above tables + var/anchored_tabletop_offset = 0 var/damtype = BRUTE var/force = 0 @@ -62,6 +65,8 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) /obj/Initialize(mapload) . = ..() + check_on_table() + if (id_tag) GLOB.objects_by_id_tag[id_tag] = src add_debris_element() //monkestation edit @@ -124,32 +129,34 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) return null /obj/proc/updateUsrDialog() - if((obj_flags & IN_USE) && !(obj_flags & USES_TGUI)) - var/is_in_use = FALSE - var/list/nearby = viewers(1, src) - for(var/mob/M in nearby) - if ((M.client && M.machine == src)) + if(!(obj_flags & IN_USE)) + return + + var/is_in_use = FALSE + var/list/nearby = viewers(1, src) + for(var/mob/M in nearby) + if ((M.client && M.machine == src)) + is_in_use = TRUE + ui_interact(M) + if(issilicon(usr) || isAdminGhostAI(usr)) + if (!(usr in nearby)) + if (usr.client && usr.machine == src) // && M.machine == src is omitted because if we triggered this by using the dialog, it doesn't matter if our machine changed in between triggering it and this - the dialog is probably still supposed to refresh. is_in_use = TRUE - ui_interact(M) - if(issilicon(usr) || isAdminGhostAI(usr)) - if (!(usr in nearby)) - if (usr.client && usr.machine == src) // && M.machine == src is omitted because if we triggered this by using the dialog, it doesn't matter if our machine changed in between triggering it and this - the dialog is probably still supposed to refresh. - is_in_use = TRUE - ui_interact(usr) + ui_interact(usr) - // check for TK users + // check for TK users - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - if(!(usr in nearby)) - if(usr.client && usr.machine == src) - if(H.dna.check_mutation(/datum/mutation/human/telekinesis)) - is_in_use = TRUE - ui_interact(usr) - if (is_in_use) - obj_flags |= IN_USE - else - obj_flags &= ~IN_USE + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + if(!(usr in nearby)) + if(usr.client && usr.machine == src) + if(H.dna.check_mutation(/datum/mutation/human/telekinesis)) + is_in_use = TRUE + ui_interact(usr) + if (is_in_use) + obj_flags |= IN_USE + else + obj_flags &= ~IN_USE /obj/proc/updateDialog(update_viewers = TRUE,update_ais = TRUE) // Check that people are actually using the machine. If not, don't update anymore. @@ -352,7 +359,7 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) var/datum/reagent/R = reagent . |= R.expose_obj(src, reagents[R]) -///attempt to freeze this obj if possible. returns TRUE if it succeeded, FALSE otherwise. +/// Attempt to freeze this obj if possible. returns TRUE if it succeeded, FALSE otherwise. /obj/proc/freeze() if(HAS_TRAIT(src, TRAIT_FROZEN)) return FALSE @@ -362,6 +369,55 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) AddElement(/datum/element/frozen) return TRUE -///unfreezes this obj if its frozen +/// Unfreezes this obj if its frozen /obj/proc/unfreeze() SEND_SIGNAL(src, COMSIG_OBJ_UNFREEZE) + +/// If we can unwrench this object; returns SUCCESSFUL_UNFASTEN and FAILED_UNFASTEN, which are both TRUE, or CANT_UNFASTEN, which isn't. +/obj/proc/can_be_unfasten_wrench(mob/user, silent) + if(!(isfloorturf(loc) || isindestructiblefloor(loc)) && !anchored) + to_chat(user, span_warning("[src] needs to be on the floor to be secured!")) + return FAILED_UNFASTEN + return SUCCESSFUL_UNFASTEN + +/// Try to unwrench an object in a WONDERFUL DYNAMIC WAY +/obj/proc/default_unfasten_wrench(mob/user, obj/item/wrench, time = 20) + if((flags_1 & NODECONSTRUCT_1) || wrench.tool_behaviour != TOOL_WRENCH) + return CANT_UNFASTEN + + var/turf/ground = get_turf(src) + if(!anchored && ground.is_blocked_turf(exclude_mobs = TRUE, source_atom = src)) + to_chat(user, span_notice("You fail to secure [src].")) + return CANT_UNFASTEN + var/can_be_unfasten = can_be_unfasten_wrench(user) + if(!can_be_unfasten || can_be_unfasten == FAILED_UNFASTEN) + return can_be_unfasten + if(time) + to_chat(user, span_notice("You begin [anchored ? "un" : ""]securing [src]...")) + wrench.play_tool_sound(src, 50) + var/prev_anchored = anchored + //as long as we're the same anchored state and we're either on a floor or are anchored, toggle our anchored state + if(!wrench.use_tool(src, user, time, extra_checks = CALLBACK(src, PROC_REF(unfasten_wrench_check), prev_anchored, user))) + return FAILED_UNFASTEN + if(!anchored && ground.is_blocked_turf(exclude_mobs = TRUE, source_atom = src)) + to_chat(user, span_notice("You fail to secure [src].")) + return CANT_UNFASTEN + to_chat(user, span_notice("You [anchored ? "un" : ""]secure [src].")) + set_anchored(!anchored) + check_on_table() + playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) + SEND_SIGNAL(src, COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH, anchored) + return SUCCESSFUL_UNFASTEN + +/// For the do_after, this checks if unfastening conditions are still valid +/obj/proc/unfasten_wrench_check(prev_anchored, mob/user) + if(anchored != prev_anchored) + return FALSE + if(can_be_unfasten_wrench(user, TRUE) != SUCCESSFUL_UNFASTEN) //if we aren't explicitly successful, cancel the fuck out + return FALSE + return TRUE + +/// Adjusts the vertical pixel offset when the object is anchored on a tile with table +/obj/proc/check_on_table() + if(anchored_tabletop_offset != 0 && !istype(src, /obj/structure/table) && locate(/obj/structure/table) in loc) + pixel_y = anchored ? anchored_tabletop_offset : initial(pixel_y) diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 9c7b3cf7132f..35d2bffde992 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -409,6 +409,7 @@ That prevents a few funky behaviors. /atom/proc/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card) + SHOULD_CALL_PARENT(TRUE) if(istype(card)) if(card.flush) to_chat(user, span_alert("ERROR: AI flush is in progress, cannot execute transfer protocol.")) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index 2610498964e1..8b24f38aaf05 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -21,10 +21,14 @@ var/buildstacktype = /obj/item/stack/sheet/iron var/buildstackamount = 2 var/bolts = TRUE + /// Mobs standing on it are nudged up by this amount. Also used to align the person back when buckled to it after init. + var/elevation = 8 /obj/structure/bed/Initialize(mapload) . = ..() AddElement(/datum/element/soft_landing) + if(elevation) + AddElement(/datum/element/elevation, pixel_shift = elevation) /obj/structure/bed/examine(mob/user) . = ..() @@ -107,6 +111,7 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/structure/bed/roller/post_buckle_mob(mob/living/M) + . = ..() set_density(TRUE) icon_state = "up" //Push them up from the normal lying position @@ -119,6 +124,7 @@ /obj/structure/bed/roller/post_unbuckle_mob(mob/living/M) + . = ..() set_density(FALSE) icon_state = "down" //Set them back down to the normal lying position @@ -190,6 +196,7 @@ anchored = FALSE buildstacktype = /obj/item/stack/sheet/mineral/wood buildstackamount = 10 + elevation = 0 var/owned = FALSE /obj/structure/bed/dogbed/ian @@ -238,6 +245,7 @@ name = "dirty mattress" desc = "An old grubby mattress. You try to not think about what could be the cause of those stains." icon_state = "dirty_mattress" + elevation = 7 /obj/structure/bed/maint/Initialize(mapload) . = ..() @@ -250,15 +258,17 @@ icon_state = "bed_double" buildstackamount = 4 max_buckled_mobs = 2 - ///The mob who buckled to this bed second, to avoid other mobs getting pixel-shifted before he unbuckles. + ///The mob who buckled to this bed second, to avoid other mobs getting pixel-shifted before they unbuckle. var/mob/living/goldilocks /obj/structure/bed/double/post_buckle_mob(mob/living/target) - if(buckled_mobs.len > 1 && !goldilocks) //Push the second buckled mob a bit higher from the normal lying position - target.pixel_y = target.base_pixel_y + 6 + . = ..() + if(length(buckled_mobs) > 1 && !goldilocks) // Push the second buckled mob a bit higher from the normal lying position + target.pixel_y += 14 goldilocks = target /obj/structure/bed/double/post_unbuckle_mob(mob/living/target) - target.pixel_y = target.base_pixel_y + target.body_position_pixel_y_offset + . = ..() if(target == goldilocks) + target.pixel_y -= 14 goldilocks = null diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 203fbc7cfdbe..9fbd47e391a7 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -11,6 +11,7 @@ integrity_failure = 0.25 armor_type = /datum/armor/structure_closet blocks_emissive = EMISSIVE_BLOCK_GENERIC + pass_flags_self = LETPASSCLICKS /// The overlay for the closet's door var/obj/effect/overlay/closet_door/door_obj diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index 0a20e984485d..c25b4b27cf0e 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -47,11 +47,15 @@ if(!do_alert) return ..() - // Cache the list before we open the box. - var/list/alerted = viewers(7, src) + // Get mobs in view before we open the box. + var/list/alerted = list() + for(var/mob/living/alerted_mob in viewers(7, src)) + if(alerted_mob.stat != CONSCIOUS || alerted_mob.is_blind()) + continue + alerted += alerted_mob // There are no mobs to alert? - if(!(locate(/mob/living) in alerted)) + if(!length(alerted)) return ..() . = ..() @@ -62,11 +66,10 @@ COOLDOWN_START(src, alert_cooldown, time_between_alerts) - for(var/mob/living/alerted_mob in alerted) - if(alerted_mob.stat == CONSCIOUS) - if(!alerted_mob.incapacitated(IGNORE_RESTRAINTS)) - alerted_mob.face_atom(src) - alerted_mob.do_alert_animation() + for(var/mob/living/alerted_mob as anything in alerted) + if(!alerted_mob.incapacitated(IGNORE_RESTRAINTS)) + alerted_mob.face_atom(src) + alerted_mob.do_alert_animation() playsound(loc, 'sound/machines/chime.ogg', 50, FALSE, -5) diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index 086c13fdbb2c..60c23136008d 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -20,8 +20,8 @@ new /obj/item/clothing/head/bio_hood/virology(src) new /obj/item/clothing/mask/breath(src) new /obj/item/tank/internals/oxygen(src) - new /obj/item/extrapolator(src) - new /obj/item/extrapolator(src) +// new /obj/item/extrapolator(src) // monkestation edit - extrapolators are worthless for pathology +// new /obj/item/extrapolator(src) /obj/structure/closet/l3closet/security 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 8aa23966eb08..f2b700ec622d 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -18,4 +18,4 @@ new /obj/item/roulette_wheel_beacon(src) new /obj/item/storage/fancy/candle_box(src) new /obj/item/storage/fancy/candle_box(src) - new /obj/item/choice_beacon/jukebox(src) //this line is a monkestation edit! + new /obj/item/jukebox_beacon(src) //monkestation edit diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index 74de666ed80e..366652a48b7a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -6,7 +6,7 @@ /obj/structure/closet/secure_closet/quartermaster/PopulateContents() ..() new /obj/item/storage/lockbox/medal/cargo(src) - new /obj/item/radio/headset/heads/qm(src) +/// new /obj/item/radio/headset/heads/qm(src) // Monkestation Edit - QM is not a head. They do not need a command headset. new /obj/item/megaphone/cargo(src) new /obj/item/tank/internals/emergency_oxygen(src) new /obj/item/universal_scanner(src) @@ -15,6 +15,7 @@ new /obj/item/storage/photo_album/qm(src) new /obj/item/circuitboard/machine/ore_silo(src) new /obj/item/storage/bag/garment/quartermaster(src) + new /obj/item/encryptionkey/headset_cargo(src) // Monkestation Edit - An extra encryption key for someone joining Cargyptia /obj/structure/closet/secure_closet/quartermaster/populate_contents_immediate() . = ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 49fadd6ec983..b04bb4df6d0b 100755 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -174,6 +174,7 @@ new /obj/item/pinpointer/crew(src) new /obj/item/binoculars(src) new /obj/item/storage/box/rxglasses/spyglasskit(src) + new /obj/item/clothing/head/fedora/inspector_hat(src) /obj/structure/closet/secure_closet/injection name = "lethal injections locker" diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index c46c9d06fbef..6db98ac0d69a 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -17,7 +17,13 @@ drag_slowdown = 0 door_anim_time = 0 // no animation pass_flags_self = PASSSTRUCTURE | LETPASSTHROW - var/crate_climb_time = 20 + /// Mobs standing on it are nudged up by this amount. + var/elevation = 14 + /// The same, but when the crate is open + var/elevation_open = 14 + /// The time spent to climb this crate. + var/crate_climb_time = 2 SECONDS + /// The reference of the manifest paper attached to the cargo crate. var/obj/item/paper/fluff/jobs/cargo/manifest/manifest /// Where the Icons for lids are located. var/lid_icon = 'icons/obj/storage/crates.dmi' @@ -35,6 +41,8 @@ AddElement(/datum/element/climbable, climb_time = crate_climb_time * 0.5, climb_stun = 0) else AddElement(/datum/element/climbable, climb_time = crate_climb_time, climb_stun = 0) + if(elevation) + AddElement(/datum/element/elevation, pixel_shift = elevation) update_appearance() /obj/structure/closet/crate/Destroy() @@ -77,11 +85,21 @@ . = ..() RemoveElement(/datum/element/climbable, climb_time = crate_climb_time, climb_stun = 0) AddElement(/datum/element/climbable, climb_time = crate_climb_time * 0.5, climb_stun = 0) + if(elevation != elevation_open) + if(elevation) + RemoveElement(/datum/element/elevation, pixel_shift = elevation) + if(elevation_open) + AddElement(/datum/element/elevation, pixel_shift = elevation_open) /obj/structure/closet/crate/after_close(mob/living/user, force) . = ..() RemoveElement(/datum/element/climbable, climb_time = crate_climb_time * 0.5, climb_stun = 0) AddElement(/datum/element/climbable, climb_time = crate_climb_time, climb_stun = 0) + if(elevation != elevation_open) + if(elevation_open) + RemoveElement(/datum/element/elevation, pixel_shift = elevation_open) + if(elevation) + AddElement(/datum/element/elevation, pixel_shift = elevation) /obj/structure/closet/crate/open(mob/living/user, force = FALSE) @@ -188,6 +206,8 @@ name = "laundry cart" desc = "A large cart for hauling around large amounts of laundry." icon_state = "laundry" + elevation = 14 + elevation_open = 14 /obj/structure/closet/crate/medical desc = "A medical crate." diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm index 867ede6d88d6..7b7b56bde6d8 100644 --- a/code/game/objects/structures/crates_lockers/crates/bins.dm +++ b/code/game/objects/structures/crates_lockers/crates/bins.dm @@ -8,6 +8,8 @@ horizontal = FALSE delivery_icon = null can_install_electronics = FALSE + elevation = 17 + elevation_open = 17 /obj/structure/closet/crate/bin/Initialize(mapload) . = ..() diff --git a/code/game/objects/structures/crates_lockers/crates/critter.dm b/code/game/objects/structures/crates_lockers/crates/critter.dm index 6f27595b8d8a..1a3450083206 100644 --- a/code/game/objects/structures/crates_lockers/crates/critter.dm +++ b/code/game/objects/structures/crates_lockers/crates/critter.dm @@ -13,8 +13,11 @@ open_sound_volume = 25 close_sound_volume = 50 contents_pressure_protection = 0.8 - var/obj/item/tank/internals/emergency_oxygen/tank can_install_electronics = FALSE + elevation = 21 + elevation_open = 0 + + var/obj/item/tank/internals/emergency_oxygen/tank /obj/structure/closet/crate/critter/Initialize(mapload) . = ..() diff --git a/code/game/objects/structures/crates_lockers/crates/large.dm b/code/game/objects/structures/crates_lockers/crates/large.dm index 94318d4a5b91..9600a7833c56 100644 --- a/code/game/objects/structures/crates_lockers/crates/large.dm +++ b/code/game/objects/structures/crates_lockers/crates/large.dm @@ -13,6 +13,7 @@ open_sound_volume = 25 close_sound_volume = 50 can_install_electronics = FALSE + elevation = 22 // Stops people from "diving into" a crate you can't open normally divable = FALSE diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 9d4e14339f11..8869e592e485 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -35,7 +35,7 @@ to_chat(user, span_warning("You are not capable of wearing underwear.")) return - var/choice = tgui_input_list(user, "Underwear, Undershirt, or Socks?", "Changing", list("Underwear","Underwear Color","Undershirt","Socks")) + var/choice = tgui_input_list(user, "Underwear, Undershirt, or Socks?", "Changing", list("Underwear","Underwear Color","Undershirt","Socks", "Socks Color")) //MONKESTATION EDIT if(isnull(choice)) return @@ -47,7 +47,7 @@ if(new_undies) dressing_human.underwear = new_undies if("Underwear Color") - var/new_underwear_color = input(dressing_human, "Choose your underwear color", "Underwear Color", dressing_human.underwear_color) as color|null + var/new_underwear_color = tgui_color_picker(dressing_human, "Choose your underwear color", "Underwear Color", dressing_human.underwear_color) if(new_underwear_color) dressing_human.underwear_color = sanitize_hexcolor(new_underwear_color) if("Undershirt") @@ -58,6 +58,10 @@ var/new_socks = tgui_input_list(user, "Select your socks", "Changing", GLOB.socks_list) if(new_socks) dressing_human.socks= new_socks + if("Socks Color") //MONKESTATION EDIT + var/new_socks_color = input(dressing_human, "Choose your socks color", "Socks Color", dressing_human.socks_color) as color|null + if(new_socks_color) + dressing_human.socks_color = sanitize_hexcolor(new_socks_color) add_fingerprint(dressing_human) dressing_human.update_body() diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm index ddafc91854c3..dc664a1650ad 100644 --- a/code/game/objects/structures/headpike.dm +++ b/code/game/objects/structures/headpike.dm @@ -47,11 +47,11 @@ . = ..() if(!victim) return - var/mutable_appearance/MA = new() - MA.copy_overlays(victim) - MA.pixel_y = 12 - MA.pixel_x = pixel_x - . += victim + var/mutable_appearance/appearance = new() + appearance.copy_overlays(victim) + appearance.pixel_y = 12 + appearance.layer = layer + 0.1 + . += appearance /obj/structure/headpike/handle_atom_del(atom/A) if(A == victim) diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm index 40c5256915bd..ce0668568c6e 100644 --- a/code/game/objects/structures/icemoon/cave_entrance.dm +++ b/code/game/objects/structures/icemoon/cave_entrance.dm @@ -20,6 +20,9 @@ GLOBAL_LIST_INIT(ore_probability, list( mob_types = list(/mob/living/basic/mining/wolf) move_resist = INFINITY anchored = TRUE + scanner_taggable = TRUE + mob_gps_id = "WF" // wolf + spawner_gps_id = "Animal Den" /obj/structure/spawner/ice_moon/Initialize(mapload) . = ..() @@ -65,6 +68,7 @@ GLOBAL_LIST_INIT(ore_probability, list( max_mobs = 1 spawn_time = 60 SECONDS mob_types = list(/mob/living/simple_animal/hostile/asteroid/polarbear) + mob_gps_id = "BR" // bear /obj/structure/spawner/ice_moon/polarbear/clear_rock() for(var/turf/potential in RANGE_TURFS(1, src)) @@ -79,6 +83,8 @@ GLOBAL_LIST_INIT(ore_probability, list( mob_types = list(/mob/living/basic/mining/ice_demon) light_outer_range = 1 light_color = COLOR_SOFT_RED + mob_gps_id = "WT|B" // watcher | bluespace + spawner_gps_id = "Netheric Distortion" /obj/structure/spawner/ice_moon/demonic_portal/Initialize(mapload) . = ..() @@ -100,9 +106,11 @@ GLOBAL_LIST_INIT(ore_probability, list( /obj/structure/spawner/ice_moon/demonic_portal/ice_whelp mob_types = list(/mob/living/basic/mining/ice_whelp) + mob_gps_id = "ID|W" // ice drake | whelp /obj/structure/spawner/ice_moon/demonic_portal/snowlegion mob_types = list(/mob/living/basic/mining/legion/snow/spawner_made) + mob_gps_id = "LG|S" // legion | snow /obj/effect/collapsing_demonic_portal name = "collapsing demonic portal" diff --git a/code/game/objects/structures/janitor.dm b/code/game/objects/structures/janitor.dm index 7b8426074f6b..3d7408e60475 100644 --- a/code/game/objects/structures/janitor.dm +++ b/code/game/objects/structures/janitor.dm @@ -3,7 +3,7 @@ /obj/structure/mop_bucket name = "mop bucket" desc = "Fill it with water, but don't forget a mop!" - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/service/janitor.dmi' icon_state = "mopbucket" density = TRUE var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index 9b7b5590018e..ef6ea9d433e8 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -224,17 +224,6 @@ use(user, going_up = FALSE) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/structure/ladder/attack_slime(mob/user, list/modifiers) - use(user) - return TRUE - -/obj/structure/ladder/attack_slime_secondary(mob/user, list/modifiers) - . = ..() - if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) - return - use(user, going_up = FALSE) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - /obj/structure/ladder/attackby(obj/item/item, mob/user, params) use(user) return TRUE diff --git a/code/game/objects/structures/lavaland/necropolis_tendril.dm b/code/game/objects/structures/lavaland/necropolis_tendril.dm index 3a7aab6d977c..53776bd418bd 100644 --- a/code/game/objects/structures/lavaland/necropolis_tendril.dm +++ b/code/game/objects/structures/lavaland/necropolis_tendril.dm @@ -14,20 +14,23 @@ move_resist=INFINITY // just killing it tears a massive hole in the ground, let's not move it anchored = TRUE resistance_flags = FIRE_PROOF | LAVA_PROOF - - var/gps = null var/obj/effect/light_emitter/tendril/emitted_light - + scanner_taggable = TRUE + mob_gps_id = "WT" + spawner_gps_id = "Necropolis Tendril" var/deconstruct_override = FALSE // Monkestation addition: override for ocean tendrils /obj/structure/spawner/lavaland/goliath mob_types = list(/mob/living/basic/mining/goliath) + mob_gps_id = "GL" /obj/structure/spawner/lavaland/legion mob_types = list(/mob/living/basic/mining/legion/spawner_made) + mob_gps_id = "LG" /obj/structure/spawner/lavaland/icewatcher mob_types = list(/mob/living/basic/mining/watcher/icewing) + mob_gps_id = "WT|I" // icewing GLOBAL_LIST_INIT(tendrils, list()) /obj/structure/spawner/lavaland/Initialize(mapload) @@ -68,7 +71,6 @@ GLOBAL_LIST_INIT(tendrils, list()) L.client.give_award(/datum/award/score/tendril_score, L) //Progresses score by one GLOB.tendrils -= src QDEL_NULL(emitted_light) - QDEL_NULL(gps) return ..() /obj/effect/light_emitter/tendril diff --git a/code/game/objects/structures/maintenance.dm b/code/game/objects/structures/maintenance.dm index d0eef52a8fb3..ceb62ec3048e 100644 --- a/code/game/objects/structures/maintenance.dm +++ b/code/game/objects/structures/maintenance.dm @@ -150,7 +150,7 @@ at the cost of risking a vicious bite.**/ var/altar_result = show_radial_menu(user, src, altar_options, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) switch(altar_result) if("Change Color") - var/chosen_color = input(user, "", "Choose Color", pants_color) as color|null + var/chosen_color = tgui_color_picker(user, "", "Choose Color", pants_color) if(!isnull(chosen_color) && user.can_perform_action(src)) pants_color = chosen_color if("Create Artefact") diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 96abe485a18e..fbf2ad8e2815 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -8,6 +8,22 @@ max_integrity = 200 integrity_failure = 0.5 +/obj/structure/mirror/Initialize(mapload) + . = ..() + var/static/list/reflection_filter = alpha_mask_filter(icon = icon('icons/obj/watercloset.dmi', "mirror_mask")) + var/static/matrix/reflection_matrix = matrix(0.75, 0, 0, 0, 0.75, 0) + var/datum/callback/can_reflect = CALLBACK(src, PROC_REF(can_reflect)) + var/list/update_signals = list(COMSIG_ATOM_BREAK) + AddComponent(/datum/component/reflection, reflection_filter = reflection_filter, reflection_matrix = reflection_matrix, can_reflect = can_reflect, update_signals = update_signals) + +/obj/structure/mirror/proc/can_reflect(atom/movable/target) + ///I'm doing it this way too, because the signal is sent before the broken variable is set to TRUE. + if(atom_integrity <= integrity_failure * max_integrity) + return FALSE + if(broken || !isliving(target) || HAS_TRAIT(target, TRAIT_NO_MIRROR_REFLECTION)) + return FALSE + return TRUE + MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror, 28) /obj/structure/mirror/Initialize(mapload) @@ -203,7 +219,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror, 28) amazed_human.dna.update_ui_block(DNA_SKIN_TONE_BLOCK) if(MUTCOLORS in amazed_human.dna.species.species_traits) - var/new_mutantcolor = input(user, "Choose your skin color:", "Race change", amazed_human.dna.features["mcolor"]) as color|null + var/new_mutantcolor = tgui_color_picker(user, "Choose your skin color:", "Race change", amazed_human.dna.features["mcolor"]) if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return TRUE if(new_mutantcolor) @@ -253,21 +269,21 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror, 28) if(hairchoice == "Style") //So you just want to use a mirror then? return ..() else - var/new_hair_color = input(amazed_human, "Choose your hair color", "Hair Color",amazed_human.hair_color) as color|null + var/new_hair_color = tgui_color_picker(amazed_human, "Choose your hair color", "Hair Color", amazed_human.hair_color) if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return TRUE if(new_hair_color) amazed_human.hair_color = sanitize_hexcolor(new_hair_color) amazed_human.dna.update_ui_block(DNA_HAIR_COLOR_BLOCK) if(amazed_human.gender == "male") - var/new_face_color = input(amazed_human, "Choose your facial hair color", "Hair Color", amazed_human.facial_hair_color) as color|null + var/new_face_color = tgui_color_picker(amazed_human, "Choose your facial hair color", "Hair Color", amazed_human.facial_hair_color) if(new_face_color) amazed_human.facial_hair_color = sanitize_hexcolor(new_face_color) amazed_human.dna.update_ui_block(DNA_FACIAL_HAIR_COLOR_BLOCK) amazed_human.update_body_parts() if(BODY_ZONE_PRECISE_EYES) - var/new_eye_color = input(amazed_human, "Choose your eye color", "Eye Color", amazed_human.eye_color_left) as color|null + var/new_eye_color = tgui_color_picker(amazed_human, "Choose your eye color", "Eye Color", amazed_human.eye_color_left) if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return TRUE if(new_eye_color) diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm index ca5c1c9e999d..45cef86f422a 100644 --- a/code/game/objects/structures/railings.dm +++ b/code/game/objects/structures/railings.dm @@ -8,9 +8,9 @@ density = TRUE anchored = TRUE pass_flags_self = LETPASSTHROW|PASSSTRUCTURE - /// armor more or less consistent with grille. max_integrity about one time and a half that of a grille. + /// armor is a little bit less than a grille. max_integrity about half that of a grille. armor_type = /datum/armor/structure_railing - max_integrity = 75 + max_integrity = 25 var/climbable = TRUE ///Initial direction of the railing. @@ -19,9 +19,9 @@ var/item_deconstruct = /obj/item/stack/rods /datum/armor/structure_railing - melee = 50 - bullet = 70 - laser = 70 + melee = 35 + bullet = 50 + laser = 50 energy = 100 bomb = 10 @@ -41,6 +41,19 @@ ) AddElement(/datum/element/connect_loc, loc_connections) + var/static/list/tool_behaviors = list( + TOOL_WELDER = list( + SCREENTIP_CONTEXT_LMB = "Repair", + ), + TOOL_WRENCH = list( + SCREENTIP_CONTEXT_LMB = "Anchor/Unanchor", + ), + TOOL_WIRECUTTER = list( + SCREENTIP_CONTEXT_LMB = "Deconstruct", + ), + ) + AddElement(/datum/element/contextual_screentip_tools, tool_behaviors) + AddComponent(/datum/component/simple_rotation, ROTATION_NEEDS_ROOM) /obj/structure/railing/attackby(obj/item/I, mob/living/user, params) @@ -65,11 +78,10 @@ /obj/structure/railing/wirecutter_act(mob/living/user, obj/item/I) . = ..() - if(!anchored) - to_chat(user, span_warning("You cut apart the railing.")) - I.play_tool_sound(src, 100) - deconstruct() - return TRUE + to_chat(user, span_warning("You cut apart the railing.")) + I.play_tool_sound(src, 100) + deconstruct() + return TRUE /obj/structure/railing/deconstruct(disassembled) if((flags_1 & NODECONSTRUCT_1)) diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm index cc020f275ae0..29a63b1bff80 100644 --- a/code/game/objects/structures/spawner.dm +++ b/code/game/objects/structures/spawner.dm @@ -15,6 +15,52 @@ var/mob_types = list(/mob/living/basic/carp) var/spawn_text = "emerges from" var/spawner_type = /datum/component/spawner + /// Is this spawner taggable with something? + var/scanner_taggable = FALSE + /// If this spawner's taggable, what can we tag it with? + var/static/list/scanner_types = list(/obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner) + /// If this spawner's taggable, what's the text we use to describe what we can tag it with? + var/scanner_descriptor = "mining analyzer" + /// Has this spawner been tagged/analyzed by a mining scanner? + var/gps_tagged = FALSE + /// A short identifier for the mob it spawns. Keep around 3 characters or less? + var/mob_gps_id = "???" + /// A short identifier for what kind of spawner it is, for use in putting together its GPS tag. + var/spawner_gps_id = "Creature Nest" + /// A complete identifier. Generated on tag (if tagged), used for its examine. + var/assigned_tag + +/obj/structure/spawner/examine(mob/user) + . = ..() + if(!scanner_taggable) + return + if(gps_tagged) + . += span_notice("A holotag's been attached, projecting \"[assigned_tag]\".") + else + . += span_notice("It looks like you could probably scan and tag it with a [scanner_descriptor].") + +/obj/structure/spawner/attackby(obj/item/item, mob/user, params) + . = ..() + if(.) + return TRUE + if(scanner_taggable && is_type_in_list(item, scanner_types)) + gps_tag(user) + return TRUE + +/// Tag the spawner, prefixing its GPS entry with an identifier - or giving it one, if nonexistent. +/obj/structure/spawner/proc/gps_tag(mob/user) + if(gps_tagged) + to_chat(user, span_warning("[src] already has a holotag attached!")) + return + to_chat(user, span_notice("You affix a holotag to [src].")) + playsound(src, 'sound/machines/twobeep.ogg', 100) + gps_tagged = TRUE + assigned_tag = "\[[mob_gps_id]-[rand(100,999)]\] " + spawner_gps_id + var/datum/component/gps/our_gps = GetComponent(/datum/component/gps) + if(our_gps) + our_gps.gpstag = assigned_tag + return + AddComponent(/datum/component/gps, assigned_tag) /obj/structure/spawner/Initialize(mapload) . = ..() @@ -33,6 +79,8 @@ spawn_text = "warps in from" mob_types = list(/mob/living/basic/trooper/syndicate/ranged) faction = list(ROLE_SYNDICATE) + mob_gps_id = "SYN" // syndicate + spawner_gps_id = "Hostile Warp Beacon" /obj/structure/spawner/skeleton name = "bone pit" @@ -45,6 +93,8 @@ mob_types = list(/mob/living/basic/skeleton) spawn_text = "climbs out of" faction = list(FACTION_SKELETON) + mob_gps_id = "SKL" // skeletons + spawner_gps_id = "Bone Pit" /obj/structure/spawner/clown name = "Laughing Larry" @@ -68,6 +118,8 @@ ) spawn_text = "climbs out of" faction = list(FACTION_CLOWN) + mob_gps_id = "???" // clowns + spawner_gps_id = "Clown Planet Distortion" /obj/structure/spawner/mining name = "monster den" @@ -81,7 +133,7 @@ /mob/living/basic/mining/basilisk, /mob/living/basic/mining/goldgrub, /mob/living/basic/mining/goliath/ancient, - /mob/living/basic/mining/legion, + /mob/living/basic/mining/hivelord, /mob/living/basic/wumborian_fugu, ) faction = list(FACTION_MINING) @@ -90,26 +142,31 @@ name = "goldgrub den" desc = "A den housing a nest of goldgrubs, annoying but arguably much better than anything else you'll find in a nest." mob_types = list(/mob/living/basic/mining/goldgrub) + mob_gps_id = "GG" /obj/structure/spawner/mining/goliath name = "goliath den" desc = "A den housing a nest of goliaths, oh god why?" mob_types = list(/mob/living/basic/mining/goliath/ancient) + mob_gps_id = "GL|A" /obj/structure/spawner/mining/hivelord name = "hivelord den" desc = "A den housing a nest of hivelords." mob_types = list(/mob/living/basic/mining/hivelord) + mob_gps_id = "HL" /obj/structure/spawner/mining/basilisk name = "basilisk den" desc = "A den housing a nest of basilisks, bring a coat." mob_types = list(/mob/living/basic/mining/basilisk) + mob_gps_id = "BK" /obj/structure/spawner/mining/wumborian name = "wumborian fugu den" desc = "A den housing a nest of wumborian fugus, how do they all even fit in there?" mob_types = list(/mob/living/basic/wumborian_fugu) + mob_gps_id = "WF" /obj/structure/spawner/nether name = "netherworld link" @@ -126,6 +183,9 @@ /mob/living/basic/migo, ) faction = list(FACTION_NETHER) + scanner_taggable = TRUE + mob_gps_id = "?!?" + spawner_gps_id = "Netheric Distortion" /obj/structure/spawner/nether/Initialize(mapload) . = ..() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index b192e934f8d0..576535cf1447 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -23,6 +23,8 @@ pass_flags_self = PASSTABLE | LETPASSTHROW layer = TABLE_LAYER obj_flags = CAN_BE_HIT | IGNORE_DENSITY + ///TRUE if the table can be climbed on and have living mobs placed on it normally, FALSE otherwise + var/climbable = TRUE var/frame = /obj/structure/table_frame var/framestack = /obj/item/stack/rods var/glass_shard_type = /obj/item/shard @@ -43,8 +45,9 @@ if(_buildstack) buildstack = _buildstack AddElement(/datum/element/footstep_override, priority = STEP_SOUND_TABLE_PRIORITY) - - AddElement(/datum/element/climbable) + AddElement(/datum/element/elevation, pixel_shift = 12) + if(climbable) + AddElement(/datum/element/climbable) var/static/list/loc_connections = list( COMSIG_CARBON_DISARM_COLLIDE = PROC_REF(table_carbon), @@ -102,6 +105,9 @@ if(isliving(user.pulling)) var/mob/living/pushed_mob = user.pulling if(pushed_mob.buckled) + if(pushed_mob.buckled == src) + //Already buckled to the table, you probably meant to unbuckle them + return ..() to_chat(user, span_warning("[pushed_mob] is buckled to [pushed_mob.buckled]!")) return if((user.istate & ISTATE_HARM)) @@ -711,8 +717,8 @@ smoothing_groups = null canSmoothWith = null can_buckle = 1 - buckle_lying = NO_BUCKLE_LYING - buckle_requires_restraints = TRUE + buckle_lying = 90 + climbable = FALSE custom_materials = list(/datum/material/silver =SHEET_MATERIAL_AMOUNT) var/mob/living/carbon/patient = null var/obj/machinery/computer/operating/computer = null @@ -724,6 +730,7 @@ if(computer) computer.table = src break + RegisterSignal(loc, COMSIG_ATOM_ENTERED, PROC_REF(mark_patient)) RegisterSignal(loc, COMSIG_ATOM_EXITED, PROC_REF(unmark_patient)) diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index e74c62fe948c..c05f917ae96d 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube.dm @@ -20,6 +20,7 @@ init_tube_dirs() update_appearance() AddElement(/datum/element/climbable) + AddElement(/datum/element/elevation, pixel_shift = 12) /obj/structure/transit_tube/Destroy() for(var/obj/structure/transit_tube_pod/P in loc) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index cc967005b9e3..d028743e3d87 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -763,7 +763,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink/kitchen, (-16)) /obj/structure/curtain/attackby(obj/item/W, mob/user) if (istype(W, /obj/item/toy/crayon)) - color = input(user,"","Choose Color",color) as color + color = tgui_color_picker(user, "", "Choose Color", color) else return ..() diff --git a/code/game/say.dm b/code/game/say.dm index 2afb765f6066..83f14d6e7452 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -164,7 +164,7 @@ GLOBAL_LIST_INIT(freqtospan, list( /// Transforms the speech emphasis mods from [/atom/movable/proc/say_emphasis] into the appropriate HTML tags. Includes escaping. #define ENCODE_HTML_EMPHASIS(input, char, html, varname) \ var/static/regex/##varname = regex("(?$1") + input = varname.Replace_char(input, "<[html]>$1​") //zero-width space to force maptext to respect closing tags. /// Scans the input sentence for speech emphasis modifiers, notably |italics|, +bold+, and _underline_ -mothblocks /atom/movable/proc/say_emphasis(input) diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index e7a793898223..ea3bdf682d3b 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -229,6 +229,8 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( stashed_group.display_turf(new_turf) else for(var/turf/open/adjacent_turf as anything in atmos_adjacent_turfs) + if(QDELETED(adjacent_turf)) + continue adjacent_turf.atmos_adjacent_turfs -= src atmos_adjacent_turfs = null if(pollution) diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index 4a8cad5c2684..5210e90425cd 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -213,7 +213,7 @@ /turf/open/proc/water_vapor_gas_act() MakeSlippery(TURF_WET_WATER, min_wet_time = 100, wet_time_to_add = 50) - for(var/mob/living/simple_animal/slime/M in src) + for(var/mob/living/basic/slime/M in src) M.apply_water() wash(CLEAN_WASH) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 5303c8856515..af91dcc1ef1e 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -195,12 +195,12 @@ GLOBAL_LIST_EMPTY(station_turfs) for(var/A in B.contents) qdel(A) return - QDEL_LIST(blueprint_data) + LAZYCLEARLIST(blueprint_data) flags_1 &= ~INITIALIZED_1 requires_activation = FALSE ..() - if (length(vis_contents)) + if(length(vis_contents)) vis_contents.Cut() SEND_SIGNAL(src, COMSIG_TURF_DESTROY) diff --git a/code/game/world.dm b/code/game/world.dm index faa38e2847bf..386a7ca7c0b3 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -115,7 +115,7 @@ GLOBAL_VAR(restart_counter) // From a really fucking old commit (91d7150) // I wanted to move it but I think this needs to be after /world/New is called but before any sleeps? // - Dominion/Cyberboss - GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000 + GLOB.timezoneOffset = world.timezone * 36000 // First possible sleep() InitTgs() diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 745402dc9a3d..1575b9b38c09 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -98,7 +98,7 @@ GLOBAL_PROTECT(admin_verbs_admin) /client/proc/view_player_camera, /client/proc/log_viewer_new, ) -GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/ban_panel, /client/proc/stickybanpanel)) +GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/ban_panel, /client/proc/stickybanpanel, /client/proc/library_control)) GLOBAL_PROTECT(admin_verbs_ban) GLOBAL_LIST_INIT(admin_verbs_sounds, list(/client/proc/play_local_sound, /client/proc/play_direct_mob_sound, /client/proc/play_sound, /client/proc/set_round_end_sound)) GLOBAL_PROTECT(admin_verbs_sounds) @@ -1085,3 +1085,14 @@ GLOBAL_PROTECT(admin_verbs_poll) QDEL_NULL(segment.ai_controller) segment.AddComponent(/datum/component/mob_chain, front = previous) previous = segment + +/client/proc/library_control() + set name = "Library Management" + set category = "Admin" + if(!check_rights(R_BAN)) + return + + if(!holder.library_manager) + holder.library_manager = new() + holder.library_manager.ui_interact(usr) + SSblackbox.record_feedback("tally", "admin_verb", 1, "Library Management") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! diff --git a/code/modules/admin/antag_panel.dm b/code/modules/admin/antag_panel.dm index 04fb8ef88566..5f8669d16478 100644 --- a/code/modules/admin/antag_panel.dm +++ b/code/modules/admin/antag_panel.dm @@ -53,6 +53,7 @@ GLOBAL_VAR(antag_prototypes)
" obj_count++ result += "Add objective
" + result += "Prompt custom objective entry
" result += "Announce objectives
" return result diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index cdef9b9194cd..3f4833527c89 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -88,7 +88,15 @@ bodies += possessable var/question = "Would you like to be [group_name]?" - var/list/candidates = poll_candidates_for_mobs(question, ROLE_SENTIENCE, ROLE_SENTIENCE, 10 SECONDS, bodies, POLL_IGNORE_SHUTTLE_DENIZENS) + var/list/candidates = SSpolling.poll_ghost_candidates_for_mobs( + question, + role = ROLE_SENTIENCE, + poll_time = 10 SECONDS, + mobs = bodies, + ignore_category = POLL_IGNORE_SHUTTLE_DENIZENS, + pic_source = src, + role_name_text = group_name || "sentience fun balloon" + ) while(LAZYLEN(candidates) && LAZYLEN(bodies)) var/mob/dead/observer/C = pick_n_take(candidates) var/mob/living/body = pick_n_take(bodies) diff --git a/code/modules/admin/greyscale_modify_menu.dm b/code/modules/admin/greyscale_modify_menu.dm index e9936723f78a..d0a5cf921bae 100644 --- a/code/modules/admin/greyscale_modify_menu.dm +++ b/code/modules/admin/greyscale_modify_menu.dm @@ -147,12 +147,12 @@ if("pick_color") var/group = params["color_index"] - var/new_color = input( + var/new_color = tgui_color_picker( usr, "Choose color for greyscale color group [group]:", "Greyscale Modification Menu", split_colors[group] - ) as color|null + ) if(new_color) split_colors[group] = new_color queue_refresh() diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 989e05caf600..c46c4e5f7844 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -35,6 +35,7 @@ GLOBAL_PROTECT(href_token) var/datum/particle_editor/particle_test var/datum/colorblind_tester/color_test = new var/datum/plane_master_debug/plane_debug + var/obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker/library_manager /// Whether or not the user tried to connect, but was blocked by 2FA var/blocked_by_2fa = FALSE diff --git a/code/modules/admin/verbs/admin.dm b/code/modules/admin/verbs/admin.dm index b1f094c09764..1cc7e2555fab 100644 --- a/code/modules/admin/verbs/admin.dm +++ b/code/modules/admin/verbs/admin.dm @@ -37,7 +37,7 @@ if(message) if(!check_rights(R_SERVER,0)) message = adminscrub(message,500) - to_chat(world, "[span_adminnotice("[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:")]\n \t [message]", confidential = TRUE) + send_formatted_announcement(message, "From [usr.client.holder.fakekey ? "Administrator" : usr.key]") log_admin("Announce: [key_name(usr)] : [message]") SSblackbox.record_feedback("tally", "admin_verb", 1, "Announce") //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 97862e89756b..d99de960392d 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -217,6 +217,8 @@ if(tgui_alert(usr,"This mob is being controlled by [M.key]. Are you sure you wish to give someone else control of it? [M.key] will be made a ghost.",,list("Yes","No")) != "Yes") return var/client/newkey = input(src, "Pick the player to put in control.", "New player") as null|anything in sort_list(GLOB.clients) + if(isnull(newkey)) + return var/mob/oldmob = newkey.mob var/delmob = FALSE if((isobserver(oldmob) || tgui_alert(usr,"Do you want to delete [newkey]'s old mob?","Delete?",list("Yes","No")) != "No")) diff --git a/code/modules/admin/verbs/ert.dm b/code/modules/admin/verbs/ert.dm index f87eec87675b..24fe026ec115 100644 --- a/code/modules/admin/verbs/ert.dm +++ b/code/modules/admin/verbs/ert.dm @@ -121,7 +121,7 @@ var/list/spawnpoints = GLOB.emergencyresponseteamspawn var/index = 0 - var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you wish to be considered for [ertemplate.polldesc]?", "deathsquad") + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for [ertemplate.polldesc]?", check_jobban = "deathsquad", pic_source = /obj/item/card/id/advanced/centcom/ert, role_name_text = "emergency response team") var/teamSpawned = FALSE // This list will take priority over spawnpoints if not empty @@ -207,7 +207,7 @@ else earmarked_leader = pick(candidates) - while(numagents && candidates.len) + while(numagents && length(candidates)) var/turf/spawnloc if(length(spawn_turfs)) spawnloc = pick(spawn_turfs) diff --git a/code/modules/admin/verbs/lua/README.md b/code/modules/admin/verbs/lua/README.md index b7b7306ed4d3..707184d4d772 100644 --- a/code/modules/admin/verbs/lua/README.md +++ b/code/modules/admin/verbs/lua/README.md @@ -138,6 +138,12 @@ The `SS13` package contains various helper functions that use code specific to t ### SS13.state A reference to the state datum (`/datum/lua_state`) handling this Lua state. +### SS13.get_runner_ckey() +The ckey of the user who ran the lua script in the current context. Can be unreliable if accessed after sleeping. + +### SS13.get_runner_client() +Returns the client of the user who ran the lua script in the current context. Can be unreliable if accessed after sleeping. + ### SS13.global_proc A wrapper for the magic string used to tell `WrapAdminProcCall` to call a global proc. For instance, `/datum/callback` must be instantiated with `SS13.global_proc` as its first argument to specify that it will be invoking a global proc. @@ -156,6 +162,30 @@ The following example spawns a singularity at the caller's current turf: SS13.new("/obj/singularity", dm.global_proc("_get_step", dm.usr, 0)) ``` +### SS13.new_untracked(type, ...) +Works exactly like SS13.new but it does not store the value to the lua state's `references` list variable. This means that the variable could end up deleted if nothing holds a reference to it. + +### SS13.is_valid(datum) +Can be used to determine if the datum passed is not nil, not undefined and not qdel'd all in one. A helper function that allows you to check the validity from only one function. +Example usage: +```lua +local datum = SS13.new("/datum") +dm.global_proc("qdel", datum) +print(SS13.is_valid(datum)) -- false + +local null = nil +print(SS13.is_valid(null)) -- false + +local datum = SS13.new("/datum") +print(SS13.is_valid(datum)) -- true +``` + +### SS13.type(string) +Converts a string into a type. Equivalent to doing `dm.global_proc("_text2path", "/path/to/type")` + +### SS13.qdel(datum) +Deletes a datum. You shouldn't try to reference it after calling this function. Equivalent to doing `dm.global_proc("qdel", datum)` + ### SS13.await(thing_to_call, proc_to_call, ...) Calls `proc_to_call` on `thing_to_call`, with `...` as its arguments, and sleeps until that proc returns. Returns two return values - the first is the return value of the proc, and the second is the message of any runtime exception thrown by the called proc. @@ -200,6 +230,45 @@ SS13.set_timeout(5, function() end) ``` +### SS13.start_loop(time, amount, func) +Creates a timer which will execute `func` after `time` **seconds**. `func` should not expect to be passed any arguments, as it will not be passed any. Works exactly the same as `SS13.set_timeout` except it will loop the timer `amount` times. If `amount` is set to -1, it will loop indefinitely. Returns a number value, which represents the timer's id. Can be stopped with `SS13.end_loop` +Returns a number, the timer id, which is needed to stop indefinite timers. +The following example will output a message to chat every 5 seconds, repeating 10 times: +```lua +SS13.start_loop(5, 10, function() + dm.global_proc("to_chat", dm.world, "Hello World!") +end) +``` +The following example will output a message to chat every 5 seconds, until `SS13.end_loop(timerid)` is called: +```lua +local timerid = SS13.start_loop(5, -1, function() + dm.global_proc("to_chat", dm.world, "Hello World!") +end) +``` + +### SS13.end_loop(id) +Prematurely ends a loop that hasn't ended yet, created with `SS13.start_loop`. Silently fails if there is no started loop with the specified id. +The following example will output a message to chat every 5 seconds and delete it after it has repeated 20 times: +```lua +local repeated_amount = 0 +-- timerid won't be in the looping function's scope if declared before the function is declared. +local timerid +timerid = SS13.start_loop(5, -1, function() + dm.global_proc("to_chat", dm.world, "Hello World!") + repeated_amount += 1 + if repeated_amount >= 20 then + SS13.end_loop(timerid) + end +end) +``` + +### SS13.stop_all_loops() +Stops all current running loops that haven't ended yet. +Useful in case you accidentally left a indefinite loop running without storing the id anywhere. + +### SS13.stop_tracking(datum) +Stops tracking a datum that was created via `SS13.new` so that it can be garbage collected and deleted without having to qdel. Should be used for things like callbacks and other such datums where the reference to the variable is no longer needed. + --- ## Internal globals diff --git a/code/modules/admin/verbs/lua/_wrappers.dm b/code/modules/admin/verbs/lua/_wrappers.dm index d77d02de4ee6..8e05453d29d5 100644 --- a/code/modules/admin/verbs/lua/_wrappers.dm +++ b/code/modules/admin/verbs/lua/_wrappers.dm @@ -12,9 +12,7 @@ else ret = HandleUserlessProcCall("lua", thing_to_call, proc_name, arguments) if(isdatum(ret)) - SSlua.gc_guard = ret - var/datum/ret_datum = ret - ret_datum.RegisterSignal(ret_datum, COMSIG_QDELETING, TYPE_PROC_REF(/datum, lua_reference_cleanup), override = TRUE) + SSlua.gc_guard += ret return ret /proc/wrap_lua_global_proc_call(proc_name, list/arguments) @@ -27,9 +25,7 @@ else ret = HandleUserlessProcCall("lua", GLOBAL_PROC, proc_name, arguments) if(isdatum(ret)) - SSlua.gc_guard = ret - var/datum/ret_datum = ret - ret_datum.RegisterSignal(ret_datum, COMSIG_QDELETING, TYPE_PROC_REF(/datum, lua_reference_cleanup), override = TRUE) + SSlua.gc_guard += ret return ret /proc/wrap_lua_print(state_id, list/arguments) diff --git a/code/modules/admin/verbs/lua/helpers.dm b/code/modules/admin/verbs/lua/helpers.dm index c0271e0bc72c..66b7c835e9ab 100644 --- a/code/modules/admin/verbs/lua/helpers.dm +++ b/code/modules/admin/verbs/lua/helpers.dm @@ -34,17 +34,3 @@ #undef PROMISE_PENDING #undef PROMISE_RESOLVED #undef PROMISE_REJECTED - -/** - * When a datum is created from lua, it gets held in `SSlua.gc_guard`, and later, - * in the calling state datum's `var/list/references`, just in case it would be garbage - * collected due to there not being any references that BYOND recognizes. To avoid harddels, - * we register this proc as a signal handler any time a DM function called from lua returns - * a datum. - */ -/datum/proc/lua_reference_cleanup() - SIGNAL_HANDLER - if(SSlua.gc_guard == src) - SSlua.gc_guard = null - for(var/datum/lua_state/state in SSlua.states) - state.references -= src diff --git a/code/modules/admin/verbs/lua/lua_editor.dm b/code/modules/admin/verbs/lua/lua_editor.dm index e00d585c3f0e..e31dfd7770f7 100644 --- a/code/modules/admin/verbs/lua/lua_editor.dm +++ b/code/modules/admin/verbs/lua/lua_editor.dm @@ -105,6 +105,11 @@ return if(!check_rights_for(usr.client, R_ADMIN)) return + if(action == "runCodeFile") + params["code"] = file2text(input(usr, "Input File") as null|file) + if(isnull(params["code"])) + return + action = "runCode" switch(action) if("newState") var/state_name = params["name"] @@ -126,6 +131,7 @@ return TRUE if("runCode") var/code = params["code"] + current_state.ckey_last_runner = usr.ckey var/result = current_state.load_script(code) var/index_with_result = current_state.log_result(result) message_admins("[key_name(usr)] executed [length(code)] bytes of lua code. [ADMIN_LUAVIEW_CHUNK(current_state, index_with_result)]") diff --git a/code/modules/admin/verbs/lua/lua_state.dm b/code/modules/admin/verbs/lua/lua_state.dm index df25d070b53f..ee7d6953e12a 100644 --- a/code/modules/admin/verbs/lua/lua_state.dm +++ b/code/modules/admin/verbs/lua/lua_state.dm @@ -21,6 +21,15 @@ GLOBAL_PROTECT(lua_usr) /// A list in which to store datums and lists instantiated in lua, ensuring that they don't get garbage collected var/list/references = list() + /// Ckey of the last user who ran a script on this lua state. + var/ckey_last_runner = "" + + /// Whether the timer.lua script has been included into this lua context state. + var/timer_enabled = FALSE + + /// Callbacks that need to be ran on next tick + var/list/functions_to_execute = list() + /datum/lua_state/vv_edit_var(var_name, var_value) . = ..() if(var_name == NAMEOF(src, internal_id)) @@ -86,6 +95,15 @@ GLOBAL_PROTECT(lua_usr) return result +/datum/lua_state/process(seconds_per_tick) + if(timer_enabled) + var/result = call_function("__Timer_timer_process", seconds_per_tick) + log_result(result, verbose = FALSE) + for(var/function as anything in functions_to_execute) + result = call_function(list("__Timer_callbacks", function)) + log_result(result, verbose = FALSE) + functions_to_execute.Cut() + /datum/lua_state/proc/call_function(function, ...) var/call_args = length(args) > 1 ? args.Copy(2) : list() if(islist(function)) @@ -168,4 +186,18 @@ GLOBAL_PROTECT(lua_usr) for(var/datum/lua_editor/editor as anything in editor_list) SStgui.update_uis(editor) +/// Called by lua scripts when they add an atom to var/list/references so that it gets cleared up on delete. +/datum/lua_state/proc/clear_on_delete(datum/to_clear) + RegisterSignal(to_clear, COMSIG_QDELETING, PROC_REF(on_delete)) + +/// Called by lua scripts when an atom they've added should soft delete and this state should stop tracking it. +/// Needs to unregister all signals. +/datum/lua_state/proc/let_soft_delete(datum/to_clear) + UnregisterSignal(to_clear, COMSIG_QDELETING, PROC_REF(on_delete)) + references -= to_clear + +/datum/lua_state/proc/on_delete(datum/to_clear) + SIGNAL_HANDLER + references -= to_clear + #undef MAX_LOG_REPEAT_LOOKBACK diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm index 3715b3a63492..3a47f8ddf368 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -401,7 +401,7 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller) var/list/candidates = list() if (prefs["offerghosts"]["value"] == "Yes") - candidates = poll_ghost_candidates(replacetext(prefs["ghostpoll"]["value"], "%TYPE%", initial(pathToSpawn.name)), ROLE_TRAITOR) + candidates = SSpolling.poll_ghost_candidates(replacetext(prefs["ghostpoll"]["value"], "%TYPE%", initial(pathToSpawn.name)), check_jobban = ROLE_TRAITOR, pic_source = pathToSpawn, role_name_text = "portal storm") if (prefs["playersonly"]["value"] == "Yes" && length(candidates) < prefs["minplayers"]["value"]) message_admins("Not enough players signed up to create a portal storm, the minimum was [prefs["minplayers"]["value"]] and the number of signups [length(candidates)]") @@ -547,7 +547,7 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller) if(teamsize <= 0) return FALSE - candidates = poll_ghost_candidates("Do you wish to be considered for a Nanotrasen emergency response drone?", "Drone") + candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for a Nanotrasen emergency response drone?", check_jobban = ROLE_DRONE, pic_source = /mob/living/basic/drone/classic, role_name_text = "nanotrasen emergency response drone") if(length(candidates) == 0) return FALSE diff --git a/code/modules/admin/view_variables/filterrific.dm b/code/modules/admin/view_variables/filterrific.dm index 0bd9f51c114f..b1fbee3dd4f5 100644 --- a/code/modules/admin/view_variables/filterrific.dm +++ b/code/modules/admin/view_variables/filterrific.dm @@ -67,7 +67,7 @@ target.add_filter(params["name"], old_filter_data["priority"], new_filter_data) . = TRUE if("modify_color_value") - var/new_color = input(usr, "Pick new filter color", "Filteriffic Colors!") as color|null + var/new_color = tgui_color_picker(usr, "Pick new filter color", "Filteriffic Colors!") if(new_color) target.transition_filter(params["name"], list("color" = new_color), 4) . = TRUE diff --git a/code/modules/admin/view_variables/get_variables.dm b/code/modules/admin/view_variables/get_variables.dm index c59391371dff..ef795e71f974 100644 --- a/code/modules/admin/view_variables/get_variables.dm +++ b/code/modules/admin/view_variables/get_variables.dm @@ -331,7 +331,7 @@ .["value"] = D if(VV_COLOR) - .["value"] = input("Enter new color:", "Color", current_value) as color|null + .["value"] = tgui_color_picker("Enter new color:", "Color", current_value) if(.["value"] == null) .["class"] = null return diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 78f38e0c23f7..24bd2763622c 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -1,3 +1,6 @@ +/// Max length of custom objective text +#define CUSTOM_OBJECTIVE_MAX_LENGTH 300 + GLOBAL_LIST_EMPTY(antagonists) /datum/antagonist @@ -51,7 +54,11 @@ GLOBAL_LIST_EMPTY(antagonists) /// The typepath for the outfit to show in the preview for the preferences menu. var/preview_outfit /// Flags for antags to turn on or off and check! - var/antag_flags = NONE + var/antag_flags = NONE /// If true, this antagonist can assign themself a new objective + var/can_assign_self_objectives = FALSE + /// Default to fill in when entering a custom objective. + var/default_custom_objective = "Cause chaos on the space station." + //ANTAG UI ///name of the UI that will try to open, right now using a generic ui @@ -116,6 +123,15 @@ GLOBAL_LIST_EMPTY(antagonists) ui = new(user, src, ui_name, name) ui.open() +/datum/antagonist/ui_act(action, params) + . = ..() + if(.) + return + switch(action) + if("change_objectives") + submit_player_objective() + return TRUE + /datum/antagonist/ui_state(mob/user) return GLOB.always_state @@ -123,6 +139,7 @@ GLOBAL_LIST_EMPTY(antagonists) var/list/data = list() data["antag_name"] = name data["objectives"] = get_objectives() + data["can_change_objective"] = can_assign_self_objectives return data //button for antags to review their descriptions/info @@ -268,7 +285,14 @@ GLOBAL_LIST_EMPTY(antagonists) /datum/antagonist/proc/replace_banned_player() set waitfor = FALSE - var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as a [name]?", "[name]", job_rank, 5 SECONDS, owner.current) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob( + "Do you want to play as a [name]?", + check_jobban = job_rank || "[name]", + role = job_rank, + poll_time = 5 SECONDS, + target_mob = owner.current, + role_name_text = name + ) if(LAZYLEN(candidates)) var/mob/dead/observer/C = pick(candidates) to_chat(owner, "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!") @@ -479,7 +503,7 @@ GLOBAL_LIST_EMPTY(antagonists) /// Adds a HUD that will show you other members with the same antagonist. /// If an antag typepath is passed to `antag_to_check`, will check that, otherwise will use the source type. -/datum/antagonist/proc/add_team_hud(mob/target, antag_to_check) +/datum/antagonist/proc/add_team_hud(mob/target, antag_to_check, passed_hud_keys) //monkestation edit: adds passed_hud_keys QDEL_NULL(team_hud_ref) team_hud_ref = WEAKREF(target.add_alt_appearance( @@ -487,6 +511,7 @@ GLOBAL_LIST_EMPTY(antagonists) "antag_team_hud_[REF(src)]", hud_image_on(target), antag_to_check || type, + passed_hud_keys || hud_keys, //monkestation edit )) // Add HUDs that they couldn't see before @@ -518,3 +543,56 @@ GLOBAL_LIST_EMPTY(antagonists) /// Used to create objectives for the antagonist. /datum/antagonist/proc/forge_objectives() return + +/** + * Allows player to replace their objectives with a new one they wrote themselves. + * * retain_existing - If true, will just be added as a new objective instead of replacing existing ones. + * * retain_escape - If true, will retain specifically 'escape alive' objectives (or similar) + * * force - Skips the check about whether this antagonist is supposed to set its own objectives, for badminning + */ +/datum/antagonist/proc/submit_player_objective(retain_existing = FALSE, retain_escape = TRUE, force = FALSE) + if (isnull(owner) || isnull(owner.current)) + return + var/mob/living/owner_mob = owner.current + if (!force && !can_assign_self_objectives) + owner_mob.balloon_alert(owner_mob, "can't do that!") + return + var/custom_objective_text = tgui_input_text( + owner_mob, + message = "Specify your new objective.", + title = "Custom Objective", + default = default_custom_objective, + max_length = CUSTOM_OBJECTIVE_MAX_LENGTH, + ) + if (QDELETED(src) || QDELETED(owner_mob) || isnull(custom_objective_text)) + return // Some people take a long-ass time to type maybe they got dusted + + log_game("[key_name(owner_mob)] [retain_existing ? "" : "opted out of their original objectives and "]chose a custom objective: [custom_objective_text]") + message_admins("[ADMIN_LOOKUPFLW(owner_mob)] has chosen a custom antagonist objective: [span_syndradio("[custom_objective_text]")] | [ADMIN_SMITE(owner_mob)] | [ADMIN_SYNDICATE_REPLY(owner_mob)]") + + var/datum/objective/custom/custom_objective = new() + custom_objective.owner = owner + custom_objective.explanation_text = custom_objective_text + custom_objective.completed = TRUE + + if (retain_existing) + objectives.Insert(1, custom_objective) + else if (!retain_escape) + objectives = list(custom_objective) + else + var/static/list/escape_objectives = list( + /datum/objective/escape, + /datum/objective/survive, + /datum/objective/martyr, + /datum/objective/exile, + ) + for (var/datum/objective/check_objective in objectives) + if (is_type_in_list(check_objective, escape_objectives)) + continue + objectives -= check_objective + objectives.Insert(1, custom_objective) + + can_assign_self_objectives = FALSE + owner.announce_objectives() + +#undef CUSTOM_OBJECTIVE_MAX_LENGTH diff --git a/code/modules/antagonists/_common/antag_hud.dm b/code/modules/antagonists/_common/antag_hud.dm index 228bfc354dff..300b4bb4296b 100644 --- a/code/modules/antagonists/_common/antag_hud.dm +++ b/code/modules/antagonists/_common/antag_hud.dm @@ -5,8 +5,9 @@ GLOBAL_LIST_EMPTY_TYPED(has_antagonist_huds, /datum/atom_hud/alternate_appearanc /datum/atom_hud/alternate_appearance/basic/has_antagonist var/antag_datum_type -/datum/atom_hud/alternate_appearance/basic/has_antagonist/New(key, image/I, antag_datum_type) +/datum/atom_hud/alternate_appearance/basic/has_antagonist/New(key, image/I, antag_datum_type, valid_keys) //monkestation edit: adds valid_keys src.antag_datum_type = antag_datum_type + src.valid_keys = valid_keys GLOB.has_antagonist_huds += src return ..(key, I, NONE) @@ -14,8 +15,8 @@ GLOBAL_LIST_EMPTY_TYPED(has_antagonist_huds, /datum/atom_hud/alternate_appearanc GLOB.has_antagonist_huds -= src return ..() -/datum/atom_hud/alternate_appearance/basic/has_antagonist/mobShouldSee(mob/M) - return !!M.mind?.has_antag_datum(antag_datum_type) +///datum/atom_hud/alternate_appearance/basic/has_antagonist/mobShouldSee(mob/M) //monkestation removal, moved to the modular version of this file +// return !!M.mind?.has_antag_datum(antag_datum_type) //monkestation removal /// An alternate appearance that will show all the antagonists this mob has /datum/atom_hud/alternate_appearance/basic/antagonist_hud diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index ec147cb9fb9e..61f5cc5e6432 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -55,7 +55,7 @@ /obj/item/antag_spawner/contract/proc/poll_for_student(mob/living/carbon/human/teacher, apprentice_school) balloon_alert(teacher, "contacting apprentice...") polling = TRUE - var/list/candidates = poll_candidates_for_mob("Do you want to play as a wizard's [apprentice_school] apprentice?", ROLE_WIZARD, ROLE_WIZARD, 15 SECONDS, src) + var/list/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as a wizard's [apprentice_school] apprentice?", check_jobban = ROLE_WIZARD, role = ROLE_WIZARD, poll_time = 15 SECONDS, target_mob = src, pic_source = teacher, role_name_text = "wizard apprentice") polling = FALSE if(!LAZYLEN(candidates)) to_chat(teacher, span_warning("Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.")) @@ -134,7 +134,7 @@ return to_chat(user, span_notice("You activate [src] and wait for confirmation.")) - var/list/nuke_candidates = poll_ghost_candidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE) + var/list/nuke_candidates = SSpolling.poll_ghost_candidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", check_jobban = ROLE_OPERATIVE, role = ROLE_OPERATIVE, poll_time = 15 SECONDS, ignore_category = POLL_IGNORE_SYNDICATE, pic_source = src, role_name_text = "syndicate [borg_to_spawn ? "[borg_to_spawn] cyborg":"operative"]") if(LAZYLEN(nuke_candidates)) if(QDELETED(src) || !check_usability(user)) return @@ -252,7 +252,14 @@ return if(used) return - var/list/candidates = poll_candidates_for_mob("Do you want to play as a [initial(demon_type.name)]?", ROLE_ALIEN, ROLE_ALIEN, 5 SECONDS, src) + var/list/candidates = SSpolling.poll_ghost_candidates( + "Do you want to play as a [initial(demon_type.name)]?", + check_jobban = ROLE_SLAUGHTER_DEMON, + role = ROLE_SLAUGHTER_DEMON, + poll_time = 5 SECONDS, + pic_source = demon_type, + role_name_text = initial(demon_type.name) + ) if(LAZYLEN(candidates)) if(used || QDELETED(src)) return @@ -265,8 +272,7 @@ playsound(user.loc, 'sound/effects/glassbr1.ogg', 100, TRUE) qdel(src) else - to_chat(user, span_warning("You can't seem to work up the nerve to shatter the bottle! Perhaps you should try again later.")) - + to_chat(user, span_warning("The bottle's contents usually pop and boil constantly, but right now they're eerily still and calm. Perhaps you should try again later.")) /obj/item/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, kind = "", datum/mind/user) var/mob/living/basic/demon/spawned = new demon_type(T) diff --git a/code/modules/antagonists/_common/antag_team.dm b/code/modules/antagonists/_common/antag_team.dm index c568c58e3104..902456d909bc 100644 --- a/code/modules/antagonists/_common/antag_team.dm +++ b/code/modules/antagonists/_common/antag_team.dm @@ -58,11 +58,9 @@ GLOBAL_LIST_EMPTY(antagonist_teams) var/win = TRUE var/objective_count = 1 for(var/datum/objective/objective as anything in objectives) - if(objective.check_completion()) - report += "Objective #[objective_count]: [objective.explanation_text] [span_greentext("Success!")]" - else - report += "Objective #[objective_count]: [objective.explanation_text] [span_redtext("Fail.")]" + if(!objective.check_completion()) win = FALSE + report += "Objective #[objective_count]: [objective.explanation_text] [objective.get_roundend_success_suffix()]" objective_count++ if(win) report += span_greentext("The [name] was successful!") diff --git a/code/modules/antagonists/abductor/equipment/glands/slime.dm b/code/modules/antagonists/abductor/equipment/glands/slime.dm index 50e83ee37359..a7764ff214df 100644 --- a/code/modules/antagonists/abductor/equipment/glands/slime.dm +++ b/code/modules/antagonists/abductor/equipment/glands/slime.dm @@ -21,6 +21,5 @@ to_chat(owner, span_warning("You feel nauseated!")) owner.vomit(20) - var/mob/living/simple_animal/slime/Slime = new(get_turf(owner), "grey") - Slime.set_friends(list(owner)) - Slime.set_leader(owner) + var/mob/living/basic/slime/Slime = new(get_turf(owner)) + SEND_SIGNAL(Slime, COMSIG_FRIENDSHIP_CHANGE, owner, 110) diff --git a/code/modules/antagonists/blob/powers.dm b/code/modules/antagonists/blob/powers.dm index 04054f6df85a..6dcc7b47bec8 100644 --- a/code/modules/antagonists/blob/powers.dm +++ b/code/modules/antagonists/blob/powers.dm @@ -194,7 +194,14 @@ if(!factory) return - var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you want to play as a [blobstrain.name] blobbernaut?", ROLE_BLOB, ROLE_BLOB, 50) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + "Do you want to play as a [blobstrain.name] blobbernaut?", + check_jobban = ROLE_BLOB, + role = ROLE_BLOB, + poll_time = 5 SECONDS, + pic_source = /mob/living/basic/blob_minion/blobbernaut/minion, + role_name_text = "blobbernaut" + ) if(!length(candidates)) to_chat(src, span_warning("You could not conjure a sentience for your blobbernaut. Your points have been refunded. Try again later.")) diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index 0655a30f3ff2..b6aa1b00b1c3 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -292,6 +292,7 @@ if(BURN) damage_amount *= fire_resist if(CLONE) + EMPTY_BLOCK_GUARD // Pass else return 0 var/armor_protection = 0 diff --git a/code/modules/antagonists/brainwashing/brainwashing.dm b/code/modules/antagonists/brainwashing/brainwashing.dm index 998b075bb38e..e74e7b32f7f9 100644 --- a/code/modules/antagonists/brainwashing/brainwashing.dm +++ b/code/modules/antagonists/brainwashing/brainwashing.dm @@ -56,10 +56,6 @@ owner.announce_objectives() return ..() -/datum/antagonist/brainwashed/on_mindshield(mob/implanter) - owner.remove_antag_datum(/datum/antagonist/brainwashed) - return COMPONENT_MINDSHIELD_DECONVERTED - /datum/antagonist/brainwashed/admin_add(datum/mind/new_owner,mob/admin) var/mob/living/carbon/C = new_owner.current if(!istype(C)) diff --git a/code/modules/antagonists/changeling/cellular_emporium.dm b/code/modules/antagonists/changeling/cellular_emporium.dm index b4f3ebd20493..68e83ea25e66 100644 --- a/code/modules/antagonists/changeling/cellular_emporium.dm +++ b/code/modules/antagonists/changeling/cellular_emporium.dm @@ -28,43 +28,44 @@ ui = new(user, src, "CellularEmporium", name) ui.open() -/datum/cellular_emporium/ui_data(mob/user) +/datum/cellular_emporium/ui_static_data(mob/user) var/list/data = list() - data["can_readapt"] = changeling.can_respec - - var/genetic_points_remaining = changeling.genetic_points - data["genetic_points_remaining"] = genetic_points_remaining + var/static/list/abilities + if(isnull(abilities)) + abilities = list() + for(var/datum/action/changeling/ability_path as anything in changeling.all_powers) - var/list/abilities = list() - for(var/datum/action/changeling/ability_path as anything in changeling.all_powers) + var/dna_cost = initial(ability_path.dna_cost) - var/dna_cost = initial(ability_path.dna_cost) + if(dna_cost < 0) // 0 = free, but negatives are invalid + continue - if(dna_cost <= 0) - continue + var/list/ability_data = list() + ability_data["name"] = initial(ability_path.name) + ability_data["desc"] = initial(ability_path.desc) + ability_data["path"] = ability_path + ability_data["helptext"] = initial(ability_path.helptext) + ability_data["genetic_point_required"] = dna_cost + ability_data["absorbs_required"] = initial(ability_path.req_absorbs) // compares against changeling true_absorbs + ability_data["dna_required"] = initial(ability_path.req_dna) // compares against changeling absorbed_count - var/list/ability_data = list() - ability_data["name"] = initial(ability_path.name) - ability_data["desc"] = initial(ability_path.desc) - ability_data["path"] = ability_path - ability_data["helptext"] = initial(ability_path.helptext) - ability_data["owned"] = !!changeling.purchased_powers[ability_path] - ability_data["dna_cost"] = dna_cost + abilities += list(ability_data) - var/can_purchase = TRUE - if(initial(ability_path.req_absorbs) > changeling.true_absorbs) - can_purchase = FALSE - if(initial(ability_path.req_dna) > changeling.absorbed_count) - can_purchase = FALSE - if(dna_cost > genetic_points_remaining) - can_purchase = FALSE + // Sorts abilities alphabetically by default + sortTim(abilities, /proc/cmp_assoc_list_name) - ability_data["can_purchase"] = can_purchase + data["abilities"] = abilities + return data - abilities += list(ability_data) +/datum/cellular_emporium/ui_data(mob/user) + var/list/data = list() - data["abilities"] = abilities + data["can_readapt"] = changeling.can_respec + data["owned_abilities"] = assoc_to_keys(changeling.purchased_powers) + data["genetic_points_count"] = changeling.genetic_points + data["absorb_count"] = changeling.true_absorbs + data["dna_count"] = changeling.absorbed_count return data @@ -77,33 +78,29 @@ if("readapt") if(changeling.can_respec) changeling.readapt() + if("evolve") - var/sting_path = text2path(params["path"]) - if(!ispath(sting_path, /datum/action/changeling)) - return - changeling.purchase_power(sting_path) + // purchase_power sanity checks stuff like typepath, DNA, and absorbs for us. + changeling.purchase_power(text2path(params["path"])) return TRUE -/datum/action/innate/cellular_emporium +/datum/action/cellular_emporium name = "Cellular Emporium" button_icon = 'icons/obj/drinks/soda.dmi' button_icon_state = "changelingsting" background_icon_state = "bg_changeling" overlay_icon_state = "bg_changeling_border" - /// The cell emporium we open. - var/datum/cellular_emporium/cellular_emporium + check_flags = NONE -/datum/action/innate/cellular_emporium/New(our_target) +/datum/action/cellular_emporium/New(Target) . = ..() - if(istype(our_target, /datum/cellular_emporium)) - cellular_emporium = our_target - else - CRASH("cellular_emporium action created with non emporium") + if(!istype(Target, /datum/cellular_emporium)) + stack_trace("cellular_emporium action created with non-emporium.") + qdel(src) -/datum/action/innate/cellular_emporium/Destroy() - cellular_emporium = null - return ..() - -/datum/action/innate/cellular_emporium/Activate() - cellular_emporium.ui_interact(owner) +/datum/action/cellular_emporium/Trigger(trigger_flags) + . = ..() + if(!.) + return + target.ui_interact(owner) diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 4b0f92630389..04e1b9ed1e37 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -11,6 +11,8 @@ hijack_speed = 0.5 ui_name = "AntagInfoChangeling" suicide_cry = "FOR THE HIVE!!" + can_assign_self_objectives = TRUE + default_custom_objective = "Consume the station's most valuable genomes." /// Whether to give this changeling objectives or not var/give_objectives = TRUE /// Weather we assign objectives which compete with other lings @@ -62,7 +64,7 @@ /// A reference to our cellular emporium datum. var/datum/cellular_emporium/cellular_emporium /// A reference to our cellular emporium action (which opens the UI for the datum). - var/datum/action/innate/cellular_emporium/emporium_action + var/datum/action/cellular_emporium/emporium_action /// UI displaying how many chems we have var/atom/movable/screen/ling/chems/lingchemdisplay @@ -229,11 +231,11 @@ /* * Instantiate all the default actions of a ling (transform, dna sting, absorb, etc) - * Any Changeling action with `dna_cost == 0` will be added here automatically + * Any Changeling action with dna_cost = CHANGELING_POWER_INNATE will be added here automatically */ /datum/antagonist/changeling/proc/create_innate_actions() for(var/datum/action/changeling/path as anything in all_powers) - if(initial(path.dna_cost) != 0) + if(initial(path.dna_cost) != CHANGELING_POWER_INNATE) continue var/datum/action/changeling/innate_ability = new path() @@ -345,12 +347,11 @@ /datum/antagonist/changeling/proc/regain_powers() emporium_action.Grant(owner.current) for(var/datum/action/changeling/power as anything in innate_powers) - if(power.needs_button) - power.Grant(owner.current) + power.Grant(owner.current) for(var/power_path in purchased_powers) var/datum/action/changeling/power = purchased_powers[power_path] - if(istype(power) && power.needs_button) + if(istype(power)) power.Grant(owner.current) /* @@ -359,8 +360,8 @@ * [sting_path] - the power that's being purchased / evolved. */ /datum/antagonist/changeling/proc/purchase_power(datum/action/changeling/sting_path) - if(!ispath(sting_path)) - CRASH("Changeling purchase_power attempted to purchase an invalid typepath!") + if(!ispath(sting_path, /datum/action/changeling)) + CRASH("Changeling purchase_power attempted to purchase an invalid typepath! (got: [sting_path])") if(purchased_powers[sting_path]) to_chat(owner.current, span_warning("We have already evolved this ability!")) @@ -411,7 +412,8 @@ purchased_powers[power_path] = new_action new_action.on_purchase(owner.current) // Grant() is ran in this proc, see changeling_powers.dm. - log_changeling_power("[key_name(owner)] adapted the [new_action] power") + log_changeling_power("[key_name(owner)] adapted the [new_action.name] power") + SSblackbox.record_feedback("tally", "changeling_power_purchase", 1, new_action.name) return TRUE @@ -531,6 +533,7 @@ new_profile.underwear_color = target.underwear_color new_profile.undershirt = target.undershirt new_profile.socks = target.socks + new_profile.socks_color = target.socks_color //MONKESTATION EDIT // Hair and facial hair gradients, alongside their colours. new_profile.grad_style = LAZYLISTDUPLICATE(target.grad_style) @@ -645,10 +648,6 @@ add_new_profile(owner.current) /datum/antagonist/changeling/forge_objectives() - //OBJECTIVES - random traitor objectives. Unique objectives "steal brain" and "identity theft". - //No escape alone because changelings aren't suited for it and it'd probably just lead to rampant robusting - //If it seems like they'd be able to do it in play, add a 10% chance to have to escape alone - var/escape_objective_possible = TRUE switch(competitive_objectives ? rand(1,3) : 1) @@ -755,6 +754,7 @@ user.underwear_color = chosen_profile.underwear_color user.undershirt = chosen_profile.undershirt user.socks = chosen_profile.socks + user.socks_color =chosen_profile.socks_color //MONKESTATION EDIT user.age = chosen_profile.age user.physique = chosen_profile.physique user.grad_style = LAZYLISTDUPLICATE(chosen_profile.grad_style) @@ -890,6 +890,8 @@ var/undershirt /// The socks worn by the profile source var/socks + /// The colour of the socks worn by profile source + var/socks_color //MONKESTATION EDIT /// A list of paths for any skill chips the profile source had installed var/list/skillchips = list() /// What scars the profile sorce had, in string form (like persistent scars) @@ -935,6 +937,7 @@ new_profile.underwear_color = underwear_color new_profile.undershirt = undershirt new_profile.socks = socks + new_profile.socks_color = socks_color //MONKESTATION EDIT new_profile.worn_icon_list = worn_icon_list.Copy() new_profile.worn_icon_state_list = worn_icon_state_list.Copy() new_profile.skillchips = skillchips.Copy() @@ -960,11 +963,9 @@ if(objectives.len) var/count = 1 for(var/datum/objective/objective in objectives) - if(objective.check_completion()) - parts += "Objective #[count]: [objective.explanation_text] [span_greentext("Success!")]" - else - parts += "Objective #[count]: [objective.explanation_text] [span_redtext("Fail.")]" + if(!objective.check_completion()) changeling_win = FALSE + parts += "Objective #[count]: [objective.explanation_text] [objective.get_roundend_success_suffix()]" count++ if(changeling_win) @@ -1038,9 +1039,6 @@ /datum/outfit/changeling_space name = "Changeling (Space)" - - head = /obj/item/clothing/head/helmet/space/changeling - suit = /obj/item/clothing/suit/space/changeling l_hand = /obj/item/melee/arm_blade #undef FORMAT_CHEM_CHARGES_TEXT diff --git a/code/modules/antagonists/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm index 96cad5107355..1786ea648dcd 100644 --- a/code/modules/antagonists/changeling/changeling_power.dm +++ b/code/modules/antagonists/changeling/changeling_power.dm @@ -7,17 +7,31 @@ background_icon_state = "bg_changeling" overlay_icon_state = "bg_changeling_border" button_icon = 'icons/mob/actions/actions_changeling.dmi' - var/needs_button = TRUE//for passive abilities like hivemind that dont need a button - var/helptext = "" // Details - var/chemical_cost = 0 // negative chemical cost is for passive abilities (chemical glands) - var/dna_cost = -1 //cost of the sting in dna points. 0 = auto-purchase (see changeling.dm), -1 = cannot be purchased - var/req_dna = 0 //amount of dna needed to use this ability. Changelings always have atleast 1 - var/req_human = FALSE //if you need to be human to use this ability - var/req_absorbs = 0 //similar to req_dna, but only gained from absorbing, not DNA sting - ///Maximum stat before the ability is blocked. For example, `UNCONSCIOUS` prevents it from being used when in hard crit or dead, while `DEAD` allows the ability to be used on any stat values. + /// Details displayed in fine print within the changling emporium + var/helptext = "" + /// How many changeling chems it costs to use + var/chemical_cost = 0 + /** + * Cost of the ability in dna points, negative values are not valid + * + * Special numbers include [CHANGELING_POWER_INNATE], which are given to changeling for free without bring prompted + * and [CHANGELING_POWER_UNOBTAINABLE], which are not available for purchase in the changeling emporium + */ + var/dna_cost = CHANGELING_POWER_UNOBTAINABLE + /// Amount of dna needed to use this ability. Note, changelings always have atleast 1 + var/req_dna = 0 + /// If you need to be humanoid to use this ability (disincludes monkeys) + var/req_human = FALSE + /// Similar to req_dna, but only gained from absorbing, not DNA sting + var/req_absorbs = 0 + /// Maximum stat before the ability is blocked. + /// For example, `UNCONSCIOUS` prevents it from being used when in hard crit or dead, + /// while `DEAD` allows the ability to be used on any stat values. var/req_stat = CONSCIOUS - var/ignores_fakedeath = FALSE // usable with the FAKEDEATH flag - var/active = FALSE//used by a few powers that toggle + /// usable when the changeling is in death coma + var/ignores_fakedeath = FALSE + /// used by a few powers that toggle + var/active = FALSE /* changeling code now relies on on_purchase to grant powers. @@ -26,10 +40,7 @@ the same goes for Remove(). if you override Remove(), call parent or else your p */ /datum/action/changeling/proc/on_purchase(mob/user, is_respec) - if(!is_respec) - SSblackbox.record_feedback("tally", "changeling_power_purchase", 1, name) - if(needs_button) - Grant(user)//how powers are added rather than the checks in mob.dm + Grant(user)//how powers are added rather than the checks in mob.dm /datum/action/changeling/Trigger(trigger_flags) var/mob/user = owner diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm index 6cc9290b7f7f..cee0f0da5b99 100644 --- a/code/modules/antagonists/changeling/powers/absorb.dm +++ b/code/modules/antagonists/changeling/powers/absorb.dm @@ -3,7 +3,7 @@ desc = "Absorb the DNA of our victim. Requires us to strangle them." button_icon_state = "absorb_dna" chemical_cost = 0 - dna_cost = 0 + dna_cost = CHANGELING_POWER_INNATE req_human = TRUE ///if we're currently absorbing, used for sanity var/is_absorbing = FALSE diff --git a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm index de10b27413a8..b4de878c69ee 100644 --- a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm +++ b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm @@ -3,50 +3,81 @@ /datum/action/changeling/augmented_eyesight name = "Augmented Eyesight" - desc = "Creates more light sensing rods in our eyes, allowing our vision to penetrate most blocking objects. Protects our vision from flashes while inactive." - helptext = "Grants us x-ray vision or flash protection. We will become a lot more vulnerable to flash-based devices while x-ray vision is active." + desc = "Creates more light sensing rods in our eyes, allowing our vision to penetrate most blocking objects. \ + Protects our vision from flashes while inactive." + helptext = "Grants us x-ray vision or flash protection. \ + We will become a lot more vulnerable to flash-based devices while x-ray vision is active." button_icon_state = "augmented_eyesight" chemical_cost = 0 - dna_cost = 2 //Would be 1 without thermal vision + dna_cost = 2 + // Active = Flash weakness and x-ray + // Inactive = Flash protection and no x-ray active = FALSE /datum/action/changeling/augmented_eyesight/on_purchase(mob/user) //The ability starts inactive, so we should be protected from flashes. - ..() - var/obj/item/organ/internal/eyes/E = user.get_organ_slot(ORGAN_SLOT_EYES) - if (E) - E.flash_protect = FLASH_PROTECTION_WELDER //Adjust the user's eyes' flash protection - to_chat(user, "We adjust our eyes to protect them from bright lights.") - else - to_chat(user, "We can't adjust our eyes if we don't have any!") + . = ..() + var/obj/item/organ/internal/eyes/ling_eyes = user.get_organ_slot(ORGAN_SLOT_EYES) + RegisterSignal(user, COMSIG_CARBON_GAIN_ORGAN, PROC_REF(eye_implanted)) + RegisterSignal(user, COMSIG_CARBON_LOSE_ORGAN, PROC_REF(eye_removed)) + if(!isnull(ling_eyes)) + ling_eyes.flash_protect = FLASH_PROTECTION_WELDER //Adjust the user's eyes' flash protection + to_chat(user, span_changeling("We adjust our eyes to protect them from bright lights.")) /datum/action/changeling/augmented_eyesight/sting_action(mob/living/carbon/user) if(!istype(user)) - return + return FALSE + + var/obj/item/organ/internal/eyes/ling_eyes = user.get_organ_slot(ORGAN_SLOT_EYES) + if(isnull(ling_eyes)) + user.balloon_alert(user, "no eyes!") + return FALSE + ..() - var/obj/item/organ/internal/eyes/E = user.get_organ_slot(ORGAN_SLOT_EYES) - if(E) - if(!active) - E.sight_flags |= SEE_MOBS | SEE_OBJS | SEE_TURFS //Add sight flags to the user's eyes - E.flash_protect = FLASH_PROTECTION_SENSITIVE //Adjust the user's eyes' flash protection - to_chat(user, "We adjust our eyes to sense prey through walls.") - active = TRUE //Defined in code/modules/spells/spell.dm - else - E.sight_flags ^= SEE_MOBS | SEE_OBJS | SEE_TURFS //Remove sight flags from the user's eyes - E.flash_protect = FLASH_PROTECTION_WELDER //Adjust the user's eyes' flash protection - to_chat(user, "We adjust our eyes to protect them from bright lights.") - active = FALSE - user.update_sight() + + if(active) + active = FALSE + REMOVE_TRAIT(user, TRAIT_XRAY_VISION, REF(src)) + ling_eyes.flash_protect = FLASH_PROTECTION_WELDER + to_chat(user, span_changeling("We adjust our eyes to protect them from bright lights.")) + else - user.balloon_alert(user, "no eyes!") + active = TRUE + ADD_TRAIT(user, TRAIT_XRAY_VISION, REF(src)) + ling_eyes.flash_protect = FLASH_PROTECTION_SENSITIVE + to_chat(user, span_changeling("We adjust our eyes to sense prey through walls.")) + + user.update_sight() return TRUE +/datum/action/changeling/augmented_eyesight/Remove(mob/user) + var/obj/item/organ/internal/eyes/ling_eyes = user.get_organ_slot(ORGAN_SLOT_EYES) + if(!isnull(ling_eyes)) + ling_eyes.flash_protect = initial(ling_eyes.flash_protect) -/datum/action/changeling/augmented_eyesight/Remove(mob/user) //Get rid of x-ray vision and flash protection when the user refunds this ability - var/obj/item/organ/internal/eyes/E = user.get_organ_slot(ORGAN_SLOT_EYES) - if(E) - if (active) - E.sight_flags ^= SEE_MOBS | SEE_OBJS | SEE_TURFS - else - E.flash_protect = FLASH_PROTECTION_NONE - user.update_sight() - ..() + REMOVE_TRAIT(user, TRAIT_XRAY_VISION, REF(src)) + user.update_sight() + + UnregisterSignal(user, list(COMSIG_CARBON_GAIN_ORGAN, COMSIG_CARBON_LOSE_ORGAN)) + return ..() + +/// Signal proc to grant the correct level of flash sensitivity +/datum/action/changeling/augmented_eyesight/proc/eye_implanted(mob/living/source, obj/item/organ/gained, special) + SIGNAL_HANDLER + + var/obj/item/organ/internal/eyes/ling_eyes = gained + if(!istype(ling_eyes)) + return + if(active) + ling_eyes.flash_protect = FLASH_PROTECTION_SENSITIVE + else + ling_eyes.flash_protect = FLASH_PROTECTION_WELDER + +/// Signal proc to remove flash sensitivity when the eyes are removed +/datum/action/changeling/augmented_eyesight/proc/eye_removed(mob/living/source, obj/item/organ/removed, special) + SIGNAL_HANDLER + + var/obj/item/organ/internal/eyes/ling_eyes = removed + if(!istype(ling_eyes)) + return + ling_eyes.flash_protect = initial(ling_eyes.flash_protect) + // We don't need to bother about removing or adding x-ray vision, fortunately, because they can't see anyways diff --git a/code/modules/antagonists/changeling/powers/defib_grasp.dm b/code/modules/antagonists/changeling/powers/defib_grasp.dm new file mode 100644 index 000000000000..135b9b243f72 --- /dev/null +++ b/code/modules/antagonists/changeling/powers/defib_grasp.dm @@ -0,0 +1,91 @@ +/datum/action/changeling/defib_grasp + name = "Defibrillator Grasp" + desc = "We prepare ourselves while in stasis. If one of our enemies attempts to defibrillate us, \ + we will snatch their arms off and instantly finalize our stasis." + helptext = "This ability is passive, and will trigger when a defibrillator paddle is applied to our chest \ + while we are dead or in stasis. Will also stun cyborgs momentarily." + owner_has_control = FALSE + dna_cost = 0 + + /// Flags to pass to fully heal when we get zapped + var/heal_flags = HEAL_DAMAGE|HEAL_BODY|HEAL_STATUS|HEAL_CC_STATUS + +/datum/action/changeling/defib_grasp/on_purchase(mob/user, is_respec) + . = ..() + RegisterSignal(user, COMSIG_DEFIBRILLATOR_PRE_HELP_ZAP, PROC_REF(on_defibbed)) + +/// Signal proc for [COMSIG_DEFIBRILLATOR_PRE_HELP_ZAP]. +/datum/action/changeling/defib_grasp/proc/on_defibbed(mob/living/carbon/source, mob/living/defibber, obj/item/shockpaddles/defib) + SIGNAL_HANDLER + + if(source.stat != DEAD && !HAS_TRAIT_FROM(source, TRAIT_FAKEDEATH, CHANGELING_TRAIT)) + return + + INVOKE_ASYNC(src, PROC_REF(execute_defib), source, defibber, defib) + return COMPONENT_DEFIB_STOP + +/// Executes the defib action, causing the changeling to fully heal and get up. +/datum/action/changeling/defib_grasp/proc/execute_defib(mob/living/carbon/changeling, mob/living/defibber, obj/item/shockpaddles/defib) + remove_arms(changeling, defibber, defib) + + if(changeling.stat == DEAD) + changeling.revive(heal_flags) + else + changeling.fully_heal(heal_flags) + + changeling.buckled?.unbuckle_mob(changeling) // get us off of stasis beds please + changeling.set_resting(FALSE) + changeling.adjust_jitter(20 SECONDS) + changeling.emote("scream") + playsound(changeling, 'sound/magic/demon_consume.ogg', 50, TRUE) + + // Mimics some real defib stuff (wish this was more generalized) + playsound(defib, SFX_BODYFALL, 50, TRUE) + playsound(defib, 'sound/machines/defib_zap.ogg', 75, TRUE, -1) + playsound(defib, 'sound/machines/defib_success.ogg', 50, FALSE) // I guess + defib.shock_pulling(30, changeling) + +/// Removes the arms of the defibber if they're a carbon, and stuns them for a bit. +/// If they're a cyborg, they'll just get stunned instead. +/datum/action/changeling/defib_grasp/proc/remove_arms(mob/living/carbon/changeling, mob/living/defibber, obj/item/shockpaddles/defib) + + if(iscyborg(defibber)) + if(defibber.flash_act(affect_silicon = TRUE)) + to_chat(defibber, span_userdanger("[changeling] awakens suddenly, overloading your sensors!")) + // run default visible message regardless, no overt indication of the cyborg being overloaded to watchers + + else + defibber.Stun(4 SECONDS) // stuck defibbing + + if(iscarbon(defibber)) + var/removed_arms = 0 + var/mob/living/carbon/carbon_defibber = defibber + for(var/obj/item/bodypart/arm/limb in carbon_defibber.bodyparts) + if(limb.dismember(silent = FALSE)) + removed_arms++ + qdel(limb) + + if(removed_arms) + // OH GOOD HEAVENS + defibber.adjust_jitter(3 MINUTES) + defibber.adjust_dizzy(1 MINUTES) + defibber.adjust_stutter(1 MINUTES) + defibber.adjust_eye_blur(10 SECONDS) + defibber.emote("scream") + + changeling.visible_message( + span_bolddanger("[changeling] awakens suddenly, snatching [defib] out of [defibber]'s hands while ripping off [removed_arms >= 2 ? "" : "one of "][defibber.p_their()] arms!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ignored_mobs = list(changeling, defibber), + ) + to_chat(changeling, span_changeling("The power of [defib] course through us, reviving us from our stasis! \ + With this newfound energy, we snap [removed_arms >= 2 ? "" : "one of "][defibber]'s arms off!")) + to_chat(defibber, span_userdanger("[changeling] awakens suddenly, snapping [removed_arms >= 2 ? "" : "one of "]your arms off!")) + return // no default message if we got an arm + + changeling.visible_message( + span_bolddanger("[changeling] awakens suddenly!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ignored_mobs = changeling, + ) + to_chat(changeling, span_changeling("The power of [defib] course through us, reviving us from our stasis!")) diff --git a/code/modules/antagonists/changeling/powers/fakedeath.dm b/code/modules/antagonists/changeling/powers/fakedeath.dm index 40a71f6ce848..a4b6b54de3d2 100644 --- a/code/modules/antagonists/changeling/powers/fakedeath.dm +++ b/code/modules/antagonists/changeling/powers/fakedeath.dm @@ -3,10 +3,15 @@ desc = "We fall into a stasis, allowing us to regenerate and trick our enemies. Costs 15 chemicals." button_icon_state = "fake_death" chemical_cost = 15 - dna_cost = 0 + dna_cost = CHANGELING_POWER_INNATE req_dna = 1 req_stat = DEAD ignores_fakedeath = TRUE + + /// How long it takes for revival to ready upon entering stasis. + /// The changeling can opt to stay in fakedeath for longer, though. + var/fakedeath_duration = 40 SECONDS + /// If TRUE, we're ready to revive and can click the button to heal. var/revive_ready = FALSE //Fake our own death and fully heal. You will appear to be dead but regenerate fully after a short delay. @@ -14,25 +19,79 @@ ..() if(revive_ready) INVOKE_ASYNC(src, PROC_REF(revive), user) - revive_ready = FALSE - chemical_cost = 15 - to_chat(user, span_notice("We have revived ourselves.")) - build_all_button_icons(UPDATE_BUTTON_NAME|UPDATE_BUTTON_ICON) + disable_revive(user) // this should be already called via signal, but just incase something wacky happens + + else if(enable_fakedeath(user)) + to_chat(user, span_changeling("We begin our stasis, preparing energy to arise once more.")) + else - to_chat(user, span_notice("We begin our stasis, preparing energy to arise once more.")) - user.fakedeath(CHANGELING_TRAIT) //play dead - addtimer(CALLBACK(src, PROC_REF(ready_to_regenerate), user), LING_FAKEDEATH_TIME, TIMER_UNIQUE) + stack_trace("Changeling revive failed to enter fakedeath when it should have been in a valid state to.") + return TRUE +/// Used to enable fakedeath and register relevant signals / start timers +/datum/action/changeling/fakedeath/proc/enable_fakedeath(mob/living/changeling) + if(revive_ready || HAS_TRAIT_FROM(changeling, TRAIT_DEATHCOMA, CHANGELING_TRAIT)) + return + + changeling.fakedeath(CHANGELING_TRAIT) + addtimer(CALLBACK(src, PROC_REF(ready_to_regenerate), changeling), fakedeath_duration, TIMER_UNIQUE) + // Basically, these let the ling exit stasis without giving away their ling-y-ness if revived through other means + RegisterSignal(changeling, SIGNAL_REMOVETRAIT(TRAIT_DEATHCOMA), PROC_REF(fakedeath_reset)) + RegisterSignal(changeling, COMSIG_MOB_STATCHANGE, PROC_REF(on_stat_change)) + return TRUE + +/// Sets [revive_ready] to FALSE and updates the button icons. +/// Can be called mid-revival if the process is being cancelled +/datum/action/changeling/fakedeath/proc/disable_revive(mob/living/changeling) + if(revive_ready) + chemical_cost = 15 + revive_ready = FALSE + build_all_button_icons(UPDATE_BUTTON_NAME|UPDATE_BUTTON_ICON) + + UnregisterSignal(changeling, SIGNAL_REMOVETRAIT(TRAIT_DEATHCOMA)) + UnregisterSignal(changeling, COMSIG_MOB_STATCHANGE) + +/// Sets [revive_ready] to TRUE and updates the button icons. +/datum/action/changeling/fakedeath/proc/enable_revive(mob/living/changeling) + if(revive_ready) + return + + chemical_cost = 0 + revive_ready = TRUE + build_all_button_icons(UPDATE_BUTTON_NAME|UPDATE_BUTTON_ICON) + +/// Signal proc to stop the revival process if the changeling exits their stasis early. +/datum/action/changeling/fakedeath/proc/fakedeath_reset(mob/living/source) + SIGNAL_HANDLER + + if(HAS_TRAIT_FROM(source, TRAIT_DEATHCOMA, CHANGELING_TRAIT)) + return + + disable_revive(source) + +/// Signal proc to exit fakedeath early if we're revived from being previously dead +/datum/action/changeling/fakedeath/proc/on_stat_change(mob/living/source, new_stat, old_stat) + SIGNAL_HANDLER + + if(old_stat != DEAD) + return + + source.cure_fakedeath(CHANGELING_TRAIT) + to_chat(source, span_changeling("We exit our stasis early.")) + /datum/action/changeling/fakedeath/proc/revive(mob/living/carbon/user) if(!istype(user)) return + if(!HAS_TRAIT_FROM(user, TRAIT_DEATHCOMA, CHANGELING_TRAIT)) + return user.cure_fakedeath(CHANGELING_TRAIT) // Heal all damage and some minor afflictions, var/flags_to_heal = (HEAL_DAMAGE|HEAL_BODY|HEAL_STATUS|HEAL_CC_STATUS) // but leave out limbs so we can do it specially user.revive(flags_to_heal & ~HEAL_LIMBS) + to_chat(user, span_changeling("We have revived ourselves.")) var/static/list/dont_regenerate = list(BODY_ZONE_HEAD) // headless changelings are funny if(!length(user.get_missing_limbs() - dont_regenerate)) @@ -49,17 +108,17 @@ user.regenerate_limbs(dont_regenerate) /datum/action/changeling/fakedeath/proc/ready_to_regenerate(mob/user) - if(!user?.mind) + if(QDELETED(src) || QDELETED(user)) return - var/datum/antagonist/changeling/ling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(!ling || !(src in ling.innate_powers)) + var/datum/antagonist/changeling/ling = user.mind?.has_antag_datum(/datum/antagonist/changeling) + if(QDELETED(ling) || !(src in ling.innate_powers + ling.purchased_powers)) // checking both innate and purchased for full coverage + return + if(!HAS_TRAIT_FROM(user, TRAIT_DEATHCOMA, CHANGELING_TRAIT)) return - to_chat(user, span_notice("We are ready to revive.")) - chemical_cost = 0 - revive_ready = TRUE - build_all_button_icons(UPDATE_BUTTON_NAME|UPDATE_BUTTON_ICON) + to_chat(user, span_changeling("We are ready to revive.")) + enable_revive(user) /datum/action/changeling/fakedeath/can_sting(mob/living/user) if(revive_ready) diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index 91b31733dc77..d6ae824ef6c3 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -15,7 +15,7 @@ desc = "Go tell a coder if you see this" helptext = "Yell at Miauw and/or Perakp" chemical_cost = 1000 - dna_cost = -1 + dna_cost = CHANGELING_POWER_UNOBTAINABLE var/silent = FALSE var/weapon_type @@ -88,7 +88,7 @@ desc = "Go tell a coder if you see this" helptext = "Yell at Miauw and/or Perakp" chemical_cost = 1000 - dna_cost = -1 + dna_cost = CHANGELING_POWER_UNOBTAINABLE var/helmet_type = /obj/item var/suit_type = /obj/item @@ -277,6 +277,7 @@ flags_1 = NONE w_class = WEIGHT_CLASS_HUGE slot_flags = NONE + antimagic_flags = NONE pinless = TRUE ammo_type = /obj/item/ammo_casing/magic/tentacle fire_sound = 'sound/effects/splat.ogg' @@ -512,78 +513,6 @@ remaining_uses-- return ..() - -/***************************************\ -|*********SPACE SUIT + HELMET***********| -\***************************************/ -/datum/action/changeling/suit/organic_space_suit - name = "Organic Space Suit" - desc = "We grow an organic suit to protect ourselves from space exposure, including regulation of temperature and oxygen needs. Costs 20 chemicals." - helptext = "We must constantly repair our form to make it space-proof, reducing chemical production while we are protected. Cannot be used in lesser form." - button_icon_state = "organic_suit" - chemical_cost = 20 - dna_cost = 2 - req_human = TRUE - - suit_type = /obj/item/clothing/suit/space/changeling - helmet_type = /obj/item/clothing/head/helmet/space/changeling - suit_name_simple = "flesh shell" - helmet_name_simple = "space helmet" - recharge_slowdown = 0.25 - blood_on_castoff = 1 - -/obj/item/clothing/suit/space/changeling - name = "flesh mass" - icon_state = "lingspacesuit_t" - icon = 'icons/obj/clothing/suits/costume.dmi' - worn_icon = 'icons/mob/clothing/suits/costume.dmi' - desc = "A huge, bulky mass of pressure and temperature-resistant organic tissue, evolved to facilitate space travel." - item_flags = DROPDEL - clothing_flags = STOPSPRESSUREDAMAGE //Not THICKMATERIAL because it's organic tissue, so if somebody tries to inject something into it, it still ends up in your blood. (also balance but muh fluff) - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/oxygen) - armor_type = /datum/armor/space_changeling - actions_types = list() - cell = null - show_hud = FALSE - -/datum/armor/space_changeling - bio = 100 - fire = 90 - acid = 90 - -/obj/item/clothing/suit/space/changeling/Initialize(mapload) - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - if(ismob(loc)) - loc.visible_message(span_warning("[loc.name]\'s flesh rapidly inflates, forming a bloated mass around [loc.p_their()] body!"), span_warning("We inflate our flesh, creating a spaceproof suit!"), span_hear("You hear organic matter ripping and tearing!")) - START_PROCESSING(SSobj, src) - -// seal the cell door -/obj/item/clothing/suit/space/changeling/toggle_spacesuit_cell(mob/user) - return - -/obj/item/clothing/suit/space/changeling/process(seconds_per_tick) - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.reagents.add_reagent(/datum/reagent/medicine/salbutamol, REAGENTS_METABOLISM * (seconds_per_tick / SSMOBS_DT)) - H.adjust_bodytemperature(temperature_setting - H.bodytemperature) // force changelings to normal temp step mode played badly - -/obj/item/clothing/head/helmet/space/changeling - name = "flesh mass" - icon = 'icons/obj/clothing/head/costume.dmi' - worn_icon = 'icons/mob/clothing/head/costume.dmi' - icon_state = "lingspacehelmet" - inhand_icon_state = null - desc = "A covering of pressure and temperature-resistant organic tissue with a glass-like chitin front." - item_flags = DROPDEL - clothing_flags = STOPSPRESSUREDAMAGE | HEADINTERNALS - armor_type = /datum/armor/space_changeling - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - -/obj/item/clothing/head/helmet/space/changeling/Initialize(mapload) - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - /***************************************\ |*****************ARMOR*****************| \***************************************/ diff --git a/code/modules/antagonists/changeling/powers/regenerate.dm b/code/modules/antagonists/changeling/powers/regenerate.dm index 3716a0b40cb0..6595e3311953 100644 --- a/code/modules/antagonists/changeling/powers/regenerate.dm +++ b/code/modules/antagonists/changeling/powers/regenerate.dm @@ -4,7 +4,7 @@ helptext = "Will alert nearby crew if any external limbs are regenerated. Can be used while unconscious." button_icon_state = "regenerate" chemical_cost = 10 - dna_cost = 0 + dna_cost = CHANGELING_POWER_INNATE req_stat = HARD_CRIT /datum/action/changeling/regenerate/sting_action(mob/living/user) diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm index 0eab76764623..ffffb9f2d136 100644 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -243,8 +243,9 @@ /datum/action/changeling/sting/lsd name = "Hallucination Sting" - desc = "We cause mass terror to our victim." - helptext = "We evolve the ability to sting a target with a powerful hallucinogenic chemical. The target does not notice they have been stung, and the effect occurs after 30 to 60 seconds." + desc = "We cause mass terror to our victim. Costs 10 chemicals." + helptext = "We evolve the ability to sting a target with a powerful hallucinogenic chemical. \ + The target does not notice they have been stung, and the effect occurs after 30 to 60 seconds." button_icon_state = "sting_lsd" chemical_cost = 10 dna_cost = 1 diff --git a/code/modules/antagonists/changeling/powers/transform.dm b/code/modules/antagonists/changeling/powers/transform.dm index 256dfe62ecc6..804dd2bffaca 100644 --- a/code/modules/antagonists/changeling/powers/transform.dm +++ b/code/modules/antagonists/changeling/powers/transform.dm @@ -3,7 +3,7 @@ desc = "We take on the appearance and voice of one we have absorbed. Costs 5 chemicals." button_icon_state = "transform" chemical_cost = 5 - dna_cost = 0 + dna_cost = CHANGELING_POWER_INNATE req_dna = 1 req_human = TRUE diff --git a/code/modules/antagonists/changeling/powers/void_adaption.dm b/code/modules/antagonists/changeling/powers/void_adaption.dm new file mode 100644 index 000000000000..76c0eeffc972 --- /dev/null +++ b/code/modules/antagonists/changeling/powers/void_adaption.dm @@ -0,0 +1,68 @@ +/datum/action/changeling/void_adaption + name = "Void Adaption" + desc = "We prepare our cells to resist the hostile environment outside of the station. We may freely travel wherever we wish." + helptext = "This ability is passive, and will automatically protect you in situations of extreme cold or vacuum, \ + as well as removing your need to breathe. While it is actively protecting you from temperature or pressure \ + it reduces your chemical regeneration rate." + owner_has_control = FALSE + dna_cost = 2 + + /// Traits we apply to become immune to the environment + var/static/list/gain_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD, TRAIT_RESISTLOWPRESSURE, TRAIT_SNOWSTORM_IMMUNE) + /// How much we slow chemical regeneration while active, in chems per second + var/recharge_slowdown = 0.25 + /// Are we currently protecting our user? + var/currently_active = FALSE + +/datum/action/changeling/void_adaption/on_purchase(mob/user, is_respec) + . = ..() + user.add_traits(gain_traits, REF(src)) + RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(check_environment)) + +/datum/action/changeling/void_adaption/Remove(mob/remove_from) + remove_from.remove_traits(gain_traits, REF(src)) + UnregisterSignal(remove_from, COMSIG_LIVING_LIFE) + if (currently_active) + on_removed_adaption(remove_from, "Our cells relax, despite the danger!") + return ..() + +/// Checks if we would be providing any useful benefit at present +/datum/action/changeling/void_adaption/proc/check_environment(mob/living/void_adapted) + SIGNAL_HANDLER + + var/list/active_reasons = list() + + var/datum/gas_mixture/environment = void_adapted.loc.return_air() + if (!isnull(environment)) + var/vulnerable_temperature = void_adapted.get_body_temp_cold_damage_limit() + var/affected_temperature = environment.return_temperature() + if (ishuman(void_adapted)) + var/mob/living/carbon/human/special_boy = void_adapted + var/cold_protection = special_boy.get_cold_protection(affected_temperature) + vulnerable_temperature *= (1 - cold_protection) + + var/affected_pressure = special_boy.calculate_affecting_pressure(environment.return_pressure()) + if (affected_pressure < HAZARD_LOW_PRESSURE) + active_reasons += "vacuum" + + if (affected_temperature < vulnerable_temperature) + active_reasons += "cold" + + var/should_be_active = !!length(active_reasons) + if (currently_active == should_be_active) + return + + if (!should_be_active) + on_removed_adaption(void_adapted, "Our cells relax in safer air.") + return + var/datum/antagonist/changeling/changeling_data = void_adapted.mind?.has_antag_datum(/datum/antagonist/changeling) + to_chat(void_adapted, span_changeling("Our cells harden themselves against the [pick(active_reasons)].")) + changeling_data?.chem_recharge_slowdown -= recharge_slowdown + currently_active = TRUE + +/// Called when we stop being adapted +/datum/action/changeling/void_adaption/proc/on_removed_adaption(mob/living/former, message) + var/datum/antagonist/changeling/changeling_data = former.mind?.has_antag_datum(/datum/antagonist/changeling) + to_chat(former, span_changeling(message)) + changeling_data?.chem_recharge_slowdown += recharge_slowdown + currently_active = FALSE diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 9c714b03717c..426cec70e941 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -603,7 +603,6 @@ user.visible_message(span_danger("The dark cloud recedes from what was formerly [candidate], revealing a\n [construct_class]!")) make_new_construct_from_class(construct_class, THEME_CULT, candidate, user, FALSE, T) uses-- - candidate.mmi = null qdel(candidate) channeling = FALSE else diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm index 674465c97435..1f3d6ddd1b08 100644 --- a/code/modules/antagonists/cult/cult_comms.dm +++ b/code/modules/antagonists/cult/cult_comms.dm @@ -100,63 +100,79 @@ /datum/action/innate/cult/mastervote/Activate() var/choice = tgui_alert(owner, "The mantle of leadership is heavy. Success in this role requires an expert level of communication and experience. Are you sure?",, list("Yes", "No")) if(choice == "Yes" && IsAvailable()) - var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - pollCultists(owner,C.cult_team) + var/datum/antagonist/cult/cult_antag = owner.mind.has_antag_datum(/datum/antagonist/cult, TRUE) + poll_cultists_for_leader(owner, cult_antag.cult_team) -/proc/pollCultists(mob/living/Nominee,datum/team/cult/team) //Cult Master Poll - if(world.time < CULT_POLL_WAIT) - to_chat(Nominee, "It would be premature to select a leader while everyone is still settling in, try again in [DisplayTimeText(CULT_POLL_WAIT-world.time)].") - return - team.cult_vote_called = TRUE //somebody's trying to be a master, make sure we don't let anyone else try - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_mob_action_buttons() - if(!B.current.incapacitated()) - SEND_SOUND(B.current, 'sound/hallucinations/im_here1.ogg') - to_chat(B.current, span_cultlarge("Acolyte [Nominee] has asserted that [Nominee.p_theyre()] worthy of leading the cult. A vote will be called shortly.")) - sleep(10 SECONDS) - var/list/asked_cultists = list() - for(var/datum/mind/B in team.members) - if(B.current && B.current != Nominee && !B.current.incapacitated()) - SEND_SOUND(B.current, 'sound/magic/exit_blood.ogg') - asked_cultists += B.current - var/list/yes_voters = poll_candidates("[Nominee] seeks to lead your cult, do you support [Nominee.p_them()]?", poll_time = 300, group = asked_cultists) - if(QDELETED(Nominee) || Nominee.incapacitated()) +///Polls all Cultists on whether the person putting themselves forward should be made the Cult Leader, if they can actually be such. +/proc/poll_cultists_for_leader(mob/living/nominee, datum/team/cult/team) + if(QDELETED(nominee) || nominee.incapacitated()) team.cult_vote_called = FALSE - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_mob_action_buttons() - if(!B.current.incapacitated()) - to_chat(B.current,span_cultlarge("[Nominee] has died in the process of attempting to win the cult's support!")) + for(var/datum/mind/team_member as anything in team.members) + if(!team_member.current) + continue + team_member.current.update_mob_action_buttons() + if(team_member.current.incapacitated()) + continue + to_chat(team_member.current,span_cultlarge("[nominee] has died in the process of attempting to start a vote!")) return FALSE - if(!Nominee.mind) + var/list/mob/living/asked_cultists = list() + for(var/datum/mind/team_member as anything in team.members) + if(!team_member.current || team_member.current == nominee || team_member.current.incapacitated()) + continue + SEND_SOUND(team_member.current, 'sound/magic/exit_blood.ogg') + asked_cultists += team_member.current + + var/list/yes_voters = SSpolling.poll_candidates( + question = "[span_notice(nominee.name)] seeks to lead your cult, do you support [nominee.p_them()]?", + poll_time = 30 SECONDS, + group = asked_cultists, + pic_source = nominee, + role_name_text = "cult master nomination", + custom_response_messages = list( + POLL_RESPONSE_SIGNUP = "You have pledged your allegience to [nominee].", + POLL_RESPONSE_ALREADY_SIGNED = "You have already pledged your allegience!", + POLL_RESPONSE_NOT_SIGNED = "You aren't nominated for this.", + POLL_RESPONSE_TOO_LATE_TO_UNREGISTER = "It's too late to unregister yourself, voting has already begun!", + POLL_RESPONSE_UNREGISTERED = "You have been removed your pledge to [nominee].", + ) + ) + if(QDELETED(nominee) || nominee.incapacitated()) team.cult_vote_called = FALSE - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_mob_action_buttons() - if(!B.current.incapacitated()) - to_chat(B.current,span_cultlarge("[Nominee] has gone catatonic in the process of attempting to win the cult's support!")) + for(var/datum/mind/team_member as anything in team.members) + if(!team_member.current) + continue + team_member.current.update_mob_action_buttons() + if(team_member.current.incapacitated()) + continue + to_chat(team_member.current,span_cultlarge("[nominee] has died in the process of attempting to win the cult's support!")) + return FALSE + if(!nominee.mind) + team.cult_vote_called = FALSE + for(var/datum/mind/team_member as anything in team.members) + if(!team_member.current) + continue + team_member.current.update_mob_action_buttons() + if(team_member.current.incapacitated()) + continue + to_chat(team_member.current,span_cultlarge("[nominee] has gone catatonic in the process of attempting to win the cult's support!")) return FALSE if(LAZYLEN(yes_voters) <= LAZYLEN(asked_cultists) * 0.5) team.cult_vote_called = FALSE - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_mob_action_buttons() - if(!B.current.incapacitated()) - to_chat(B.current, span_cultlarge("[Nominee] could not win the cult's support and shall continue to serve as an acolyte.")) + for(var/datum/mind/team_member as anything in team.members) + if(!team_member.current) + continue + team_member.current.update_mob_action_buttons() + if(team_member.current.incapacitated()) + continue + to_chat(team_member.current, span_cultlarge("[nominee] could not win the cult's support and shall continue to serve as an acolyte.")) return FALSE - team.cult_master = Nominee - var/datum/antagonist/cult/cultist = Nominee.mind.has_antag_datum(/datum/antagonist/cult) - if (cultist) - cultist.silent = TRUE - cultist.on_removal() - Nominee.mind.add_antag_datum(/datum/antagonist/cult/master) - for(var/datum/mind/B in team.members) - if(B.current) - for(var/datum/action/innate/cult/mastervote/vote in B.current.actions) - vote.Remove(B.current) - if(!B.current.incapacitated()) - to_chat(B.current,span_cultlarge("[Nominee] has won the cult's support and is now their master. Follow [Nominee.p_their()] orders to the best of your ability!")) + + team.cult_vote_called = FALSE + team.cult_master = nominee + var/datum/antagonist/cult/cultist = nominee.mind.has_antag_datum(/datum/antagonist/cult) + cultist?.silent = TRUE + cultist?.on_removal() + nominee.mind.add_antag_datum(/datum/antagonist/cult/master) return TRUE /datum/action/innate/cult/master/IsAvailable(feedback = FALSE) diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index d4740795fddb..01aef99e6263 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -703,7 +703,14 @@ structure_check() searches for nearby cultist structures required for the invoca if(!mob_to_revive.client || mob_to_revive.client.is_afk()) set waitfor = FALSE - var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as a [mob_to_revive.real_name], an inactive blood cultist?", ROLE_CULTIST, ROLE_CULTIST, 5 SECONDS, mob_to_revive) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob( + "Do you want to play as a [mob_to_revive.real_name], an inactive blood cultist?", + check_jobban = ROLE_CULTIST, + role = ROLE_CULTIST, + poll_time = 5 SECONDS, + target_mob = mob_to_revive, + role_name_text = "blood cultist" + ) if(LAZYLEN(candidates)) var/mob/dead/observer/C = pick(candidates) to_chat(mob_to_revive.mind, "Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form.") diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm index 6f9ffe66d3d9..8d35b3892890 100644 --- a/code/modules/antagonists/heretic/heretic_antag.dm +++ b/code/modules/antagonists/heretic/heretic_antag.dm @@ -23,6 +23,8 @@ hijack_speed = 0.5 suicide_cry = "THE MANSUS SMILES UPON ME!!" preview_outfit = /datum/outfit/heretic + can_assign_self_objectives = TRUE + default_custom_objective = "Turn a department into a testament for your dark knowledge." /// Whether we give this antagonist objectives on gain. var/give_objectives = TRUE /// Whether we've ascended! (Completed one of the final rituals) @@ -118,6 +120,7 @@ var/list/data = list() data["objectives"] = get_objectives() + data["can_change_objective"] = can_assign_self_objectives for(var/path in researched_knowledge) var/list/knowledge_data = list() @@ -162,6 +165,19 @@ knowledge_points -= initial(researched_path.cost) return TRUE +/datum/antagonist/heretic/submit_player_objective(retain_existing = FALSE, retain_escape = TRUE, force = FALSE) + if (isnull(owner) || isnull(owner.current)) + return + var/confirmed = tgui_alert( + owner.current, + message = "Are you sure? You will no longer be able to Ascend.", + title = "Reject the call?", + buttons = list("Yes", "No"), + ) == "Yes" + if (!confirmed) + return + return ..() + /datum/antagonist/heretic/ui_status(mob/user, datum/ui_state/state) if(user.stat == DEAD) return UI_CLOSE @@ -240,6 +256,9 @@ /datum/antagonist/heretic/on_body_transfer(mob/living/old_body, mob/living/new_body) . = ..() + if(old_body == new_body) // if they were using a temporary body + return + for(var/knowledge_index in researched_knowledge) var/datum/heretic_knowledge/knowledge = researched_knowledge[knowledge_index] knowledge.on_lose(old_body, src) @@ -460,11 +479,9 @@ if(length(objectives)) var/count = 1 for(var/datum/objective/objective as anything in objectives) - if(objective.check_completion()) - parts += "Objective #[count]: [objective.explanation_text] [span_greentext("Success!")]" - else - parts += "Objective #[count]: [objective.explanation_text] [span_redtext("Fail.")]" + if(!objective.check_completion()) succeeded = FALSE + parts += "Objective #[count]: [objective.explanation_text] [objective.get_roundend_success_suffix()]" count++ if(ascended) @@ -673,6 +690,8 @@ * Returns FALSE if not all of our objectives are complete, or TRUE otherwise. */ /datum/antagonist/heretic/proc/can_ascend() + if(!can_assign_self_objectives) + return FALSE // We spurned the offer of the Mansus :( for(var/datum/objective/must_be_done as anything in objectives) if(!must_be_done.check_completion()) return FALSE diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm index afebdb7c8d1f..8bbe32cb440e 100644 --- a/code/modules/antagonists/heretic/heretic_knowledge.dm +++ b/code/modules/antagonists/heretic/heretic_knowledge.dm @@ -538,7 +538,14 @@ animate(summoned, 10 SECONDS, alpha = 155) message_admins("A [summoned.name] is being summoned by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(summoned)].") - var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as a [summoned.name]?", ROLE_HERETIC, FALSE, 10 SECONDS, summoned) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob( + "Do you want to play as a [summoned.name]?", + check_jobban = ROLE_HERETIC, + poll_time = 10 SECONDS, + target_mob = summoned, + ignore_category = POLL_IGNORE_HERETIC_MONSTER, + role_name_text = summoned.name + ) if(!LAZYLEN(candidates)) loc.balloon_alert(user, "ritual failed, no ghosts!") animate(summoned, 0.5 SECONDS, alpha = 0) diff --git a/code/modules/antagonists/heretic/influences.dm b/code/modules/antagonists/heretic/influences.dm index baf33b9f9bba..9935642297af 100644 --- a/code/modules/antagonists/heretic/influences.dm +++ b/code/modules/antagonists/heretic/influences.dm @@ -121,7 +121,9 @@ /obj/effect/visible_heretic_influence/Initialize(mapload) . = ..() - addtimer(CALLBACK(src, PROC_REF(show_presence)), 15 SECONDS) + // monke edit: make influences only show up after a minute or so, and disappear after about 10 minutes + addtimer(CALLBACK(src, PROC_REF(show_presence)), 1 MINUTES) + QDEL_IN(src, 10 MINUTES) var/image/silicon_image = image('icons/effects/eldritch.dmi', src, null, OBJ_LAYER) silicon_image.override = TRUE @@ -147,9 +149,15 @@ var/mob/living/carbon/human/human_user = user var/obj/item/bodypart/their_poor_arm = human_user.get_active_hand() if(prob(25)) - to_chat(human_user, span_userdanger("An otherwordly presence tears and atomizes your [their_poor_arm.name] as you try to touch the hole in the very fabric of reality!")) - their_poor_arm.dismember() - qdel(their_poor_arm) + // monke edit: TRAIT_NODISMEMBER means you just get your arm fucked the hell up instead + // while in theory it should atomize your arm anyways, a dismemberment fail and then qdeling the still-attached limb causes Weird Things to happen. + if(HAS_TRAIT(human_user, TRAIT_NODISMEMBER)) + to_chat(human_user, span_userdanger("An otherwordly presence lashes out and violently mangles your [their_poor_arm.name] as you try to touch the hole in the very fabric of reality!")) + their_poor_arm.receive_damage(brute = 50, wound_bonus = 100) // guaranteed to wound + else + to_chat(human_user, span_userdanger("An otherwordly presence tears and atomizes your [their_poor_arm.name] as you try to touch the hole in the very fabric of reality!")) + their_poor_arm.dismember() + qdel(their_poor_arm) else to_chat(human_user,span_danger("You pull your hand away from the hole as the eldritch energy flails, trying to latch onto existance itself!")) return TRUE diff --git a/code/modules/antagonists/heretic/items/heretic_blades.dm b/code/modules/antagonists/heretic/items/heretic_blades.dm index b07d052a0917..d3eb4bf58399 100644 --- a/code/modules/antagonists/heretic/items/heretic_blades.dm +++ b/code/modules/antagonists/heretic/items/heretic_blades.dm @@ -16,6 +16,7 @@ throwforce = 10 wound_bonus = 5 bare_wound_bonus = 15 + toolspeed = 0.375 demolition_mod = 0.8 hitsound = 'sound/weapons/bladeslice.ogg' armour_penetration = 35 diff --git a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm index 29ddda5cee19..ff85e8f8b9df 100644 --- a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm @@ -170,7 +170,14 @@ if(!soon_to_be_ghoul.mind || !soon_to_be_ghoul.client) message_admins("[ADMIN_LOOKUPFLW(user)] is creating a voiceless dead of a body with no player.") - var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as a [soon_to_be_ghoul.real_name], a voiceless dead?", ROLE_HERETIC, ROLE_HERETIC, 5 SECONDS, soon_to_be_ghoul) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob( + "Do you want to play as a [soon_to_be_ghoul.real_name], a voiceless dead?", + check_jobban = ROLE_HERETIC, + role = ROLE_HERETIC, + poll_time = 5 SECONDS, + target_mob = soon_to_be_ghoul, + role_name_text = "voiceless dead" + ) if(!LAZYLEN(candidates)) loc.balloon_alert(user, "ritual failed, no ghosts!") return FALSE diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm index 27ebb54d88b2..0a83536ee3be 100644 --- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm @@ -72,7 +72,8 @@ // Let's remove any humans in our atoms list that aren't a sac target for(var/mob/living/carbon/human/sacrifice in atoms) // If the mob's not in soft crit or worse, or isn't one of the sacrifices, remove it from the list - if(sacrifice.stat < SOFT_CRIT || !(sacrifice in heretic_datum.sac_targets)) + // monke edit: allow stamcrit targets to be sacrificed (bc they're incapable of putting up resistance) + if(!(sacrifice in heretic_datum.sac_targets) || (sacrifice.stat < SOFT_CRIT && !HAS_TRAIT_FROM(sacrifice, TRAIT_INCAPACITATED, STAMINA))) atoms -= sacrifice // Finally, return TRUE if we have a target in the list @@ -245,6 +246,7 @@ // If our target is dead, try to revive them // and if we fail to revive them, don't proceede the chain sac_target.adjustOxyLoss(-100, FALSE) + sac_target.grab_ghost() // monke edit: try to grab their ghost if(!sac_target.heal_and_revive(50, span_danger("[sac_target]'s heart begins to beat with an unholy force as they return from death!"))) return @@ -274,6 +276,8 @@ if(QDELETED(sac_target)) return + sac_target.grab_ghost() // monke edit: try to grab their ghost + // The target disconnected or something, we shouldn't bother sending them along. if(!sac_target.client || !sac_target.mind) disembowel_target(sac_target) @@ -288,6 +292,7 @@ // and we fail to revive them (using a lower number than before), // just disembowel them and stop the chain sac_target.adjustOxyLoss(-100, FALSE) + sac_target.grab_ghost() // monke edit: try to grab their ghost again before revival if(!sac_target.heal_and_revive(60, span_danger("[sac_target]'s heart begins to beat with an unholy force as they return from death!"))) disembowel_target(sac_target) return @@ -377,7 +382,7 @@ var/datum/antagonist/heretic/victim_heretic = sac_target.mind?.has_antag_datum(/datum/antagonist/heretic) victim_heretic.knowledge_points -= 3 else - sac_target.gain_trauma(/datum/brain_trauma/mild/phobia/heresy, TRAUMA_RESILIENCE_MAGIC) + sac_target.gain_trauma(/datum/brain_trauma/mild/phobia/heresy, TRAUMA_RESILIENCE_LOBOTOMY) // monke edit: allow lobotomy to cure the phobia // Wherever we end up, we sure as hell won't be able to explain sac_target.adjust_timed_status_effect(40 SECONDS, /datum/status_effect/speech/slurring/heretic) sac_target.adjust_stutter(40 SECONDS) diff --git a/code/modules/antagonists/heretic/magic/mansus_grasp.dm b/code/modules/antagonists/heretic/magic/mansus_grasp.dm index 7f8eaaf1fb0f..e9cc46f68bc7 100644 --- a/code/modules/antagonists/heretic/magic/mansus_grasp.dm +++ b/code/modules/antagonists/heretic/magic/mansus_grasp.dm @@ -69,7 +69,8 @@ success_feedback = "You remove %THEEFFECT.", \ tip_text = "Clear rune", \ on_clear_callback = CALLBACK(src, PROC_REF(after_clear_rune)), \ - effects_we_clear = list(/obj/effect/heretic_rune)) + effects_we_clear = list(/obj/effect/heretic_rune), \ + time_to_remove = 0.4 SECONDS) /* * Callback for effect_remover component. diff --git a/code/modules/antagonists/heretic/magic/realignment.dm b/code/modules/antagonists/heretic/magic/realignment.dm index 07c8d57e76a4..a1b8061a102e 100644 --- a/code/modules/antagonists/heretic/magic/realignment.dm +++ b/code/modules/antagonists/heretic/magic/realignment.dm @@ -59,6 +59,7 @@ /datum/status_effect/realignment/on_apply() ADD_TRAIT(owner, TRAIT_PACIFISM, id) + ADD_TRAIT(owner, TRAIT_CANT_STAMCRIT, id) owner.add_filter(id, 2, list("type" = "outline", "color" = "#d6e3e7", "size" = 2)) var/filter = owner.get_filter(id) animate(filter, alpha = 127, time = 1 SECONDS, loop = -1) @@ -67,10 +68,11 @@ /datum/status_effect/realignment/on_remove() REMOVE_TRAIT(owner, TRAIT_PACIFISM, id) + REMOVE_TRAIT(owner, TRAIT_CANT_STAMCRIT, id) owner.remove_filter(id) /datum/status_effect/realignment/tick(seconds_per_tick, times_fired) - owner.stamina.adjust(5, TRUE) + owner.stamina.adjust(15, TRUE) owner.AdjustAllImmobility(-0.5 SECONDS) /atom/movable/screen/alert/status_effect/realignment diff --git a/code/modules/antagonists/heretic/structures/knock_final.dm b/code/modules/antagonists/heretic/structures/knock_final.dm index 02c4c739fa70..e622592be2c6 100644 --- a/code/modules/antagonists/heretic/structures/knock_final.dm +++ b/code/modules/antagonists/heretic/structures/knock_final.dm @@ -38,7 +38,14 @@ /// Ask ghosts if they want to make some noise /obj/structure/knock_tear/proc/poll_ghosts() - var/list/candidates = poll_ghost_candidates("Would you like to be a random eldritch monster attacking the crew?", ROLE_SENTIENCE, ROLE_SENTIENCE, 10 SECONDS, POLL_IGNORE_HERETIC_MONSTER) + var/list/candidates = SSpolling.poll_ghost_candidates( + "Would you like to be a random eldritch monster attacking the crew?", + check_jobban = ROLE_SENTIENCE, + poll_time = 10 SECONDS, + ignore_category = POLL_IGNORE_HERETIC_MONSTER, + pic_source = src, + role_name_text = "eldritch monster" + ) while(LAZYLEN(candidates)) var/mob/dead/observer/candidate = pick_n_take(candidates) ghost_to_monster(candidate, should_ask = FALSE) diff --git a/code/modules/antagonists/malf_ai/malf_ai.dm b/code/modules/antagonists/malf_ai/malf_ai.dm index 50ddaf6c9ef2..863b32e28d8f 100644 --- a/code/modules/antagonists/malf_ai/malf_ai.dm +++ b/code/modules/antagonists/malf_ai/malf_ai.dm @@ -8,6 +8,8 @@ job_rank = ROLE_MALF antag_hud_name = "traitor" ui_name = "AntagInfoMalf" + can_assign_self_objectives = TRUE + default_custom_objective = "Make sure your precious crew are incapable of ever, ever leaving you." ///the name of the antag flavor this traitor has. var/employer ///assoc list of strings set up after employer is given @@ -178,6 +180,7 @@ data["allies"] = malfunction_flavor["allies"] data["goal"] = malfunction_flavor["goal"] data["objectives"] = get_objectives() + data["can_change_objective"] = can_assign_self_objectives //module picker data @@ -235,11 +238,9 @@ if(objectives.len) //If the traitor had no objectives, don't need to process this. var/count = 1 for(var/datum/objective/objective in objectives) - if(objective.check_completion()) - objectives_text += "
Objective #[count]: [objective.explanation_text] [span_greentext("Success!")]" - else - objectives_text += "
Objective #[count]: [objective.explanation_text] [span_redtext("Fail.")]" + if(!objective.check_completion()) malf_ai_won = FALSE + objectives_text += "
Objective #[count]: [objective.explanation_text] [objective.get_roundend_success_suffix()]" count++ result += objectives_text diff --git a/code/modules/antagonists/ninja/ninja_explosive.dm b/code/modules/antagonists/ninja/ninja_explosive.dm index 68241ce77696..b371f12c2e76 100644 --- a/code/modules/antagonists/ninja/ninja_explosive.dm +++ b/code/modules/antagonists/ninja/ninja_explosive.dm @@ -1,14 +1,14 @@ /** * # Spider Charge * - * A unique version of c4 possessed only by the space ninja. Has a stronger blast radius. - * Can only be detonated by space ninjas with the bombing objective. Can only be set up where the objective says it can. + * A unique version of c4 possessed only by the space ninja. Has a stronger blast radius. + * Can only be detonated by space ninjas with the bombing objective. Can only be set up where the objective says it can. * When it primes, the space ninja responsible will have their objective set to complete. * */ /obj/item/grenade/c4/ninja name = "spider charge" - desc = "A modified C-4 charge supplied to you by the Spider Clan. Its explosive power has been juiced up, but only works in one specific area." + desc = "A modified C-4 charge supplied by the Spider Clan. It has great explosive power, but is keyed to only work in one specific area." icon_state = "ninja-explosive0" inhand_icon_state = "ninja-explosive" boom_sizes = list(4, 8, 12) @@ -22,6 +22,15 @@ detonation_area = null return ..() +/obj/item/grenade/c4/ninja/examine(mob/user) + . = ..() + if (!IS_SPACE_NINJA(user)) + return + if (isnull(detonation_area)) + . += span_notice("This one was provided with no destination set, and cannot be used.") + else + . += span_notice("This device will only function in [detonation_area].") + /** * set_detonation_area * @@ -38,9 +47,9 @@ return detonation_area = objective.detonation_location -/obj/item/grenade/c4/ninja/afterattack(atom/movable/AM, mob/ninja, flag) +/obj/item/grenade/c4/ninja/afterattack(atom/movable/target, mob/ninja, flag) if(!IS_SPACE_NINJA(ninja)) - to_chat(ninja, span_notice("While it appears normal, you can't seem to detonate the charge.")) + say("Access denied.") return . |= AFTERATTACK_PROCESSED_ITEM if (!check_loc(ninja)) @@ -59,15 +68,15 @@ //Since we already did the checks in afterattack, the denonator must be a ninja with the bomb objective. if(!detonator) return - var/mob/ninja = detonator.resolve() . = ..() if(!.) return + var/mob/ninja = detonator.resolve() if (isnull(ninja)) return var/datum/antagonist/ninja/ninja_antag = ninja.mind.has_antag_datum(/datum/antagonist/ninja) var/datum/objective/plant_explosive/objective = locate() in ninja_antag.objectives - objective.completed = TRUE + objective?.completed = TRUE /** * check_loc @@ -78,11 +87,11 @@ * * mob/user - The planter of the c4 */ /obj/item/grenade/c4/ninja/proc/check_loc(mob/user) - if(!detonation_area) - to_chat(user, span_notice("You can't seem to activate the charge. It's location-locked, but you don't know where to detonate it.")) + if(isnull(detonation_area)) + balloon_alert(user, "no location set!") return FALSE if((get_area(target) != detonation_area) && (get_area(src) != detonation_area)) if (!active) - to_chat(user, span_notice("This isn't the location you're supposed to use this!")) + balloon_alert(user, "wrong location!") return FALSE return TRUE diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm index c2809d680cc6..015307bbd17b 100644 --- a/code/modules/antagonists/nukeop/nukeop.dm +++ b/code/modules/antagonists/nukeop/nukeop.dm @@ -103,10 +103,11 @@ /datum/antagonist/nukeop/proc/give_alias() if(nuke_team?.syndicate_name) - var/mob/living/carbon/human/H = owner.current - if(istype(H)) // Reinforcements get a real name - var/chosen_name = H.dna.species.random_name(H.gender,0,nuke_team.syndicate_name) - H.fully_replace_character_name(H.real_name,chosen_name) + var/mob/living/carbon/human/human_to_rename = owner.current + if(istype(human_to_rename)) // Reinforcements get a real name + var/first_name = owner.current.client?.prefs?.read_preference(/datum/preference/name/operative_alias) || pick(GLOB.operative_aliases) + var/chosen_name = "[first_name] [nuke_team.syndicate_name]" + human_to_rename.fully_replace_character_name(human_to_rename.real_name, chosen_name) else var/number = 1 number = nuke_team.members.Find(owner) @@ -256,13 +257,6 @@ H.put_in_hands(nuke_code_paper, TRUE) H.update_icons() -/datum/antagonist/nukeop/leader/give_alias() - title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord") - if(nuke_team?.syndicate_name) - owner.current.real_name = "[nuke_team.syndicate_name] [title]" - else - owner.current.real_name = "Syndicate [title]" - /datum/antagonist/nukeop/leader/greet() owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0, use_reverb = FALSE) to_chat(owner, "You are the Syndicate [title] for this mission. You are responsible for guiding the team and your ID is the only one who can open the launch bay doors.") @@ -290,11 +284,12 @@ name = "[syndicate_name] Team" for(var/I in members) var/datum/mind/synd_mind = I - var/mob/living/carbon/human/H = synd_mind.current - if(!istype(H)) + var/mob/living/carbon/human/human_to_rename = synd_mind.current + if(!istype(human_to_rename)) continue - var/chosen_name = H.dna.species.random_name(H.gender,0,syndicate_name) - H.fully_replace_character_name(H.real_name,chosen_name) + var/first_name = human_to_rename.client?.prefs?.read_preference(/datum/preference/name/operative_alias) || pick(GLOB.operative_aliases) + var/chosen_name = "[first_name] [syndicate_name]" + human_to_rename.fully_replace_character_name(human_to_rename.real_name, chosen_name) /datum/antagonist/nukeop/leader/proc/ask_name() var/randomname = pick(GLOB.last_names) diff --git a/code/modules/antagonists/pirate/pirate_event.dm b/code/modules/antagonists/pirate/pirate_event.dm index 66edd83dc672..0fc8d787150a 100644 --- a/code/modules/antagonists/pirate/pirate_event.dm +++ b/code/modules/antagonists/pirate/pirate_event.dm @@ -61,7 +61,7 @@ if(chosen_gang.paid_off) return - var/list/candidates = poll_ghost_candidates("Do you wish to be considered for pirate crew?", ROLE_TRAITOR) + var/list/candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for a pirate crew of [chosen_gang.name]?", check_jobban = ROLE_SPACE_PIRATE, pic_source = /obj/item/claymore/cutlass, role_name_text = "pirate crew") shuffle_inplace(candidates) var/template_key = "pirate_[chosen_gang.ship_template_id]" @@ -78,7 +78,7 @@ for(var/turf/A in ship.get_affected_turfs(T)) for(var/obj/effect/mob_spawn/ghost_role/human/pirate/spawner in A) - if(candidates.len > 0) + if(length(candidates) > 0) var/mob/our_candidate = candidates[1] var/mob/spawned_mob = spawner.create_from_ghost(our_candidate) candidates -= our_candidate diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index 3324fe447db2..9d76906c0829 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -78,6 +78,7 @@ /datum/antagonist/rev/greet() . = ..() to_chat(owner, span_userdanger("Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!")) + owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/revolutionary_tide.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) owner.announce_objectives() /datum/antagonist/rev/create_team(datum/team/revolution/new_team) @@ -555,14 +556,13 @@ if (player_mind in ex_revs + ex_headrevs) continue - player_mind.add_antag_datum(/datum/antagonist/enemy_of_the_revolution) - if (!istype(player)) continue + player_mind.add_antag_datum(/datum/antagonist/enemy_of_the_revolution) + if(player_mind.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) ADD_TRAIT(player, TRAIT_DEFIB_BLACKLISTED, REF(src)) - player.med_hud_set_status() for(var/datum/job/job as anything in SSjob.joinable_occupations) if(!(job.departments_bitflags & DEPARTMENT_BITFLAG_SECURITY|DEPARTMENT_BITFLAG_COMMAND)) @@ -570,8 +570,7 @@ job.allow_bureaucratic_error = FALSE job.total_positions = 0 - var/datum/game_mode/dynamic/dynamic = SSticker.mode - dynamic.unfavorable_situation() + SSgamemode.point_gain_multipliers[EVENT_TRACK_ROLESET]++ var/message_header = "A recent assessment of your station has marked your station as a severe risk area for high ranking Nanotrasen officials." var/extra_detail = try_auto_call_shuttle() \ @@ -629,7 +628,6 @@ for (var/datum/mind/rev_head as anything in ex_headrevs) if(!isnull(rev_head.current)) ADD_TRAIT(rev_head.current, TRAIT_DEFIB_BLACKLISTED, REF(src)) - rev_head.current.med_hud_set_status() for(var/datum/objective/mutiny/head_tracker in objectives) var/mob/living/head_of_staff = head_tracker.target?.current diff --git a/code/modules/antagonists/space_ninja/space_ninja.dm b/code/modules/antagonists/space_ninja/space_ninja.dm index 7ce6f9f6cf5f..7948b1fe6cbd 100644 --- a/code/modules/antagonists/space_ninja/space_ninja.dm +++ b/code/modules/antagonists/space_ninja/space_ninja.dm @@ -9,6 +9,9 @@ antag_moodlet = /datum/mood_event/focused suicide_cry = "FOR THE SPIDER CLAN!!" preview_outfit = /datum/outfit/ninja_preview + can_assign_self_objectives = TRUE + ui_name = "AntagInfoNinja" + default_custom_objective = "Destroy vital station infrastructure, without being seen." ///Whether or not this ninja will obtain objectives var/give_objectives = TRUE ///Whether or not this ninja receives the standard equipment @@ -35,7 +38,7 @@ antag_memory += "Surprise is my weapon. Shadows are my armor. Without them, I am nothing.
" /datum/objective/cyborg_hijack - explanation_text = "Use your gloves to convert at least one cyborg to aide you in sabotaging the station." + explanation_text = "Use your gloves to convert at least one cyborg to aid you in sabotaging the station." /datum/objective/door_jack ///How many doors that need to be opened using the gloves to pass the objective diff --git a/code/modules/antagonists/spiders/spiders.dm b/code/modules/antagonists/spiders/spiders.dm index 6d0b86d24d70..34811e04dbbc 100644 --- a/code/modules/antagonists/spiders/spiders.dm +++ b/code/modules/antagonists/spiders/spiders.dm @@ -29,7 +29,7 @@ explanation_text = "Your queen has given you a directive! Follow it at all costs: [directive]" /datum/objective/spider/check_completion() - return owner.current.stat != DEAD + return !QDELETED(owner?.current) && owner.current.stat != DEAD /datum/antagonist/spider/forge_objectives() var/datum/objective/spider/objective = new(directive) diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 07a1c5b607b7..2aade03ae3fb 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -14,6 +14,8 @@ ui_name = "AntagInfoTraitor" suicide_cry = "FOR THE SYNDICATE!!" preview_outfit = /datum/outfit/traitor + can_assign_self_objectives = TRUE + default_custom_objective = "Perform an overcomplicated heist on valuable Nanotrasen assets." var/give_objectives = TRUE /// Whether to give secondary objectives to the traitor, which aren't necessary but can be completed for a progression and TC boost. var/give_secondary_objectives = TRUE @@ -84,6 +86,9 @@ uplink_handler.has_objectives = FALSE //monkestation edit end + uplink_handler.can_replace_objectives = CALLBACK(src, PROC_REF(can_change_objectives)) + uplink_handler.replace_objectives = CALLBACK(src, PROC_REF(submit_player_objective)) + if(uplink_handler.progression_points < SStraitor.current_global_progression) uplink_handler.progression_points = SStraitor.current_global_progression * SStraitor.newjoin_progression_coeff @@ -111,8 +116,10 @@ return ..() /datum/antagonist/traitor/on_removal() - if(uplink_handler) + if(!isnull(uplink_handler)) uplink_handler.has_objectives = FALSE + uplink_handler.can_replace_objectives = null + uplink_handler.replace_objectives = null return ..() /datum/antagonist/traitor/proc/traitor_objective_to_html(datum/traitor_objective/to_display) @@ -163,6 +170,10 @@ result += "Force add objective
" return result +/// Returns true if we're allowed to assign ourselves a new objective +/datum/antagonist/traitor/proc/can_change_objectives() + return can_assign_self_objectives + /// proc that generates the traitors replacement uplink code and radio frequency /datum/antagonist/traitor/proc/generate_replacement_codes() replacement_uplink_code = "[pick(GLOB.phonetic_alphabet)] [rand(10,99)]" @@ -323,11 +334,9 @@ if(objectives.len) //If the traitor had no objectives, don't need to process this. var/count = 1 for(var/datum/objective/objective in objectives) - if(objective.check_completion()) - objectives_text += "
Objective #[count]: [objective.explanation_text] [span_greentext("Success!")]" - else - objectives_text += "
Objective #[count]: [objective.explanation_text] [span_redtext("Fail.")]" + if(!objective.check_completion()) traitor_won = FALSE + objectives_text += "
Objective #[count]: [objective.explanation_text] [objective.get_roundend_success_suffix()]" count++ if(uplink_handler.final_objective) objectives_text += "
[span_greentext("[traitor_won ? "Additionally" : "However"], the final objective \"[uplink_handler.final_objective]\" was completed!")]" diff --git a/code/modules/antagonists/traitor/objectives/hack_comm_console.dm b/code/modules/antagonists/traitor/objectives/hack_comm_console.dm index 23c0f1d5228d..da18df277369 100644 --- a/code/modules/antagonists/traitor/objectives/hack_comm_console.dm +++ b/code/modules/antagonists/traitor/objectives/hack_comm_console.dm @@ -15,6 +15,8 @@ var/progression_objectives_minimum = 20 MINUTES /datum/traitor_objective/hack_comm_console/can_generate_objective(datum/mind/generating_for, list/possible_duplicates) + if(length(possible_duplicates) > 0) + return FALSE if(SStraitor.get_taken_count(/datum/traitor_objective/hack_comm_console) > 0) return FALSE if(handler.get_completion_progression(/datum/traitor_objective) < progression_objectives_minimum) diff --git a/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm b/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm index aea5611415b6..8b757f0ea3fb 100644 --- a/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm +++ b/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm @@ -27,6 +27,8 @@ var/area/weakpoint_area /datum/traitor_objective/locate_weakpoint/can_generate_objective(datum/mind/generating_for, list/possible_duplicates) + if(length(possible_duplicates) > 0) + return FALSE if(handler.get_completion_progression(/datum/traitor_objective) < progression_objectives_minimum) return FALSE if(SStraitor.get_taken_count(/datum/traitor_objective/locate_weakpoint) > 0) diff --git a/code/modules/antagonists/traitor/uplink_handler.dm b/code/modules/antagonists/traitor/uplink_handler.dm index dc958f3b1171..4722ffcb9aef 100644 --- a/code/modules/antagonists/traitor/uplink_handler.dm +++ b/code/modules/antagonists/traitor/uplink_handler.dm @@ -48,11 +48,20 @@ var/debug_mode = FALSE /// Whether the shop is locked or not. If set to true, nothing can be purchased. var/shop_locked = FALSE + /// Callback which returns true if you can choose to replace your objectives with different ones + var/datum/callback/can_replace_objectives + /// Callback which performs that operation + var/datum/callback/replace_objectives /datum/uplink_handler/New() . = ..() maximum_potential_objectives = CONFIG_GET(number/maximum_potential_objectives) +/datum/uplink_handler/Destroy(force, ...) + can_replace_objectives = null + replace_objectives = null + return ..() + /// Called whenever an update occurs on this uplink handler. Used for UIs /datum/uplink_handler/proc/on_update() SEND_SIGNAL(src, COMSIG_UPLINK_HANDLER_ON_UPDATE) diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 5aaaae141979..adb6e0527a28 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -438,7 +438,16 @@ */ /obj/item/soulstone/proc/get_ghost_to_replace_shade(mob/living/carbon/victim, mob/user) var/mob/dead/observer/chosen_ghost - var/list/consenting_candidates = poll_ghost_candidates("Would you like to play as a Shade?", "Cultist", ROLE_CULTIST, 5 SECONDS, POLL_IGNORE_SHADE) + var/list/mob/dead/observer/consenting_candidates = SSpolling.poll_ghost_candidates_for_mob( + "Do you want to play as a Shade?", + check_jobban = ROLE_CULTIST, + role = ROLE_CULTIST, + poll_time = 5 SECONDS, + target_mob = victim, + ignore_category = POLL_IGNORE_SHADE, + pic_source = /mob/living/basic/shade, + role_name_text = "shade" + ) if(length(consenting_candidates)) chosen_ghost = pick(consenting_candidates) @@ -458,42 +467,42 @@ switch(construct_class) if(CONSTRUCT_JUGGERNAUT) if(IS_CULTIST(creator)) - makeNewConstruct(/mob/living/basic/construct/juggernaut, target, creator, cultoverride, loc_override) // ignore themes, the actual giving of cult info is in the makeNewConstruct proc + make_new_construct(/mob/living/basic/construct/juggernaut, target, creator, cultoverride, loc_override) // ignore themes, the actual giving of cult info is in the make_new_construct proc return switch(theme) if(THEME_WIZARD) - makeNewConstruct(/mob/living/basic/construct/juggernaut/mystic, target, creator, cultoverride, loc_override) + make_new_construct(/mob/living/basic/construct/juggernaut/mystic, target, creator, cultoverride, loc_override) if(THEME_HOLY) - makeNewConstruct(/mob/living/basic/construct/juggernaut/angelic, target, creator, cultoverride, loc_override) + make_new_construct(/mob/living/basic/construct/juggernaut/angelic, target, creator, cultoverride, loc_override) if(THEME_CULT) - makeNewConstruct(/mob/living/basic/construct/juggernaut, target, creator, cultoverride, loc_override) + make_new_construct(/mob/living/basic/construct/juggernaut, target, creator, cultoverride, loc_override) if(CONSTRUCT_WRAITH) if(IS_CULTIST(creator)) - makeNewConstruct(/mob/living/basic/construct/wraith, target, creator, cultoverride, loc_override) // ignore themes, the actual giving of cult info is in the makeNewConstruct proc + make_new_construct(/mob/living/basic/construct/wraith, target, creator, cultoverride, loc_override) // ignore themes, the actual giving of cult info is in the make_new_construct proc return switch(theme) if(THEME_WIZARD) - makeNewConstruct(/mob/living/basic/construct/wraith/mystic, target, creator, cultoverride, loc_override) + make_new_construct(/mob/living/basic/construct/wraith/mystic, target, creator, cultoverride, loc_override) if(THEME_HOLY) - makeNewConstruct(/mob/living/basic/construct/wraith/angelic, target, creator, cultoverride, loc_override) + make_new_construct(/mob/living/basic/construct/wraith/angelic, target, creator, cultoverride, loc_override) if(THEME_CULT) - makeNewConstruct(/mob/living/basic/construct/wraith, target, creator, cultoverride, loc_override) + make_new_construct(/mob/living/basic/construct/wraith, target, creator, cultoverride, loc_override) if(CONSTRUCT_ARTIFICER) if(IS_CULTIST(creator)) - makeNewConstruct(/mob/living/basic/construct/artificer, target, creator, cultoverride, loc_override) // ignore themes, the actual giving of cult info is in the makeNewConstruct proc + make_new_construct(/mob/living/basic/construct/artificer, target, creator, cultoverride, loc_override) // ignore themes, the actual giving of cult info is in the make_new_construct proc return switch(theme) if(THEME_WIZARD) - makeNewConstruct(/mob/living/basic/construct/artificer/mystic, target, creator, cultoverride, loc_override) + make_new_construct(/mob/living/basic/construct/artificer/mystic, target, creator, cultoverride, loc_override) if(THEME_HOLY) - makeNewConstruct(/mob/living/basic/construct/artificer/angelic, target, creator, cultoverride, loc_override) + make_new_construct(/mob/living/basic/construct/artificer/angelic, target, creator, cultoverride, loc_override) if(THEME_CULT) - makeNewConstruct(/mob/living/basic/construct/artificer/noncult, target, creator, cultoverride, loc_override) + make_new_construct(/mob/living/basic/construct/artificer/noncult, target, creator, cultoverride, loc_override) -/proc/makeNewConstruct(mob/living/basic/construct/ctype, mob/target, mob/stoner = null, cultoverride = FALSE, loc_override = null) +/proc/make_new_construct(mob/living/basic/construct/ctype, mob/target, mob/stoner = null, cultoverride = FALSE, loc_override = null) if(QDELETED(target)) return - var/mob/living/basic/construct/newstruct = new ctype((loc_override) ? (loc_override) : (get_turf(target))) + var/mob/living/basic/construct/newstruct = new ctype(loc_override || get_turf(target)) var/makeicon = newstruct.icon_state var/theme = newstruct.theme flick("make_[makeicon][theme]", newstruct) @@ -501,20 +510,20 @@ if(stoner) newstruct.faction |= "[REF(stoner)]" newstruct.master = stoner - var/datum/action/innate/seek_master/SM = new() - SM.Grant(newstruct) - newstruct.key = target.key - var/atom/movable/screen/alert/bloodsense/BS - if(newstruct.mind && ((stoner && IS_CULTIST(stoner)) || cultoverride) && SSticker?.mode) + var/datum/action/innate/seek_master/seek_master = new + seek_master.Grant(newstruct) + target.mind?.transfer_to(newstruct, force_key_move = TRUE) + var/atom/movable/screen/alert/bloodsense/sense_alert + if(newstruct.mind && !IS_CULTIST(newstruct) && ((stoner && IS_CULTIST(stoner)) || cultoverride) && SSticker.HasRoundStarted()) newstruct.mind.add_antag_datum(/datum/antagonist/cult/construct) if(IS_CULTIST(stoner) || cultoverride) - to_chat(newstruct, "You are still bound to serve the cult[stoner ? " and [stoner]":""], follow [stoner ? stoner.p_their() : "their"] orders and help [stoner ? stoner.p_them() : "them"] complete [stoner ? stoner.p_their() : "their"] goals at all costs.") + to_chat(newstruct, span_cultbold("You are still bound to serve the cult[stoner ? " and [stoner]" : ""], follow [stoner?.p_their() || "their"] orders and help [stoner?.p_them() || "them"] complete [stoner?.p_their() || "their"] goals at all costs.")) else if(stoner) - to_chat(newstruct, "You are still bound to serve your creator, [stoner], follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.") + to_chat(newstruct, span_boldwarning("You are still bound to serve your creator, [stoner], follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.")) newstruct.clear_alert("bloodsense") - BS = newstruct.throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense) - if(BS) - BS.Cviewer = newstruct + sense_alert = newstruct.throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense) + if(sense_alert) + sense_alert.Cviewer = newstruct newstruct.cancel_camera() /obj/item/soulstone/anybody diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm index 6096c09a51c1..d5112a59611b 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm @@ -1,9 +1,9 @@ // Wizard spells that aid mobiilty(or stealth?) -/*/datum/spellbook_entry/mindswap //monkestation edit: replaced with an aoe version +/datum/spellbook_entry/mindswap name = "Mindswap" desc = "Allows you to switch bodies with a target next to you. You will both fall asleep when this happens, and it will be quite obvious that you are the target's body if someone watches you do it." spell_type = /datum/action/cooldown/spell/pointed/mind_transfer - category = "Mobility"*/ + category = "Mobility" /datum/spellbook_entry/knock name = "Knock" diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm b/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm index 36ed05594ee4..1a2cbe31aa3c 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm @@ -154,6 +154,7 @@ light_inner_range = 1 //monkestation edit light_outer_range = 2 //monkestation edit light_color = COLOR_PALE_GREEN + resistance_flags = parent_type::resistance_flags | SHUTTLE_CRUSH_PROOF /// Who are we reviving? var/mob/living/corpse /// Who if anyone is playing as them? diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 3aae394a7487..87fe2f3e4325 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -12,6 +12,8 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) ui_name = "AntagInfoWizard" suicide_cry = "FOR THE FEDERATION!!" preview_outfit = /datum/outfit/wizard + can_assign_self_objectives = TRUE + default_custom_objective = "Demonstrate your incredible and destructive magical powers." var/give_objectives = TRUE var/strip = TRUE //strip before equipping var/allow_rename = TRUE @@ -191,9 +193,9 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) H.equipOutfit(outfit_type) /datum/antagonist/wizard/ui_static_data(mob/user) - . = ..() var/list/data = list() data["objectives"] = get_objectives() + data["can_change_objective"] = can_assign_self_objectives return data /datum/antagonist/wizard/ui_data(mob/user) @@ -252,6 +254,7 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) /datum/antagonist/wizard/apprentice name = "Wizard Apprentice" antag_hud_name = "apprentice" + can_assign_self_objectives = FALSE var/datum/mind/master var/school = APPRENTICE_DESTRUCTION outfit_type = /datum/outfit/wizard/apprentice @@ -369,6 +372,7 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) show_in_antagpanel = FALSE outfit_type = /datum/outfit/wizard/academy move_to_lair = FALSE + can_assign_self_objectives = FALSE /datum/antagonist/wizard/academy/assign_ritual() return // Has other duties to be getting on with @@ -403,13 +407,11 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) parts += "
Grand Rituals completed: [ritual.times_completed]
" var/count = 1 - var/wizardwin = 1 + var/wizardwin = TRUE for(var/datum/objective/objective in objectives) - if(objective.check_completion()) - parts += "Objective #[count]: [objective.explanation_text] [span_greentext("Success!")]" - else - parts += "Objective #[count]: [objective.explanation_text] [span_redtext("Fail.")]" - wizardwin = 0 + if(!objective.check_completion()) + wizardwin = FALSE + parts += "Objective #[count]: [objective.explanation_text] [objective.get_roundend_success_suffix()]" count++ if(wizardwin) diff --git a/code/modules/art/paintings.dm b/code/modules/art/paintings.dm index 26935a126136..f6b72fa22744 100644 --- a/code/modules/art/paintings.dm +++ b/code/modules/art/paintings.dm @@ -188,7 +188,7 @@ return FALSE //I'd have this done inside the signal, but that'd have to be asynced, //while we want the UI to be updated after the color is chosen, not before. - var/chosen_color = input(user, "Pick new color", painting_implement, params["old_color"]) as color|null + var/chosen_color = tgui_color_picker(user, "Pick new color", painting_implement, params["old_color"]) if(!chosen_color || IS_DEAD_OR_INCAP(user) || !user.is_holding(painting_implement)) return FALSE SEND_SIGNAL(painting_implement, COMSIG_PAINTING_TOOL_PALETTE_COLOR_CHANGED, chosen_color, params["color_index"]) diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm index 0f34c964f05a..c705f0beef70 100644 --- a/code/modules/asset_cache/asset_list.dm +++ b/code/modules/asset_cache/asset_list.dm @@ -26,6 +26,7 @@ GLOBAL_LIST_EMPTY(asset_datums) /// Whether or not this asset can be cached across rounds of the same commit under the `CACHE_ASSETS` config. /// This is not a *guarantee* the asset will be cached. Not all asset subtypes respect this field, and the /// config can, of course, be disabled. + /// Disable this if your asset can change between rounds on the same exact version of the code. var/cross_round_cachable = FALSE /datum/asset/New() @@ -126,6 +127,7 @@ GLOBAL_LIST_EMPTY(asset_datums) /datum/asset/spritesheet _abstract = /datum/asset/spritesheet + cross_round_cachable = TRUE var/name /// List of arguments to pass into queuedInsert /// Exists so we can queue icon insertion, mostly for stuff like preferences @@ -138,6 +140,9 @@ GLOBAL_LIST_EMPTY(asset_datums) /// If this asset should be fully loaded on new /// Defaults to false so we can process this stuff nicely var/load_immediately = FALSE + VAR_PRIVATE + // Kept in state so that the result is the same, even when the files are created, for this run + should_refresh = null /datum/asset/spritesheet/proc/should_load_immediately() #ifdef DO_NOT_DEFER_ASSETS @@ -151,12 +156,9 @@ GLOBAL_LIST_EMPTY(asset_datums) if (..()) return TRUE - // Static so that the result is the same, even when the files are created, for this run - var/static/should_refresh = null - if (isnull(should_refresh)) // `fexists` seems to always fail on static-time - should_refresh = !fexists("[ASSET_CROSS_ROUND_CACHE_DIRECTORY]/spritesheet.[name].css") + should_refresh = !fexists(css_cache_filename()) || !fexists(data_cache_filename()) return should_refresh @@ -277,8 +279,17 @@ GLOBAL_LIST_EMPTY(asset_datums) return out.Join("\n") +/datum/asset/spritesheet/proc/css_cache_filename() + return "[ASSET_CROSS_ROUND_CACHE_DIRECTORY]/spritesheet.[name].css" + +/datum/asset/spritesheet/proc/data_cache_filename() + return "[ASSET_CROSS_ROUND_CACHE_DIRECTORY]/spritesheet.[name].json" + /datum/asset/spritesheet/proc/read_from_cache() - var/replaced_css = file2text("[ASSET_CROSS_ROUND_CACHE_DIRECTORY]/spritesheet.[name].css") + return read_css_from_cache() && read_data_from_cache() + +/datum/asset/spritesheet/proc/read_css_from_cache() + var/replaced_css = file2text(css_cache_filename()) var/regex/find_background_urls = regex(@"background:url\('%(.+?)%'\)", "g") while (find_background_urls.Find(replaced_css)) @@ -296,6 +307,14 @@ GLOBAL_LIST_EMPTY(asset_datums) return TRUE +/datum/asset/spritesheet/proc/read_data_from_cache() + var/json = json_decode(file2text(data_cache_filename())) + + if (islist(json["sprites"])) + sprites = json["sprites"] + + return TRUE + /datum/asset/spritesheet/proc/send_from_cache(client/client) if (isnull(cached_spritesheets_needed)) stack_trace("cached_spritesheets_needed was null when sending assets from [type] from cache") @@ -311,6 +330,10 @@ GLOBAL_LIST_EMPTY(asset_datums) return SSassets.transport.get_asset_url(asset) /datum/asset/spritesheet/proc/write_to_cache() + write_css_to_cache() + write_data_to_cache() + +/datum/asset/spritesheet/proc/write_css_to_cache() for (var/size_id in sizes) fcopy(SSassets.cache["[name]_[size_id].png"].resource, "[ASSET_CROSS_ROUND_CACHE_DIRECTORY]/spritesheet.[name]_[size_id].png") @@ -318,7 +341,12 @@ GLOBAL_LIST_EMPTY(asset_datums) var/mock_css = generate_css() generating_cache = FALSE - rustg_file_write(mock_css, "[ASSET_CROSS_ROUND_CACHE_DIRECTORY]/spritesheet.[name].css") + rustg_file_write(mock_css, css_cache_filename()) + +/datum/asset/spritesheet/proc/write_data_to_cache() + rustg_file_write(json_encode(list( + "sprites" = sprites, + )), data_cache_filename()) /datum/asset/spritesheet/proc/get_cached_url_mappings() var/list/mappings = list() diff --git a/code/modules/asset_cache/assets/emojipedia.dm b/code/modules/asset_cache/assets/emojipedia.dm index 2197f1bff227..200e3770ff49 100644 --- a/code/modules/asset_cache/assets/emojipedia.dm +++ b/code/modules/asset_cache/assets/emojipedia.dm @@ -1,7 +1,5 @@ /datum/asset/spritesheet/emojipedia name = "emojipedia" - cross_round_cachable = TRUE // The Emoji DMI is static and doesn't change without a commit mis-match. /datum/asset/spritesheet/emojipedia/create_spritesheets() InsertAll("", EMOJI_SET) - diff --git a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm index 5ec23a4f60a2..06810c919dd8 100644 --- a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm +++ b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm @@ -402,6 +402,30 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) if (alarm_manager.clear_alarm(ALARM_ATMOS)) danger_level = AIR_ALARM_ALERT_NONE + /* monke start: air conditioning: */ + if("air_conditioning") + if(!isnum(params["value"])) + return + if(params["value"]) + stop_ac() + else + start_ac() + investigate_log("has had its air conditioning turned [air_conditioning ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS) + . = TRUE + + if("set_ac_target") + if(!isnum(params["target"])) + return + set_ac_target(params["target"]) + investigate_log("has had its air conditioning target set to [params["target"]] by [key_name(usr)]", INVESTIGATE_ATMOS) + . = TRUE + + if("default_ac_target") + set_ac_target(initial(ac_temp_target)) + investigate_log("has had its air conditioning target reset to default by [key_name(usr)]", INVESTIGATE_ATMOS) + . = TRUE + /* monke end */ + update_appearance() return TRUE diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index 9a4623ef49a1..819f9d0f5659 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -5,27 +5,23 @@ name = "circulator/heat exchanger" desc = "A gas circulator pump and heat exchanger." icon_state = "circ-off-0" - - var/active = FALSE - - var/last_pressure_delta = 0 pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY - + vent_movement = VENTCRAWL_CAN_SEE density = TRUE - circuit = /obj/item/circuitboard/machine/circulator + var/active = FALSE + var/last_pressure_delta = 0 var/flipped = 0 + ///Which circulator mode we are on, the generator requires one of each to work. var/mode = CIRCULATOR_HOT - var/obj/machinery/power/generator/generator + ///The generator we are connected to. + var/obj/machinery/power/thermoelectric_generator/generator /obj/machinery/atmospherics/components/binary/circulator/Initialize(mapload) . = ..() AddComponent(/datum/component/simple_rotation) -/obj/machinery/atmospherics/components/binary/circulator/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation - //default cold circ for mappers /obj/machinery/atmospherics/components/binary/circulator/cold mode = CIRCULATOR_COLD @@ -49,25 +45,18 @@ return null //Calculate necessary moles to transfer using PV = nRT - if(air2.temperature>0) - var/pressure_delta = (input_starting_pressure - output_starting_pressure)/2 - - var/transfer_moles = (pressure_delta*air1.volume)/(air2.temperature * R_IDEAL_GAS_EQUATION) - - last_pressure_delta = pressure_delta - - //Actually transfer the gas - var/datum/gas_mixture/removed = air2.remove(transfer_moles) - - update_parents() - - return removed - - else + if(air2.temperature <= 0) last_pressure_delta = 0 + return + var/pressure_delta = (input_starting_pressure - output_starting_pressure)/2 + var/transfer_moles = (pressure_delta*air1.volume)/(air2.temperature * R_IDEAL_GAS_EQUATION) + last_pressure_delta = pressure_delta + //Actually transfer the gas + var/datum/gas_mixture/removed = air2.remove(transfer_moles) + update_parents() + return removed /obj/machinery/atmospherics/components/binary/circulator/process_atmos() - ..() update_appearance() /obj/machinery/atmospherics/components/binary/circulator/update_icon_state() @@ -86,13 +75,13 @@ /obj/machinery/atmospherics/components/binary/circulator/wrench_act(mob/living/user, obj/item/I) if(!panel_open) + balloon_alert(user, "open the panel!") return set_anchored(!anchored) I.play_tool_sound(src) if(generator) disconnectFromGenerator() - to_chat(user, span_notice("You [anchored?"secure":"unsecure"] [src].")) - + balloon_alert(user, "[anchored ? "secure" : "unsecure"]") var/obj/machinery/atmospherics/node1 = nodes[1] var/obj/machinery/atmospherics/node2 = nodes[2] @@ -145,20 +134,22 @@ if(generator) disconnectFromGenerator() mode = !mode - to_chat(user, span_notice("You set [src] to [mode ? "cold" : "hot"] mode.")) + balloon_alert(user, "set to [mode ? "cold" : "hot"]") return TRUE /obj/machinery/atmospherics/components/binary/circulator/screwdriver_act(mob/user, obj/item/I) - if(..()) - return TRUE + if(!anchored) + balloon_alert(user, "anchor it down!") + return toggle_panel_open() I.play_tool_sound(src) - to_chat(user, span_notice("You [panel_open ? "open" : "close"] the panel on [src].")) + balloon_alert(user, "panel [panel_open ? "open" : "closed"]") return TRUE /obj/machinery/atmospherics/components/binary/circulator/crowbar_act(mob/user, obj/item/I) - default_deconstruction_crowbar(I) - return TRUE + if(default_deconstruction_crowbar(I)) + return TRUE + return ..() /obj/machinery/atmospherics/components/binary/circulator/on_deconstruction() if(generator) @@ -176,19 +167,3 @@ ..() pixel_x = 0 pixel_y = 0 - -/obj/machinery/atmospherics/components/binary/circulator/verb/circulator_flip() - set name = "Flip" - set category = "Object" - set src in oview(1) - - if(!ishuman(usr)) - return - - if(anchored) - to_chat(usr, span_danger("[src] is anchored!")) - return - - flipped = !flipped - to_chat(usr, span_notice("You flip [src].")) - update_appearance() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 09dd406fefab..579c3fa62cec 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -109,6 +109,8 @@ var/message_cooldown ///Cryo will continue to treat people with 0 damage but existing wounds, but will sound off when damage healing is done in case doctors want to directly treat the wounds instead var/treating_wounds = FALSE + /// Cryo should notify doctors if the patient is dead, and eject them if autoeject is enabled + var/patient_dead = FALSE fair_market_price = 10 payment_department = ACCOUNT_MED @@ -268,19 +270,36 @@ /obj/machinery/atmospherics/components/unary/cryo_cell/process(seconds_per_tick) ..() - - if(!on) - return if(!occupant) return + if(!on) + // Should turn on if set to auto + if(autoeject) + set_on(TRUE) + else + return + var/mob/living/mob_occupant = occupant if(mob_occupant.on_fire) mob_occupant.extinguish_mob() if(!check_nap_violations()) return - if(mob_occupant.stat == DEAD) // We don't bother with dead people. + if(mob_occupant.stat == DEAD) // Notify doctors and potentially eject if the patient is dead + set_on(FALSE) + var/msg = "Patient is deceased." + if(autoeject) // Eject if configured. + msg += " Auto ejecting patient now." + open_machine() + // Only need to tell them once + if(!patient_dead) + playsound(src, 'sound/machines/cryo_warning.ogg', volume) + patient_dead = TRUE + radio.talk_into(src, msg, radio_channel) return + + patient_dead = FALSE + if(mob_occupant.get_organic_health() >= mob_occupant.getMaxHealth()) // Don't bother with fully healed people. if(iscarbon(mob_occupant)) var/mob/living/carbon/C = mob_occupant @@ -383,6 +402,9 @@ /obj/machinery/atmospherics/components/unary/cryo_cell/close_machine(mob/living/carbon/user, density_to_set = TRUE) treating_wounds = FALSE if((isnull(user) || istype(user)) && state_open && !panel_open) + if(loc == user?.loc) + to_chat(user, span_warning("You can't close [src] on yourself!")) + return flick("pod-close-anim", src) ..(user) return occupant diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 3549edc1c1de..a5387fb32e54 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -405,11 +405,12 @@ if(welded) to_chat(user, span_notice("You cannot pump [src] if it's welded shut!")) + balloon_alert(user, "welded!") return - to_chat(user, span_notice("You begin pumping [src] with your plunger.")) + user.balloon_alert_to_viewers("plunging scrubber...", "plunging clogged scrubber...") if(do_after(user, 6 SECONDS, target = src)) - to_chat(user, span_notice("You finish pumping [src].")) + user.balloon_alert_to_viewers("finished plunging") clogged = FALSE /** diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index 9a3abdb16c5d..0e5678ae3f33 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -98,7 +98,7 @@ normalize_cardinal_directions() find_all_connections() -/obj/machinery/atmospherics/pipe/layer_manifold/set_piping_layer() +/obj/machinery/atmospherics/pipe/layer_manifold/set_piping_layer(new_layer) piping_layer = PIPING_LAYER_DEFAULT /obj/machinery/atmospherics/pipe/layer_manifold/pipeline_expansion() diff --git a/code/modules/awaymissions/signpost.dm b/code/modules/awaymissions/signpost.dm index 64aaca7aa995..2492a5d98297 100644 --- a/code/modules/awaymissions/signpost.dm +++ b/code/modules/awaymissions/signpost.dm @@ -46,9 +46,6 @@ if (Adjacent(user)) return interact(user) -/obj/structure/signpost/attack_slime(mob/user, list/modifiers) - return interact(user) - /obj/structure/signpost/attack_animal(mob/user, list/modifiers) return interact(user) diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm index 78d0b78150c6..0dfc36a4bd60 100644 --- a/code/modules/awaymissions/super_secret_room.dm +++ b/code/modules/awaymissions/super_secret_room.dm @@ -105,9 +105,6 @@ /obj/structure/speaking_tile/attack_ai(mob/user) return interact(user) -/obj/structure/speaking_tile/attack_slime(mob/user, list/modifiers) - return interact(user) - /obj/structure/speaking_tile/attack_animal(mob/user, list/modifiers) return interact(user) diff --git a/code/modules/bitrunning/alerts.dm b/code/modules/bitrunning/alerts.dm index f8c8aa30b943..27412fb359a1 100644 --- a/code/modules/bitrunning/alerts.dm +++ b/code/modules/bitrunning/alerts.dm @@ -3,26 +3,6 @@ icon_state = "template" timeout = 10 SECONDS -/atom/movable/screen/alert/bitrunning/netpod_crowbar - name = "Forced Entry" - desc = "Someone is prying open the netpod door. Find an exit." - -/atom/movable/screen/alert/bitrunning/netpod_damaged - name = "Integrity Compromised" - desc = "The netpod is damaged. Find an exit." - -/atom/movable/screen/alert/bitrunning/qserver_shutting_down - name = "Domain Rebooting" - desc = "The domain is rebooting. Find an exit." - -/atom/movable/screen/alert/bitrunning/qserver_threat_deletion - name = "Queue Deletion" - desc = "The server is resetting. Oblivion awaits." - -/atom/movable/screen/alert/bitrunning/qserver_threat_spawned - name = "Threat Detected" - desc = "Data stream abnormalities present." - /atom/movable/screen/alert/bitrunning/qserver_domain_complete name = "Domain Completed" desc = "The domain is completed. Activate to exit." @@ -37,4 +17,5 @@ return if(tgui_alert(living_owner, "Disconnect safely?", "Server Message", list("Exit", "Remain"), 10 SECONDS) == "Exit") - SEND_SIGNAL(living_owner, COMSIG_BITRUNNER_SAFE_DISCONNECT) + SEND_SIGNAL(living_owner, COMSIG_BITRUNNER_ALERT_SEVER) + diff --git a/code/modules/bitrunning/components/avatar_connection.dm b/code/modules/bitrunning/components/avatar_connection.dm index 60816eab2ae7..6ea21baf21a0 100644 --- a/code/modules/bitrunning/components/avatar_connection.dm +++ b/code/modules/bitrunning/components/avatar_connection.dm @@ -33,13 +33,21 @@ server.avatar_connection_refs.Add(WEAKREF(src)) avatar.key = old_body.key + ADD_TRAIT(avatar, TRAIT_NO_MINDSWAP, REF(src)) // do not remove this one ADD_TRAIT(old_body, TRAIT_MIND_TEMPORARILY_GONE, REF(src)) + /** + * Things that will disconnect forcefully: + * - Server shutdown / broken + * - Netpod power loss / broken + * - Pilot dies/ is moved / falls unconscious + */ + RegisterSignals(old_body, list(COMSIG_LIVING_DEATH, COMSIG_MOVABLE_MOVED, COMSIG_LIVING_STATUS_UNCONSCIOUS), PROC_REF(on_sever_connection)) RegisterSignal(pod, COMSIG_BITRUNNER_CROWBAR_ALERT, PROC_REF(on_netpod_crowbar)) RegisterSignal(pod, COMSIG_BITRUNNER_NETPOD_INTEGRITY, PROC_REF(on_netpod_damaged)) - RegisterSignal(pod, COMSIG_BITRUNNER_SEVER_AVATAR, PROC_REF(on_sever_connection)) + RegisterSignal(pod, COMSIG_BITRUNNER_NETPOD_SEVER, PROC_REF(on_sever_connection)) RegisterSignal(server, COMSIG_BITRUNNER_DOMAIN_COMPLETE, PROC_REF(on_domain_completed)) - RegisterSignal(server, COMSIG_BITRUNNER_SEVER_AVATAR, PROC_REF(on_sever_connection)) + RegisterSignal(server, COMSIG_BITRUNNER_QSRV_SEVER, PROC_REF(on_sever_connection)) RegisterSignal(server, COMSIG_BITRUNNER_SHUTDOWN_ALERT, PROC_REF(on_shutting_down)) RegisterSignal(server, COMSIG_BITRUNNER_THREAT_CREATED, PROC_REF(on_threat_created)) #ifndef UNIT_TESTS @@ -67,18 +75,26 @@ /datum/component/avatar_connection/RegisterWithParent() ADD_TRAIT(parent, TRAIT_TEMPORARY_BODY, REF(src)) - RegisterSignal(parent, COMSIG_BITRUNNER_SAFE_DISCONNECT, PROC_REF(on_safe_disconnect)) + /** + * Things that cause safe disconnection: + * - Click the alert + * - Mailed in a cache + * - Click / Stand on the ladder + */ + RegisterSignals(parent, list(COMSIG_BITRUNNER_ALERT_SEVER, COMSIG_BITRUNNER_CACHE_SEVER, COMSIG_BITRUNNER_LADDER_SEVER), PROC_REF(on_safe_disconnect)) RegisterSignal(parent, COMSIG_LIVING_DEATH, PROC_REF(on_sever_connection)) RegisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_linked_damage)) /datum/component/avatar_connection/UnregisterFromParent() REMOVE_TRAIT(parent, TRAIT_TEMPORARY_BODY, REF(src)) - UnregisterSignal(parent, COMSIG_BITRUNNER_SAFE_DISCONNECT) + UnregisterSignal(parent, COMSIG_BITRUNNER_ALERT_SEVER) + UnregisterSignal(parent, COMSIG_BITRUNNER_CACHE_SEVER) + UnregisterSignal(parent, COMSIG_BITRUNNER_LADDER_SEVER) UnregisterSignal(parent, COMSIG_LIVING_DEATH) UnregisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE) /// Disconnects the avatar and returns the mind to the old_body. -/datum/component/avatar_connection/proc/full_avatar_disconnect(forced = FALSE, datum/source) +/datum/component/avatar_connection/proc/full_avatar_disconnect(cause_damage = FALSE, datum/source) #ifndef UNIT_TESTS return_to_old_body() #endif @@ -87,7 +103,7 @@ if(isnull(hosting_netpod) && istype(source, /obj/machinery/netpod)) hosting_netpod = source - hosting_netpod?.disconnect_occupant(forced) + hosting_netpod?.disconnect_occupant(cause_damage) var/obj/machinery/quantum_server/server = server_ref?.resolve() server?.avatar_connection_refs.Remove(WEAKREF(src)) @@ -99,7 +115,7 @@ SIGNAL_HANDLER var/mob/living/avatar = parent - avatar.playsound_local(avatar, 'sound/machines/terminal_success.ogg', 50, TRUE) + avatar.playsound_local(avatar, 'sound/machines/terminal_success.ogg', 50, vary = TRUE) avatar.throw_alert( ALERT_BITRUNNER_COMPLETED, /atom/movable/screen/alert/bitrunning/qserver_domain_complete, @@ -111,12 +127,11 @@ SIGNAL_HANDLER var/mob/living/carbon/old_body = old_body_ref?.resolve() - if(isnull(old_body) || damage_type == STAMINA || damage_type == OXYLOSS) return if(damage >= (old_body.health + MAX_LIVING_HEALTH)) - full_avatar_disconnect(forced = TRUE) + full_avatar_disconnect(cause_damage = TRUE) return if(damage > 30 && prob(30)) @@ -125,7 +140,7 @@ old_body.apply_damage(damage, damage_type, def_zone, blocked, wound_bonus = CANT_WOUND) if(old_body.stat > SOFT_CRIT) // KO! - full_avatar_disconnect(forced = TRUE) + full_avatar_disconnect(cause_damage = TRUE) /// Handles minds being swapped around in subsequent avatars /datum/component/avatar_connection/proc/on_mind_transfer(datum/mind/source, mob/living/previous_body) @@ -142,58 +157,66 @@ SIGNAL_HANDLER var/mob/living/avatar = parent - avatar.playsound_local(avatar, 'sound/machines/terminal_alert.ogg', 50, TRUE) - avatar.throw_alert( + avatar.playsound_local(avatar, 'sound/machines/terminal_alert.ogg', 50, vary = TRUE) + var/atom/movable/screen/alert/bitrunning/alert = avatar.throw_alert( ALERT_BITRUNNER_CROWBAR, - /atom/movable/screen/alert/bitrunning/netpod_crowbar, + /atom/movable/screen/alert/bitrunning, new_master = intruder ) + alert.name = "Netpod Breached" + alert.desc = "Someone is prying open the netpod. Find an exit." /// Triggers when the netpod is taking damage and is under 50% /datum/component/avatar_connection/proc/on_netpod_damaged(datum/source) SIGNAL_HANDLER var/mob/living/avatar = parent - avatar.throw_alert( + var/atom/movable/screen/alert/bitrunning/alert = avatar.throw_alert( ALERT_BITRUNNER_INTEGRITY, - /atom/movable/screen/alert/bitrunning/netpod_damaged, + /atom/movable/screen/alert/bitrunning, new_master = source ) + alert.name = "Integrity Compromised" + alert.desc = "The netpod is damaged. Find an exit." -/// Safely exits without forced variables, etc +/// Triggers when a safe disconnect is called /datum/component/avatar_connection/proc/on_safe_disconnect(datum/source) SIGNAL_HANDLER full_avatar_disconnect() -/// Helper for calling sever with forced variables +/// Received message to sever connection /datum/component/avatar_connection/proc/on_sever_connection(datum/source) SIGNAL_HANDLER - full_avatar_disconnect(forced = TRUE, source = source) + full_avatar_disconnect(cause_damage = TRUE, source = source) /// Triggers when the server is shutting down /datum/component/avatar_connection/proc/on_shutting_down(datum/source, mob/living/hackerman) SIGNAL_HANDLER var/mob/living/avatar = parent - avatar.playsound_local(avatar, 'sound/machines/terminal_alert.ogg', 50, TRUE) - avatar.throw_alert( + avatar.playsound_local(avatar, 'sound/machines/terminal_alert.ogg', 50, vary = TRUE) + var/atom/movable/screen/alert/bitrunning/alert = avatar.throw_alert( ALERT_BITRUNNER_SHUTDOWN, - /atom/movable/screen/alert/bitrunning/qserver_shutting_down, + /atom/movable/screen/alert/bitrunning, new_master = hackerman, ) + alert.name = "Domain Rebooting" + alert.desc = "The domain is rebooting. Find an exit." /// Server has spawned a ghost role threat /datum/component/avatar_connection/proc/on_threat_created(datum/source) SIGNAL_HANDLER var/mob/living/avatar = parent - avatar.throw_alert( + var/atom/movable/screen/alert/bitrunning/alert = avatar.throw_alert( ALERT_BITRUNNER_THREAT, - /atom/movable/screen/alert/bitrunning/qserver_threat_spawned, + /atom/movable/screen/alert/bitrunning, new_master = source, ) + alert.name = "Threat Detected" + alert.desc = "Data stream abnormalities present." /// Returns the mind to the old body /datum/component/avatar_connection/proc/return_to_old_body() diff --git a/code/modules/bitrunning/components/bitrunning_points.dm b/code/modules/bitrunning/components/bitrunning_points.dm index 58dda4a68ff6..328a70679e65 100644 --- a/code/modules/bitrunning/components/bitrunning_points.dm +++ b/code/modules/bitrunning/components/bitrunning_points.dm @@ -1,46 +1,37 @@ -/// Attaches a component which listens for a given signal from the item. -/// -/// When the signal is received, it will add points to the signaler. +/// Attaches to a turf so it spawns a crate when a certain amount of points are added to it. /datum/component/bitrunning_points - /// The range at which we can find the signaler - var/max_point_range - /// Weakref to the loot crate landmark - where we send points - var/datum/weakref/our_spawner - /// The amount of points per each signal - var/points_per_signal - /// The signal we listen for - var/signal_type - -/datum/component/bitrunning_points/Initialize(signal_type, points_per_signal = 1, max_point_range = 4) - src.max_point_range = max_point_range - src.points_per_signal = points_per_signal - src.signal_type = signal_type - - locate_spawner() - -/datum/component/bitrunning_points/RegisterWithParent() - RegisterSignal(parent, signal_type, PROC_REF(on_event)) - -/datum/component/bitrunning_points/UnregisterFromParent() - UnregisterSignal(parent, signal_type) - -/// Finds the signaler if it hasn't been found yet. -/datum/component/bitrunning_points/proc/locate_spawner() - var/obj/effect/landmark/bitrunning/loot_signal/spawner = our_spawner?.resolve() - if(spawner) - return spawner - - for(var/obj/effect/landmark/bitrunning/loot_signal/found in GLOB.landmarks_list) - if(IN_GIVEN_RANGE(get_turf(parent), found, max_point_range)) - our_spawner = WEAKREF(found) - return found - -/// Once the specified signal is received, whisper to the spawner to add points. -/datum/component/bitrunning_points/proc/on_event(datum/source) + /// The amount required to spawn a crate + var/points_goal = 10 + /// A special condition limits this from spawning a crate + var/points_received = 0 + +/datum/component/bitrunning_points/Initialize(datum/lazy_template/virtual_domain/domain) + . = ..() + if(!isturf(parent)) + return COMPONENT_INCOMPATIBLE + + RegisterSignal(domain, COMSIG_BITRUNNER_GOAL_POINT, PROC_REF(on_add_points)) + +/// Listens for points to be added which will eventually spawn a crate. +/datum/component/bitrunning_points/proc/on_add_points(datum/source, points_to_add) SIGNAL_HANDLER - var/obj/effect/landmark/bitrunning/loot_signal/spawner = locate_spawner() - if(isnull(spawner)) + points_received += points_to_add + + if(points_received < points_goal) return - SEND_SIGNAL(spawner, COMSIG_BITRUNNER_GOAL_POINT, points_per_signal) + reveal() + +/// Spawns the crate with some effects +/datum/component/bitrunning_points/proc/reveal() + playsound(src, 'sound/magic/blink.ogg', 50, TRUE) + + var/turf/tile = parent + new /obj/structure/closet/crate/secure/bitrunning/encrypted(tile) + + var/datum/effect_system/spark_spread/quantum/sparks = new(tile) + sparks.set_up(number = 5, location = tile) + sparks.start() + + qdel(src) diff --git a/code/modules/bitrunning/components/netpod_healing.dm b/code/modules/bitrunning/components/netpod_healing.dm index 2d302d5b4adb..d0babf9e8de2 100644 --- a/code/modules/bitrunning/components/netpod_healing.dm +++ b/code/modules/bitrunning/components/netpod_healing.dm @@ -1,36 +1,18 @@ +#define BASE_HEAL 4 + /datum/component/netpod_healing - /// Brute damage to heal over a second - var/brute_heal = 0 - /// Burn damage to heal over a second - var/burn_heal = 0 - /// Toxin damage to heal over a second - var/toxin_heal = 0 - /// Amount of cloning damage to heal over a second - var/clone_heal = 0 - /// Amount of blood to heal over a second - var/blood_heal = 0 - -/datum/component/netpod_healing/Initialize( - brute_heal = 0, - burn_heal = 0, - toxin_heal = 0, - clone_heal = 0, - blood_heal = 0, -) - var/mob/living/carbon/player = parent - if (!iscarbon(player)) + +/datum/component/netpod_healing/Initialize(obj/machinery/netpod/pod) + if (!iscarbon(parent)) return COMPONENT_INCOMPATIBLE + RegisterSignal(pod, COMSIG_BITRUNNER_NETPOD_OPENED, PROC_REF(on_opened)) + + var/mob/living/carbon/player = parent player.apply_status_effect(/datum/status_effect/embryonic, STASIS_NETPOD_EFFECT) START_PROCESSING(SSmachines, src) - src.brute_heal = brute_heal - src.burn_heal = burn_heal - src.toxin_heal = toxin_heal - src.clone_heal = clone_heal - src.blood_heal = blood_heal - /datum/component/netpod_healing/Destroy(force, silent) STOP_PROCESSING(SSmachines, src) @@ -45,15 +27,23 @@ qdel(src) return - owner.adjustBruteLoss(-brute_heal * seconds_per_tick, updating_health = FALSE) - owner.adjustFireLoss(-burn_heal * seconds_per_tick, updating_health = FALSE) - owner.adjustToxLoss(-toxin_heal * seconds_per_tick, updating_health = FALSE, forced = TRUE) - owner.adjustCloneLoss(-clone_heal * seconds_per_tick, updating_health = FALSE) + var/need_mob_update = FALSE + need_mob_update += owner.adjustBruteLoss(-BASE_HEAL * seconds_per_tick, updating_health = FALSE) + need_mob_update += owner.adjustFireLoss(-BASE_HEAL * seconds_per_tick, updating_health = FALSE) + need_mob_update += owner.adjustToxLoss(-BASE_HEAL * seconds_per_tick, updating_health = FALSE, forced = TRUE) + need_mob_update += owner.adjustCloneLoss(-BASE_HEAL * seconds_per_tick, updating_health = FALSE) if(owner.blood_volume < BLOOD_VOLUME_NORMAL) - owner.blood_volume += blood_heal * seconds_per_tick + owner.blood_volume += BASE_HEAL * seconds_per_tick + + if(need_mob_update) + owner.updatehealth() - owner.updatehealth() +/// Deletes itself when the machine was opened +/datum/component/netpod_healing/proc/on_opened() + SIGNAL_HANDLER + + qdel(src) /datum/status_effect/embryonic id = "embryonic" @@ -72,3 +62,5 @@ name = "Embryonic Stasis" icon_state = "netpod_stasis" desc = "You feel like you're in a dream." + +#undef BASE_HEAL diff --git a/code/modules/bitrunning/components/virtual_elite_mob.dm b/code/modules/bitrunning/components/virtual_elite_mob.dm new file mode 100644 index 000000000000..5a5766ecdf54 --- /dev/null +++ b/code/modules/bitrunning/components/virtual_elite_mob.dm @@ -0,0 +1,18 @@ +/// Removes loot tables from megafauna and lowers their health. +/datum/element/virtual_elite_mob + +/datum/element/virtual_elite_mob/Attach(datum/target) + . = ..() + if(!ismegafauna(target)) + return ELEMENT_INCOMPATIBLE + + var/mob/living/simple_animal/hostile/megafauna/boss = target + + var/new_max = clamp(boss.maxHealth * 0.5, 600, 1200) + boss.maxHealth = new_max + boss.health = new_max + boss.true_spawn = FALSE + boss.loot.Cut() + boss.loot += /obj/structure/closet/crate/secure/bitrunning/encrypted + boss.crusher_loot.Cut() + boss.crusher_loot += /obj/structure/closet/crate/secure/bitrunning/encrypted diff --git a/code/modules/bitrunning/event.dm b/code/modules/bitrunning/event.dm index daae0d15c09e..7f72c3cedcfe 100644 --- a/code/modules/bitrunning/event.dm +++ b/code/modules/bitrunning/event.dm @@ -122,7 +122,14 @@ /// Polls for a ghost that wants to run it /datum/round_event/ghost_role/bitrunning_glitch/proc/get_ghost_mind(role_name) - var/list/mob/dead/observer/ghosties = poll_ghost_candidates("A short term antagonist role is available. Would you like to spawn as a '[role_name]'?", role_name) + var/list/mob/dead/observer/ghosties = SSpolling.poll_ghost_candidates( + question = "A short term antagonist role is available.", + check_jobban = ROLE_PAI, + poll_time = 7.5 SECONDS, + ignore_category = POLL_IGNORE_SPLITPERSONALITY, + pic_source = /datum/antagonist/cyber_police, + role_name_text = role_name + ) if(!length(ghosties)) return diff --git a/code/modules/bitrunning/objects/hololadder.dm b/code/modules/bitrunning/objects/hololadder.dm index 906801f1fc02..e592f31382de 100644 --- a/code/modules/bitrunning/objects/hololadder.dm +++ b/code/modules/bitrunning/objects/hololadder.dm @@ -35,7 +35,7 @@ balloon_alert(user, "disconnecting...") if(do_after(user, travel_time, src)) - SEND_SIGNAL(user, COMSIG_BITRUNNER_SAFE_DISCONNECT) + SEND_SIGNAL(user, COMSIG_BITRUNNER_LADDER_SEVER) /// Helper for times when you dont have hands (gondola??) /obj/structure/hololadder/proc/on_enter(datum/source, atom/movable/arrived, turf/old_loc) diff --git a/code/modules/bitrunning/objects/netpod.dm b/code/modules/bitrunning/objects/netpod.dm index f4f8f3c74e61..eda081f1734a 100644 --- a/code/modules/bitrunning/objects/netpod.dm +++ b/code/modules/bitrunning/objects/netpod.dm @@ -35,15 +35,10 @@ disconnect_damage = BASE_DISCONNECT_DAMAGE find_server() - RegisterSignals(src, list( - COMSIG_QDELETING, - COMSIG_MACHINERY_BROKEN, - COMSIG_MACHINERY_POWER_LOST, - ), - PROC_REF(on_broken), - ) RegisterSignal(src, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) - RegisterSignal(src, COMSIG_ATOM_TAKE_DAMAGE, PROC_REF(on_take_damage)) + RegisterSignal(src, COMSIG_ATOM_TAKE_DAMAGE, PROC_REF(on_damage_taken)) + RegisterSignal(src, COMSIG_MACHINERY_POWER_LOST, PROC_REF(on_power_loss)) + RegisterSignals(src, list(COMSIG_QDELETING, COMSIG_MACHINERY_BROKEN),PROC_REF(on_broken)) register_context() update_appearance() @@ -86,10 +81,10 @@ /obj/machinery/netpod/MouseDrop_T(mob/target, mob/user) var/mob/living/carbon/player = user - if(!iscarbon(player)) + if(!iscarbon(player) || !Adjacent(player) || !ISADVANCEDTOOLUSER(player) || !is_operational || !state_open) return - if((HAS_TRAIT(player, TRAIT_UI_BLOCKED) && !player.resting) || !Adjacent(player) || !player.Adjacent(target) || !ISADVANCEDTOOLUSER(player) || !is_operational) + if(player.buckled || HAS_TRAIT(player, TRAIT_HANDS_BLOCKED)) return close_machine(target) @@ -126,11 +121,6 @@ if(!state_open && gone == occupant) container_resist_act(gone) -/obj/machinery/netpod/Exited(atom/movable/gone, direction) - . = ..() - if(!state_open && gone == occupant) - container_resist_act(gone) - /obj/machinery/netpod/relaymove(mob/living/user, direction) if(!state_open) container_resist_act(user) @@ -142,9 +132,10 @@ open_machine() /obj/machinery/netpod/open_machine(drop = TRUE, density_to_set = FALSE) - unprotect_and_signal() playsound(src, 'sound/machines/tramopen.ogg', 60, TRUE, frequency = 65000) flick("[base_icon_state]_opening", src) + SEND_SIGNAL(src, COMSIG_BITRUNNER_NETPOD_OPENED) + update_use_power(IDLE_POWER_USE) return ..() @@ -156,10 +147,6 @@ flick("[base_icon_state]_closing", src) ..() - if(!iscarbon(occupant)) - open_machine() - return - enter_matrix() /obj/machinery/netpod/default_pry_open(obj/item/crowbar, mob/living/pryer) @@ -184,6 +171,7 @@ if(do_after(pryer, 15 SECONDS, src)) if(!state_open) + sever_connection() open_machine() return TRUE @@ -227,27 +215,37 @@ return FALSE +/obj/machinery/netpod/attack_ghost(mob/dead/observer/our_observer) + var/our_target = avatar_ref?.resolve() + if(isnull(our_target) || !our_observer.orbit(our_target)) + return ..() + +/// Puts the occupant in netpod stasis, basically short-circuiting environmental conditions +/obj/machinery/netpod/proc/add_healing(mob/living/target) + if(target != occupant) + return + + target.AddComponent(/datum/component/netpod_healing, pod = src) + target.playsound_local(src, 'sound/effects/submerge.ogg', 20, vary = TRUE) + target.extinguish_mob() + update_use_power(ACTIVE_POWER_USE) + /// Disconnects the occupant after a certain time so they aren't just hibernating in netpod stasis. A balance change /obj/machinery/netpod/proc/auto_disconnect() if(isnull(occupant) || state_open || connected) return - if(!iscarbon(occupant)) - open_machine() - return - - var/mob/living/carbon/player = occupant - + var/mob/player = occupant player.playsound_local(src, 'sound/effects/splash.ogg', 60, TRUE) to_chat(player, span_notice("The machine disconnects itself and begins to drain.")) open_machine() /// Handles occupant post-disconnection effects like damage, sounds, etc -/obj/machinery/netpod/proc/disconnect_occupant(forced = FALSE) +/obj/machinery/netpod/proc/disconnect_occupant(cause_damage = FALSE) connected = FALSE var/mob/living/mob_occupant = occupant - if(isnull(occupant) || !isliving(occupant) || mob_occupant.stat == DEAD) + if(isnull(occupant) || mob_occupant.stat == DEAD) open_machine() return @@ -256,12 +254,16 @@ mob_occupant.set_temp_blindness(1 SECONDS) mob_occupant.Paralyze(2 SECONDS) + if(!is_operational) + open_machine() + return + var/heal_time = 1 if(mob_occupant.health < mob_occupant.maxHealth) heal_time = (mob_occupant.stat + 2) * 5 addtimer(CALLBACK(src, PROC_REF(auto_disconnect)), heal_time SECONDS, TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_DELETE_ME) - if(!forced) + if(!cause_damage) return mob_occupant.flash_act(override_blindness_check = TRUE, visual = TRUE) @@ -294,27 +296,20 @@ return var/mob/living/carbon/current_avatar = avatar_ref?.resolve() - var/obj/structure/hololadder/wayout if(isnull(current_avatar) || current_avatar.stat != CONSCIOUS) // We need a viable avatar - wayout = server.generate_hololadder() + var/obj/structure/hololadder/wayout = server.generate_hololadder() if(isnull(wayout)) balloon_alert(neo, "out of bandwidth!") return current_avatar = server.generate_avatar(wayout, netsuit) avatar_ref = WEAKREF(current_avatar) - server.stock_gear(current_avatar, neo) + server.stock_gear(current_avatar, neo, generated_domain) neo.set_static_vision(3 SECONDS) - protect_occupant(occupant) - if(!do_after(neo, 2 SECONDS, src)) - return + add_healing(occupant) - // Very invalid - if(QDELETED(neo) || QDELETED(current_avatar) || QDELETED(src)) - return - - // Invalid - if(occupant != neo || isnull(neo.mind) || neo.stat == DEAD || current_avatar.stat == DEAD) + if(!validate_entry(neo, current_avatar)) + open_machine() return current_avatar.AddComponent( \ @@ -339,7 +334,7 @@ return server_ref = WEAKREF(server) - RegisterSignal(server, COMSIG_BITRUNNER_SERVER_UPGRADED, PROC_REF(on_server_upgraded)) + RegisterSignal(server, COMSIG_MACHINERY_REFRESH_PARTS, PROC_REF(on_server_upgraded)) RegisterSignal(server, COMSIG_BITRUNNER_DOMAIN_COMPLETE, PROC_REF(on_domain_complete)) RegisterSignal(server, COMSIG_BITRUNNER_DOMAIN_SCRUBBED, PROC_REF(on_domain_scrubbed)) @@ -352,14 +347,12 @@ "outfits" = list() ) - for(var/path as anything in outfit_list) - var/datum/outfit/outfit = path - + for(var/datum/outfit/outfit as anything in outfit_list) var/outfit_name = initial(outfit.name) if(findtext(outfit_name, "(") != 0 || findtext(outfit_name, "-") != 0) // No special variants please continue - collection["outfits"] += list(list("path" = path, "name" = outfit_name)) + collection["outfits"] += list(list("path" = outfit, "name" = outfit_name)) return list(collection) @@ -367,20 +360,30 @@ /obj/machinery/netpod/proc/on_broken(datum/source) SIGNAL_HANDLER - if(!state_open) - open_machine() + sever_connection() - if(occupant) - unprotect_and_signal() +/// Checks the integrity, alerts occupants +/obj/machinery/netpod/proc/on_damage_taken(datum/source, damage_amount) + SIGNAL_HANDLER + + if(isnull(occupant) || !connected) + return + + var/total = max_integrity - damage_amount + var/integrity = (atom_integrity / total) * 100 + if(integrity > 50) + return + + SEND_SIGNAL(src, COMSIG_BITRUNNER_NETPOD_INTEGRITY) /// Puts points on the current occupant's card account /obj/machinery/netpod/proc/on_domain_complete(datum/source, atom/movable/crate, reward_points) SIGNAL_HANDLER - if(isnull(occupant) || !connected || !iscarbon(occupant)) + if(isnull(occupant) || !connected) return - var/mob/living/carbon/player = occupant + var/mob/living/player = occupant var/datum/bank_account/account = player.get_bank_account() if(isnull(account)) @@ -388,10 +391,25 @@ account.bitrunning_points += reward_points * 100 +/// The domain has been fully purged, so we should double check our avatar is deleted +/obj/machinery/netpod/proc/on_domain_scrubbed(datum/source) + SIGNAL_HANDLER + + var/mob/avatar = avatar_ref?.resolve() + if(isnull(avatar)) + return + + QDEL_NULL(avatar) + /// User inspects the machine /obj/machinery/netpod/proc/on_examine(datum/source, mob/examiner, list/examine_text) SIGNAL_HANDLER + if(isnull(server_ref?.resolve())) + examine_text += span_infoplain("It's not connected to anything.") + examine_text += span_infoplain("Netpods must be built within 4 tiles of a server.") + return + examine_text += span_infoplain("Drag yourself into the pod to engage the link.") examine_text += span_infoplain("It has limited resuscitation capabilities. Remaining in the pod can heal some injuries.") examine_text += span_infoplain("It has a security system that will alert the occupant if it is tampered with.") @@ -403,65 +421,25 @@ examine_text += span_notice("It is currently occupied by [occupant].") examine_text += span_notice("It can be pried open with a crowbar, but its safety mechanisms will alert the occupant.") -/// The domain has been fully purged, so we should double check our avatar is deleted -/obj/machinery/netpod/proc/on_domain_scrubbed(datum/source) +/// Boots out anyone in the machine && opens it +/obj/machinery/netpod/proc/on_power_loss(datum/source) SIGNAL_HANDLER - var/mob/living/current_avatar = avatar_ref?.resolve() - if(isnull(current_avatar)) - return - - QDEL_NULL(current_avatar) - -/// When the server is upgraded, drops brain damage a little -/obj/machinery/netpod/proc/on_server_upgraded(datum/source, servo_rating) - SIGNAL_HANDLER - - disconnect_damage = BASE_DISCONNECT_DAMAGE * (1 - servo_rating) - -/// Checks the integrity, alerts occupants -/obj/machinery/netpod/proc/on_take_damage(datum/source, damage_amount) - SIGNAL_HANDLER - - if(isnull(occupant)) - return - - var/total = max_integrity - damage_amount - var/integrity = (atom_integrity / total) * 100 - if(integrity > 50) + if(state_open) return - SEND_SIGNAL(src, COMSIG_BITRUNNER_NETPOD_INTEGRITY) - -/// Puts the occupant in netpod stasis, basically short-circuiting environmental conditions -/obj/machinery/netpod/proc/protect_occupant(mob/living/target) - if(target != occupant) + if(isnull(occupant) || !connected) + connected = FALSE + open_machine() return - target.AddComponent(/datum/component/netpod_healing, \ - brute_heal = 4, \ - burn_heal = 4, \ - toxin_heal = 4, \ - clone_heal = 4, \ - blood_heal = 4, \ - ) + sever_connection() - target.playsound_local(src, 'sound/effects/submerge.ogg', 20, TRUE) - target.extinguish_mob() - update_use_power(ACTIVE_POWER_USE) - -/// On unbuckle or break, make sure the occupant ref is null -/obj/machinery/netpod/proc/unprotect_and_signal() - unprotect_occupant(occupant) - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) +/// When the server is upgraded, drops brain damage a little +/obj/machinery/netpod/proc/on_server_upgraded(obj/machinery/quantum_server/source) + SIGNAL_HANDLER -/// Removes the occupant from netpod stasis -/obj/machinery/netpod/proc/unprotect_occupant(mob/living/target) - var/datum/component/netpod_healing/healing_eff = target?.GetComponent(/datum/component/netpod_healing) - if(healing_eff) - qdel(healing_eff) - - update_use_power(IDLE_POWER_USE) + disconnect_damage = BASE_DISCONNECT_DAMAGE * (1 - source.servo_bonus) /// Resolves a path to an outfit. /obj/machinery/netpod/proc/resolve_outfit(text) @@ -469,6 +447,13 @@ if(ispath(path, /datum/outfit)) return path +/// Severs the connection with the current avatar +/obj/machinery/netpod/proc/sever_connection() + if(isnull(occupant) || !connected) + return + + SEND_SIGNAL(src, COMSIG_BITRUNNER_NETPOD_SEVER) + /// Closes the machine without shoving in an occupant /obj/machinery/netpod/proc/shut_pod() state_open = FALSE @@ -478,4 +463,19 @@ update_appearance() +/// Checks for cases to eject/fail connecting an avatar +/obj/machinery/netpod/proc/validate_entry(mob/living/neo, mob/living/avatar) + if(!do_after(neo, 2 SECONDS, src)) + return FALSE + + // Very invalid + if(QDELETED(neo) || QDELETED(avatar) || QDELETED(src) || !is_operational) + return FALSE + + // Invalid + if(occupant != neo || isnull(neo.mind) || neo.stat > SOFT_CRIT || avatar.stat == DEAD) + return FALSE + + return TRUE + #undef BASE_DISCONNECT_DAMAGE diff --git a/code/modules/bitrunning/objects/quantum_console.dm b/code/modules/bitrunning/objects/quantum_console.dm index c918648d010b..cfa051b12a24 100644 --- a/code/modules/bitrunning/objects/quantum_console.dm +++ b/code/modules/bitrunning/objects/quantum_console.dm @@ -104,5 +104,4 @@ var/obj/machinery/quantum_server/nearby_server = locate(/obj/machinery/quantum_server, get_step(src, direction)) if(nearby_server) server_ref = WEAKREF(nearby_server) - nearby_server.console_ref = WEAKREF(src) return nearby_server diff --git a/code/modules/bitrunning/server/loot.dm b/code/modules/bitrunning/server/loot.dm index 8b3af95607c6..91889bce0a5f 100644 --- a/code/modules/bitrunning/server/loot.dm +++ b/code/modules/bitrunning/server/loot.dm @@ -7,27 +7,24 @@ rewards_base += servo_bonus - rewards_base += (domain_threats * 2) + rewards_base += (length(spawned_threat_refs) * 2) for(var/index in 2 to length(avatar_connection_refs)) rewards_base += multiplayer_bonus return rewards_base -/// Generates a reward based on the given domain -/obj/machinery/quantum_server/proc/generate_loot() - var/list/obj/machinery/byteforge/nearby_forges = get_nearby_forges() - if(isnull(nearby_forges)) - say(src, "No nearby byteforges detected.") - return FALSE +/// Handles spawning the (new) crate and deleting the former +/obj/machinery/quantum_server/proc/generate_loot(obj/cache, obj/machinery/byteforge/chosen_forge) + for(var/mob/person in cache.contents) + SEND_SIGNAL(person, COMSIG_BITRUNNER_CACHE_SEVER) - points += generated_domain.reward_points - playsound(src, 'sound/machines/terminal_success.ogg', 30, 2) + spark_at_location(cache) // abracadabra! + qdel(cache) // and it's gone! + SEND_SIGNAL(src, COMSIG_BITRUNNER_DOMAIN_COMPLETE, cache, generated_domain.reward_points) - var/obj/machinery/byteforge/chosen_forge = pick(nearby_forges) - if(isnull(chosen_forge)) - stack_trace("Failed to find a turf to spawn loot crate on.") - return FALSE + points += generated_domain.reward_points + playsound(src, 'sound/machines/terminal_success.ogg', 30, vary = TRUE) var/bonus = calculate_rewards() @@ -36,11 +33,11 @@ certificate.name = "certificate of domain completion" certificate.update_appearance() - var/obj/structure/closet/crate/secure/bitrunning/decrypted/reward_crate = new(src, generated_domain, bonus) - reward_crate.manifest = certificate - reward_crate.update_appearance() + var/obj/structure/closet/crate/secure/bitrunning/decrypted/reward_cache = new(src, generated_domain, bonus) + reward_cache.manifest = certificate + reward_cache.update_appearance() - chosen_forge.start_to_spawn(reward_crate) + chosen_forge.start_to_spawn(reward_cache) return TRUE /// Returns the markdown text containing domain completion information @@ -51,18 +48,20 @@ var/bonuses = calculate_rewards() + var/domain_threats = length(spawned_threat_refs) + var/time_difference = world.time - generated_domain.start_time var/completion_time = "### Completion Time: [DisplayTimeText(time_difference)]\n" - var/grade = "\n---\n\n# Rating: [grade_completion(generated_domain.difficulty, domain_threats, base_points, domain_randomized, time_difference)]" + var/grade = "\n---\n\n# Rating: [grade_completion(time_difference)]" var/text = "# Certificate of Domain Completion\n\n---\n\n" text += "### [generated_domain.name][domain_randomized ? " (Randomized)" : ""]\n" text += "- **Difficulty:** [generated_domain.difficulty]\n" text += "- **Threats:** [domain_threats]\n" - text += "- **Base Points:** [base_points][domain_randomized ? " +1" : ""]\n\n" + text += "- **Base Reward:** [base_points][domain_randomized ? " +1" : ""]\n\n" text += "- **Total Bonus:** [bonuses]x\n\n" if(bonuses <= 1) @@ -91,12 +90,11 @@ return text /// Grades the player's run based on several factors -/obj/machinery/quantum_server/proc/grade_completion(difficulty, threats, points, randomized, completion_time) - var/score = threats * 5 - score += points - score += randomized ? 1 : 0 +/obj/machinery/quantum_server/proc/grade_completion(completion_time) + var/score = length(spawned_threat_refs) * 5 + score += generated_domain.reward_points - var/base = difficulty + 1 + var/base = generated_domain.difficulty + 1 var/time_score = 1 if(completion_time <= 1 MINUTES) diff --git a/code/modules/bitrunning/server/map_handling.dm b/code/modules/bitrunning/server/map_handling.dm index 741fad476f0a..061a60b858bc 100644 --- a/code/modules/bitrunning/server/map_handling.dm +++ b/code/modules/bitrunning/server/map_handling.dm @@ -91,7 +91,7 @@ var/turf/goal_turfs = list() var/turf/crate_turfs = list() - for(var/thing in GLOB.landmarks_list) + for(var/obj/effect/landmark/bitrunning/thing in GLOB.landmarks_list) if(istype(thing, /obj/effect/landmark/bitrunning/hololadder_spawn)) exit_turfs += get_turf(thing) qdel(thing) // i'm worried about multiple servers getting confused so lets clean em up @@ -110,6 +110,11 @@ qdel(thing) continue + if(istype(thing, /obj/effect/landmark/bitrunning/loot_signal)) + var/turf/signaler_turf = get_turf(thing) + signaler_turf.AddComponent(/datum/component/bitrunning_points, generated_domain) + qdel(thing) + if(!length(exit_turfs)) CRASH("Failed to find exit turfs on generated domain.") if(!length(goal_turfs)) @@ -142,7 +147,7 @@ /obj/machinery/quantum_server/proc/reset(fast = FALSE) is_ready = FALSE - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) + sever_connections() if(!fast) notify_spawned_threats() @@ -155,12 +160,11 @@ update_use_power(IDLE_POWER_USE) domain_randomized = FALSE - domain_threats = 0 retries_spent = 0 /// Deletes all the tile contents /obj/machinery/quantum_server/proc/scrub_vdom() - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) /// just in case someone's connected + sever_connections() /// just in case someone's connected SEND_SIGNAL(src, COMSIG_BITRUNNER_DOMAIN_SCRUBBED) // avatar cleanup just in case if(length(generated_domain.reservations)) diff --git a/code/modules/bitrunning/server/obj_generation.dm b/code/modules/bitrunning/server/obj_generation.dm index 221308e04878..ce1c66e8890f 100644 --- a/code/modules/bitrunning/server/obj_generation.dm +++ b/code/modules/bitrunning/server/obj_generation.dm @@ -8,15 +8,22 @@ to_wear.belt = /obj/item/bitrunning_host_monitor to_wear.glasses = null to_wear.gloves = null - to_wear.l_hand = null to_wear.l_pocket = null - to_wear.r_hand = null to_wear.r_pocket = null to_wear.suit = null to_wear.suit_store = null avatar.equipOutfit(to_wear, visualsOnly = TRUE) + var/obj/item/clothing/under/jumpsuit = avatar.w_uniform + if(istype(jumpsuit)) + jumpsuit.set_armor(/datum/armor/clothing_under) + + var/obj/item/clothing/head/hat = avatar.get_clothing_on_part(HEAD) + + if(istype(hat)) + hat.set_armor(null) + var/thing = avatar.get_active_held_item() if(!isnull(thing)) qdel(thing) @@ -73,11 +80,29 @@ return wayout /// Scans over neo's contents for bitrunning tech disks. Loads the items or abilities onto the avatar. -/obj/machinery/quantum_server/proc/stock_gear(mob/living/carbon/human/avatar, mob/living/carbon/human/neo) +/obj/machinery/quantum_server/proc/stock_gear(mob/living/carbon/human/avatar, mob/living/carbon/human/neo, datum/lazy_template/virtual_domain/generated_domain) + var/domain_forbids_items = generated_domain.forbids_disk_items + var/domain_forbids_spells = generated_domain.forbids_disk_spells + + var/import_ban = list() + var/disk_ban = list() + if(domain_forbids_items) + import_ban += "smuggled digital equipment" + disk_ban += "items" + if(domain_forbids_spells) + import_ban += "imported_abilities" + disk_ban += "powers" + + if(length(import_ban)) + to_chat(neo, span_warning("This domain forbids the use of [english_list(import_ban)], your disk [english_list(disk_ban)] will not be granted!")) + var/failed = FALSE + // We don't need to bother going over the disks if neither of the types can be used. + if(domain_forbids_spells && domain_forbids_items) + return for(var/obj/item/bitrunning_disk/disk in neo.get_contents()) - if(istype(disk, /obj/item/bitrunning_disk/ability)) + if(istype(disk, /obj/item/bitrunning_disk/ability) && !domain_forbids_spells) var/obj/item/bitrunning_disk/ability/ability_disk = disk if(isnull(ability_disk.granted_action)) @@ -88,7 +113,7 @@ our_action.Grant(avatar) continue - if(istype(disk, /obj/item/bitrunning_disk/item)) + if(istype(disk, /obj/item/bitrunning_disk/item) && !domain_forbids_items) var/obj/item/bitrunning_disk/item/item_disk = disk if(isnull(item_disk.granted_item)) diff --git a/code/modules/bitrunning/server/quantum_server.dm b/code/modules/bitrunning/server/quantum_server.dm index 357f94cf9eeb..f469c4c95418 100644 --- a/code/modules/bitrunning/server/quantum_server.dm +++ b/code/modules/bitrunning/server/quantum_server.dm @@ -16,12 +16,8 @@ var/datum/lazy_template/virtual_domain/generated_domain /// The loaded safehouse, map_template/safehouse var/datum/map_template/safehouse/generated_safehouse - /// The connected console - var/datum/weakref/console_ref /// If the current domain was a random selection var/domain_randomized = FALSE - /// If any threats were spawned, adds to rewards - var/domain_threats = 0 /// Prevents multiple user actions. Handled by loading domains and cooldowns var/is_ready = TRUE /// List of available domains @@ -57,9 +53,6 @@ /obj/machinery/quantum_server/LateInitialize() . = ..() - if(isnull(console_ref)) - find_console() - radio = new(src) radio.set_frequency(FREQ_SUPPLY) radio.subspace_transmission = TRUE @@ -147,4 +140,3 @@ servo_bonus = servo_rating - SEND_SIGNAL(src, COMSIG_BITRUNNER_SERVER_UPGRADED, servo_rating) diff --git a/code/modules/bitrunning/server/signal_handlers.dm b/code/modules/bitrunning/server/signal_handlers.dm index b0464b351faf..c41c0b529fc8 100644 --- a/code/modules/bitrunning/server/signal_handlers.dm +++ b/code/modules/bitrunning/server/signal_handlers.dm @@ -2,10 +2,7 @@ /obj/machinery/quantum_server/proc/on_broken(datum/source) SIGNAL_HANDLER - if(isnull(generated_domain)) - return - - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) + sever_connections() /// Whenever a corpse spawner makes a new corpse, add it to the list of potential mutations /obj/machinery/quantum_server/proc/on_corpse_spawned(datum/source, mob/living/corpse) @@ -18,7 +15,7 @@ SIGNAL_HANDLER if(generated_domain) - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) + sever_connections() scrub_vdom() if(is_ready) @@ -49,25 +46,14 @@ /obj/machinery/quantum_server/proc/on_goal_turf_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER - if(!istype(arrived, /obj/structure/closet/crate/secure/bitrunning/encrypted)) + var/obj/machinery/byteforge/chosen_forge = get_random_nearby_forge() + if(isnull(chosen_forge)) return - var/obj/structure/closet/crate/secure/bitrunning/encrypted/loot_crate = arrived - if(!istype(loot_crate)) + if(istype(arrived, /obj/structure/closet/crate/secure/bitrunning/encrypted)) + generate_loot(arrived, chosen_forge) return - for(var/mob/person in loot_crate.contents) - if(isnull(person.mind)) - person.forceMove(get_turf(loot_crate)) - - var/datum/component/avatar_connection/connection = person.GetComponent(/datum/component/avatar_connection) - connection?.full_avatar_disconnect() - - spark_at_location(loot_crate) - qdel(loot_crate) - SEND_SIGNAL(src, COMSIG_BITRUNNER_DOMAIN_COMPLETE, arrived, generated_domain.reward_points) - generate_loot() - /// Handles examining the server. Shows cooldown time and efficiency. /obj/machinery/quantum_server/proc/on_goal_turf_examined(datum/source, mob/examiner, list/examine_text) SIGNAL_HANDLER @@ -83,8 +69,11 @@ if(isliving(thing)) // so we can mutate them var/mob/living/creature = thing - if(creature.can_be_cybercop) - mutation_candidate_refs.Add(WEAKREF(creature)) + if(ismegafauna(creature)) + creature.AddElement(/datum/element/virtual_elite_mob) + continue + + mutation_candidate_refs.Add(WEAKREF(creature)) continue if(istype(thing, /obj/effect/mob_spawn/ghost_role)) // so we get threat alerts @@ -98,10 +87,11 @@ UnregisterSignal(source, COMSIG_LAZY_TEMPLATE_LOADED) + /// Just in case there's any special handling for the domain + generated_domain.setup_domain(created_atoms) + /// Handles when cybercops are summoned into the area or ghosts click a ghost role spawner /obj/machinery/quantum_server/proc/on_threat_created(datum/source, mob/living/threat) SIGNAL_HANDLER - domain_threats += 1 - spawned_threat_refs.Add(WEAKREF(threat)) - SEND_SIGNAL(src, COMSIG_BITRUNNER_THREAT_CREATED) // notify players + add_threats(threat) diff --git a/code/modules/bitrunning/server/threats.dm b/code/modules/bitrunning/server/threats.dm new file mode 100644 index 000000000000..451b4c48c190 --- /dev/null +++ b/code/modules/bitrunning/server/threats.dm @@ -0,0 +1,21 @@ +/// Adds threats to the list and notifies players +/obj/machinery/quantum_server/proc/add_threats(mob/living/threat) + spawned_threat_refs.Add(WEAKREF(threat)) + SEND_SIGNAL(src, COMSIG_BITRUNNER_THREAT_CREATED) + +/// Finds any mobs with minds in the zones and gives them the bad news +/obj/machinery/quantum_server/proc/notify_spawned_threats() + for(var/datum/weakref/baddie_ref as anything in spawned_threat_refs) + var/mob/living/baddie = baddie_ref.resolve() + if(isnull(baddie?.mind) || baddie.stat >= UNCONSCIOUS) + continue + + var/atom/movable/screen/alert/bitrunning/alert = baddie.throw_alert( + ALERT_BITRUNNER_RESET, + /atom/movable/screen/alert/bitrunning, + new_master = src, + ) + alert.name = "Queue Deletion" + alert.desc = "The server is resetting. Oblivion awaits." + + to_chat(baddie, span_userdanger("You have been flagged for deletion! Thank you for your service.")) diff --git a/code/modules/bitrunning/server/util.dm b/code/modules/bitrunning/server/util.dm index 9570fd439151..3d8b2c07880a 100644 --- a/code/modules/bitrunning/server/util.dm +++ b/code/modules/bitrunning/server/util.dm @@ -7,19 +7,6 @@ update_appearance() radio.talk_into(src, "Thermal systems within operational parameters. Proceeding to domain configuration.", RADIO_CHANNEL_SUPPLY) -/// Attempts to connect to a quantum console -/obj/machinery/quantum_server/proc/find_console() - var/obj/machinery/computer/quantum_console/console = console_ref?.resolve() - if(console) - return console - - for(var/direction in GLOB.cardinals) - var/obj/machinery/computer/quantum_console/nearby_console = locate(/obj/machinery/computer/quantum_console, get_step(src, direction)) - if(nearby_console) - console_ref = WEAKREF(nearby_console) - nearby_console.server_ref = WEAKREF(src) - return nearby_console - /// Compiles a list of available domains. /obj/machinery/quantum_server/proc/get_available_domains() var/list/levels = list() @@ -91,6 +78,15 @@ domain_randomized = TRUE return available["id"] +/// Locates any turfs with forges on them, returns a random one +/obj/machinery/quantum_server/proc/get_random_nearby_forge() + var/list/nearby_forges = list() + + for(var/obj/machinery/byteforge/forge in oview(MAX_DISTANCE, src)) + nearby_forges += forge + + return pick(nearby_forges) + /// Gets all mobs originally generated by the loaded domain and returns a list that are capable of being antagged /obj/machinery/quantum_server/proc/get_valid_domain_targets() // A: No one is playing @@ -116,20 +112,12 @@ return nearby_forges -/// Finds any mobs with minds in the zones and gives them the bad news -/obj/machinery/quantum_server/proc/notify_spawned_threats() - for(var/datum/weakref/baddie_ref as anything in spawned_threat_refs) - var/mob/living/baddie = baddie_ref.resolve() - if(isnull(baddie) || baddie.stat >= UNCONSCIOUS || isnull(baddie.mind)) - continue - - baddie.throw_alert( - ALERT_BITRUNNER_RESET, - /atom/movable/screen/alert/bitrunning/qserver_threat_deletion, - new_master = src, - ) +/// Severs any connected users +/obj/machinery/quantum_server/proc/sever_connections() + if(isnull(generated_domain) || !length(avatar_connection_refs)) + return - to_chat(baddie, span_userdanger("You have been flagged for deletion! Thank you for your service.")) + SEND_SIGNAL(src, COMSIG_BITRUNNER_QSRV_SEVER) /// Do some magic teleport sparks /obj/machinery/quantum_server/proc/spark_at_location(obj/cache) diff --git a/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm b/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm index 02bb91abc588..83d65a7fb46a 100644 --- a/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm +++ b/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm @@ -8,11 +8,3 @@ map_name = "ash_drake" reward_points = BITRUNNER_REWARD_MEDIUM safehouse_path = /datum/map_template/safehouse/lavaland_boss - -/mob/living/simple_animal/hostile/megafauna/dragon/virtual_domain - can_be_cybercop = FALSE - crusher_loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - health = 1600 - loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - maxHealth = 1600 - true_spawn = FALSE diff --git a/code/modules/bitrunning/virtual_domain/domains/beach_bar.dm b/code/modules/bitrunning/virtual_domain/domains/beach_bar.dm index a6fb3e921e05..f632b0681bf4 100644 --- a/code/modules/bitrunning/virtual_domain/domains/beach_bar.dm +++ b/code/modules/bitrunning/virtual_domain/domains/beach_bar.dm @@ -8,15 +8,14 @@ map_name = "beach_bar" safehouse_path = /datum/map_template/safehouse/mine -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain - name = "pina colada" - desc = "Whose drink is this? Not yours, that's for sure. Well, it's not like they're going to miss it." - list_reagents = list(/datum/reagent/consumable/ethanol/pina_colada = 30) - -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain/Initialize(mapload, vol) +/datum/lazy_template/virtual_domain/beach_bar/setup_domain(list/created_atoms) . = ..() - AddComponent(/datum/component/bitrunning_points, \ - signal_type = COMSIG_GLASS_DRANK, \ - points_per_signal = 0.5, \ - ) + for(var/obj/item/reagent_containers/cup/glass/drink in created_atoms) + RegisterSignal(drink, COMSIG_GLASS_DRANK, PROC_REF(on_drink_drank)) + +/// Eventually reveal the cache +/datum/lazy_template/virtual_domain/beach_bar/proc/on_drink_drank(datum/source) + SIGNAL_HANDLER + + add_points(0.5) diff --git a/code/modules/bitrunning/virtual_domain/domains/blood_drunk_miner.dm b/code/modules/bitrunning/virtual_domain/domains/blood_drunk_miner.dm index abf2e0fc5a94..ad5d22f51751 100644 --- a/code/modules/bitrunning/virtual_domain/domains/blood_drunk_miner.dm +++ b/code/modules/bitrunning/virtual_domain/domains/blood_drunk_miner.dm @@ -8,11 +8,3 @@ map_name = "blood_drunk_miner" reward_points = BITRUNNER_REWARD_MEDIUM safehouse_path = /datum/map_template/safehouse/lavaland_boss - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/virtual_domain - can_be_cybercop = FALSE - crusher_loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - health = 1600 - loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - maxHealth = 1600 - true_spawn = FALSE diff --git a/code/modules/bitrunning/virtual_domain/domains/breeze_bay.dm b/code/modules/bitrunning/virtual_domain/domains/breeze_bay.dm new file mode 100644 index 000000000000..62fd3117a94e --- /dev/null +++ b/code/modules/bitrunning/virtual_domain/domains/breeze_bay.dm @@ -0,0 +1,22 @@ +/datum/lazy_template/virtual_domain/breeze_bay + name = "Breeze Bay" + desc = "A beach front town with a large forest to the north." + help_text = "It's simple! Enjoy some rays, catch some fish, and have a good time! Don't get bit by the crabs, though." + key = "breeze_bay" + map_name = "breeze_bay" + safehouse_path = /datum/map_template/safehouse/wood + +/datum/lazy_template/virtual_domain/breeze_bay/setup_domain(list/created_atoms) + . = ..() + + for(var/obj/item/fishing_rod/rod in created_atoms) + RegisterSignal(rod, COMSIG_FISHING_ROD_CAUGHT_FISH, PROC_REF(on_fish_caught)) + +/// Eventually reveal the cache +/datum/lazy_template/virtual_domain/breeze_bay/proc/on_fish_caught(datum/source, reward) + SIGNAL_HANDLER + + if(isnull(reward)) + return + + add_points(2) diff --git a/code/modules/bitrunning/virtual_domain/domains/bubblegum.dm b/code/modules/bitrunning/virtual_domain/domains/bubblegum.dm index bede97177cb7..4ac4a6476bd2 100644 --- a/code/modules/bitrunning/virtual_domain/domains/bubblegum.dm +++ b/code/modules/bitrunning/virtual_domain/domains/bubblegum.dm @@ -9,11 +9,3 @@ map_name = "bubblegum" reward_points = BITRUNNER_REWARD_HIGH safehouse_path = /datum/map_template/safehouse/lavaland_boss - -/mob/living/simple_animal/hostile/megafauna/bubblegum/virtual_domain - can_be_cybercop = FALSE - crusher_loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - health = 2000 - loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - maxHealth = 2000 - true_spawn = FALSE diff --git a/code/modules/bitrunning/virtual_domain/domains/colossus.dm b/code/modules/bitrunning/virtual_domain/domains/colossus.dm index 35ba4eee0ca8..9baa011263b3 100644 --- a/code/modules/bitrunning/virtual_domain/domains/colossus.dm +++ b/code/modules/bitrunning/virtual_domain/domains/colossus.dm @@ -9,10 +9,3 @@ reward_points = BITRUNNER_REWARD_HIGH safehouse_path = /datum/map_template/safehouse/lavaland_boss -/mob/living/simple_animal/hostile/megafauna/colossus/virtual_domain - can_be_cybercop = FALSE - crusher_loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - health = 2000 - maxHealth = 2000 - true_spawn = FALSE diff --git a/code/modules/bitrunning/virtual_domain/domains/hierophant.dm b/code/modules/bitrunning/virtual_domain/domains/hierophant.dm index 142623f4f812..5b67c9d9bf22 100644 --- a/code/modules/bitrunning/virtual_domain/domains/hierophant.dm +++ b/code/modules/bitrunning/virtual_domain/domains/hierophant.dm @@ -8,11 +8,3 @@ map_name = "hierophant" reward_points = BITRUNNER_REWARD_HIGH safehouse_path = /datum/map_template/safehouse/lavaland_boss - -/mob/living/simple_animal/hostile/megafauna/hierophant/virtual_domain - can_be_cybercop = FALSE - crusher_loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - health = 1700 - loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - maxHealth = 1700 - true_spawn = FALSE diff --git a/code/modules/bitrunning/virtual_domain/domains/legion.dm b/code/modules/bitrunning/virtual_domain/domains/legion.dm deleted file mode 100644 index f1ba146f3801..000000000000 --- a/code/modules/bitrunning/virtual_domain/domains/legion.dm +++ /dev/null @@ -1,20 +0,0 @@ -/datum/lazy_template/virtual_domain/legion - name = "Chamber of Echoes" - cost = BITRUNNER_COST_MEDIUM - desc = "A chilling realm that houses Legion's necropolis. Those who succumb to it are forever damned." - difficulty = BITRUNNER_DIFFICULTY_MEDIUM - forced_outfit = /datum/outfit/job/miner - key = "legion" - map_name = "legion" - reward_points = BITRUNNER_REWARD_MEDIUM - safehouse_path = /datum/map_template/safehouse/lavaland_boss - -/mob/living/simple_animal/hostile/megafauna/legion/virtual_domain - can_be_cybercop = FALSE - crusher_loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - health = 1500 - loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - maxHealth = 1500 - true_spawn = FALSE - -// You may be thinking, what about those mini-legions? They're not part of the initial created_atoms list diff --git a/code/modules/bitrunning/virtual_domain/domains/wendigo.dm b/code/modules/bitrunning/virtual_domain/domains/wendigo.dm index fcad3db6faf7..fa0d15b92e9f 100644 --- a/code/modules/bitrunning/virtual_domain/domains/wendigo.dm +++ b/code/modules/bitrunning/virtual_domain/domains/wendigo.dm @@ -9,11 +9,3 @@ reward_points = BITRUNNER_REWARD_HIGH safehouse_path = /datum/map_template/safehouse/lavaland_boss -/mob/living/simple_animal/hostile/megafauna/wendigo/virtual_domain - can_be_cybercop = FALSE - crusher_loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - guaranteed_butcher_results = list(/obj/item/wendigo_skull = 1) - health = 2000 - loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - maxHealth = 2000 - true_spawn = FALSE diff --git a/code/modules/bitrunning/virtual_domain/virtual_domain.dm b/code/modules/bitrunning/virtual_domain/virtual_domain.dm index c2bd193f4e98..5e6cb0f2582e 100644 --- a/code/modules/bitrunning/virtual_domain/virtual_domain.dm +++ b/code/modules/bitrunning/virtual_domain/virtual_domain.dm @@ -20,6 +20,10 @@ var/filename = "virtual_domain.dmm" /// Any outfit that you wish to force on avatars. Overrides preferences var/datum/outfit/forced_outfit + /// If this domain blocks the use of items from disks, for whatever reason + var/forbids_disk_items = FALSE + /// If this domain blocks the use of spells from disks, for whatever reason + var/forbids_disk_spells = FALSE /// Information given to connected clients via ability var/help_text // Name to show in the UI @@ -32,3 +36,11 @@ var/test_only = FALSE /// The safehouse to load into the map var/datum/map_template/safehouse/safehouse_path = /datum/map_template/safehouse/den + +/// Sends a point to any loot signals on the map +/datum/lazy_template/virtual_domain/proc/add_points(points_to_add) + SEND_SIGNAL(src, COMSIG_BITRUNNER_GOAL_POINT, points_to_add) + +/// Overridable proc to be called after the map is loaded. +/datum/lazy_template/virtual_domain/proc/setup_domain(list/created_atoms) + return diff --git a/code/modules/cargo/bounties/science.dm b/code/modules/cargo/bounties/science.dm index 294b2a49bd6a..237d84abbac4 100644 --- a/code/modules/cargo/bounties/science.dm +++ b/code/modules/cargo/bounties/science.dm @@ -67,7 +67,7 @@ description = "Our big data division needs more powerful hardware to play 'Outbomb Cuban Pe-', err, to closely monitor threats in your sector. Send us a working modular computer console." reward = CARGO_CRATE_VALUE * 6 required_count = 1 - wanted_types = list(/obj/machinery/modular_computer/console = TRUE) + wanted_types = list(/obj/machinery/modular_computer = TRUE) require_powered = FALSE /datum/bounty/item/science/ntnet/console/applies_to(obj/O) diff --git a/code/modules/cargo/department_order.dm b/code/modules/cargo/department_order.dm index fe6c151e658a..57c0cbf0a814 100644 --- a/code/modules/cargo/department_order.dm +++ b/code/modules/cargo/department_order.dm @@ -21,9 +21,26 @@ GLOBAL_LIST_INIT(department_order_cooldowns, list( var/list/department_delivery_areas = list() ///which groups this computer can order from var/list/dep_groups = list() + /// If this departmental order console currently is on cooldown. + var/on_cooldown = FALSE + + /// Our radio object we use to talk to our department. + var/obj/item/radio/radio + /// The radio key typepath that will be instantiated and inserted into our radio. + var/obj/item/encryptionkey/radio_key_typepath + /// The radio channel we will speak into by default. + var/radio_channel /obj/machinery/computer/department_orders/Initialize(mapload, obj/item/circuitboard/board) . = ..() + + if (radio_channel && radio_key_typepath) + radio = new(src) + radio.keyslot = new radio_key_typepath + radio.subspace_transmission = TRUE + radio.canhear_range = 0 + radio.recalculateChannels() + if(mapload) //check for mapping errors for(var/delivery_area_type in department_delivery_areas) if(GLOB.areas_by_type[delivery_area_type]) @@ -32,6 +49,11 @@ GLOBAL_LIST_INIT(department_order_cooldowns, list( log_mapping("[src] has no valid areas to deliver to on this map, add some more fallback areas to its \"department_delivery_areas\" var.") department_delivery_areas = list(/area/station/hallway/primary/central) //if this doesn't exist like honestly fuck your map man +/obj/machinery/computer/department_orders/Destroy() + QDEL_NULL(radio) + + return ..() + /obj/machinery/computer/department_orders/ui_interact(mob/user, datum/tgui/ui) . = ..() ui = SStgui.try_update_ui(user, src, ui) @@ -163,6 +185,20 @@ GLOBAL_LIST_INIT(department_order_cooldowns, list( time_y = 5 MINUTES * time_y GLOB.department_order_cooldowns[type] = world.time + time_y +/obj/machinery/computer/department_orders/process() + . = ..() + if (!.) + return FALSE + + if (GLOB.department_order_cooldowns[type] > world.time) + on_cooldown = TRUE + else if (on_cooldown) + radio?.talk_into(src, "Order cooldown has expired! A new order may now be placed!", radio_channel) + playsound(src, 'sound/machines/ping.ogg', 30, TRUE) + on_cooldown = FALSE + + return TRUE + /obj/machinery/computer/department_orders/service name = "service order console" circuit = /obj/item/circuitboard/computer/service_orders @@ -170,6 +206,8 @@ GLOBAL_LIST_INIT(department_order_cooldowns, list( override_access = ACCESS_HOP req_one_access = list(ACCESS_SERVICE) dep_groups = list("Service", "Food & Hydroponics", "Livestock", "Costumes & Toys") + radio_key_typepath = /obj/item/encryptionkey/headset_service + radio_channel = RADIO_CHANNEL_SERVICE /obj/machinery/computer/department_orders/engineering name = "engineering order console" @@ -178,6 +216,8 @@ GLOBAL_LIST_INIT(department_order_cooldowns, list( override_access = ACCESS_CE req_one_access = REGION_ACCESS_ENGINEERING dep_groups = list("Engineering", "Engine Construction", "Canisters & Materials") + radio_key_typepath = /obj/item/encryptionkey/headset_eng + radio_channel = RADIO_CHANNEL_ENGINEERING /obj/machinery/computer/department_orders/science name = "science order console" @@ -186,6 +226,8 @@ GLOBAL_LIST_INIT(department_order_cooldowns, list( override_access = ACCESS_RD req_one_access = REGION_ACCESS_RESEARCH dep_groups = list("Science", "Livestock", "Canisters & Materials") + radio_key_typepath = /obj/item/encryptionkey/headset_sci + radio_channel = RADIO_CHANNEL_SCIENCE /obj/machinery/computer/department_orders/security name = "security order console" @@ -198,6 +240,8 @@ GLOBAL_LIST_INIT(department_order_cooldowns, list( override_access = ACCESS_HOS req_one_access = REGION_ACCESS_SECURITY dep_groups = list("Security", "Armory") + radio_key_typepath = /obj/item/encryptionkey/headset_sec + radio_channel = RADIO_CHANNEL_SECURITY /obj/machinery/computer/department_orders/medical name = "medical order console" @@ -211,3 +255,5 @@ GLOBAL_LIST_INIT(department_order_cooldowns, list( override_access = ACCESS_CMO req_one_access = REGION_ACCESS_MEDBAY dep_groups = list("Medical") + radio_key_typepath = /obj/item/encryptionkey/headset_med + radio_channel = RADIO_CHANNEL_MEDICAL diff --git a/code/modules/cargo/exports/xenobio.dm b/code/modules/cargo/exports/xenobio.dm index fdd8d38aa4fc..728d8cbcb599 100644 --- a/code/modules/cargo/exports/xenobio.dm +++ b/code/modules/cargo/exports/xenobio.dm @@ -28,7 +28,7 @@ /datum/export/slime/hypercharged cost = CARGO_CRATE_VALUE * 1.2 unit_name = "hypercharged slime core" - export_types = list(/obj/item/stock_parts/cell/high/slime_hypercharged) + export_types = list(/obj/item/stock_parts/cell/emproof/slime/hypercharged) // monke edit: make hypercharged slime cells EMP-proof, by changing their parent from cell/high to cell/emproof /datum/export/slime/epic //EPIIIIIIC cost = CARGO_CRATE_VALUE * 0.44 diff --git a/code/modules/client/client_colour.dm b/code/modules/client/client_colour.dm index 9aed1d300727..e23c994eda9a 100644 --- a/code/modules/client/client_colour.dm +++ b/code/modules/client/client_colour.dm @@ -38,35 +38,32 @@ /datum/client_colour/Destroy() if(!QDELETED(owner)) owner.client_colours -= src - if(fade_out) - owner.animate_client_colour(fade_out) - else - owner.update_client_colour() + owner.animate_client_colour(fade_out) owner = null return ..() ///Sets a new colour, then updates the owner's screen colour. /datum/client_colour/proc/update_colour(new_colour, anim_time, easing = 0) colour = new_colour - if(anim_time) - owner.animate_client_colour(anim_time, easing) - else - owner.update_client_colour() + owner.animate_client_colour(anim_time, easing) /** * Adds an instance of colour_type to the mob's client_colours list * colour_type - a typepath (subtyped from /datum/client_colour) */ -/mob/proc/add_client_colour(colour_type) - if(!ispath(colour_type, /datum/client_colour) || QDELING(src)) +/mob/proc/add_client_colour(colour_type_or_datum) + if(QDELING(src)) return + var/datum/client_colour/colour + if(istype(colour_type_or_datum, /datum/client_colour)) + colour = colour_type_or_datum + else if(ispath(colour_type_or_datum, /datum/client_colour)) + colour = new colour_type_or_datum(src) + else + CRASH("Invalid colour type or datum for add_client_color: [colour_type_or_datum || "null"]") - var/datum/client_colour/colour = new colour_type(src) BINARY_INSERT(colour, client_colours, /datum/client_colour, colour, priority, COMPARE_KEY) - if(colour.fade_in) - animate_client_colour(colour.fade_in) - else - update_client_colour() + animate_client_colour(colour.fade_in) return colour /** @@ -77,8 +74,7 @@ if(!ispath(colour_type, /datum/client_colour)) return - for(var/cc in client_colours) - var/datum/client_colour/colour = cc + for(var/datum/client_colour/colour as anything in client_colours) if(colour.type == colour_type) qdel(colour) break @@ -123,31 +119,49 @@ };\ target = _our_colour\ +#define CLIENT_COLOR_FILTER_KEY "fake_client_color" /** * Resets the mob's client.color to null, and then reapplies a new color based * on the client_colour datums it currently has. */ /mob/proc/update_client_colour() - if(!client) + if(isnull(hud_used)) return - client.color = "" - if(!client_colours.len) - return - MIX_CLIENT_COLOUR(client.color) + + var/new_color = "" + if(length(client_colours)) + MIX_CLIENT_COLOUR(new_color) + + for(var/atom/movable/screen/plane_master/game_plane as anything in hud_used.get_true_plane_masters(RENDER_PLANE_GAME)) + if(new_color) + game_plane.add_filter(CLIENT_COLOR_FILTER_KEY, 2, color_matrix_filter(new_color)) + else + game_plane.remove_filter(CLIENT_COLOR_FILTER_KEY) ///Works similarly to 'update_client_colour', but animated. -/mob/proc/animate_client_colour(anim_time = 20, anim_easing = 0) - if(!client) +/mob/proc/animate_client_colour(anim_time = 2 SECONDS, anim_easing = NONE) + if(anim_time <= 0) + return update_client_colour() + if(isnull(hud_used)) return - if(!client_colours.len) - animate(client, color = "", time = anim_time, easing = anim_easing) - return - MIX_CLIENT_COLOUR(var/anim_colour) - animate(client, color = anim_colour, time = anim_time, easing = anim_easing) + + var/anim_color = "" + if(length(client_colours)) + MIX_CLIENT_COLOUR(anim_color) + + for(var/atom/movable/screen/plane_master/game_plane as anything in hud_used.get_true_plane_masters(RENDER_PLANE_GAME)) + if(anim_color) + game_plane.add_filter(CLIENT_COLOR_FILTER_KEY, 2, color_matrix_filter()) + game_plane.transition_filter(CLIENT_COLOR_FILTER_KEY, color_matrix_filter(anim_color), anim_time, anim_easing) + else + game_plane.transition_filter(CLIENT_COLOR_FILTER_KEY, color_matrix_filter(), anim_time, anim_easing) + // This leaves a blank color filter on the hud which is, fine I guess? #undef MIX_CLIENT_COLOUR +#undef CLIENT_COLOR_FILTER_KEY + /datum/client_colour/glass_colour priority = PRIORITY_LOW colour = "red" @@ -195,6 +209,9 @@ fade_in = 20 fade_out = 20 +/datum/client_colour/monochrome/colorblind + priority = PRIORITY_HIGH + /datum/client_colour/monochrome/trance priority = PRIORITY_NORMAL @@ -218,6 +235,9 @@ override = TRUE colour = list(0.8,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,1, 0,0,0,0) +/datum/client_colour/temp + priority = PRIORITY_HIGH + #undef PRIORITY_ABSOLUTE #undef PRIORITY_HIGH #undef PRIORITY_NORMAL diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 4c0c0e11a297..bbfb2cbd655c 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -563,6 +563,10 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( /client/Del() if(!gc_destroyed) + gc_destroyed = world.time + if (!QDELING(src)) + stack_trace("Client does not purport to be QDELING, this is going to cause bugs in other places!") + // Yes this is the same as what's found in qdel(). Yes it does need to be here // Get off my back SEND_SIGNAL(src, COMSIG_QDELETING, TRUE) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 49d434e5cb7e..6a0475ab053b 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -9,7 +9,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) /// Ensures that we always load the last used save, QOL var/default_slot = 1 /// The maximum number of slots we're allowed to contain - var/max_save_slots = 3 + var/max_save_slots = 20 /// Bitflags for communications that are muted var/muted = NONE @@ -106,8 +106,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(load_and_save && !fexists(path)) try_savefile_type_migration() unlock_content = !!parent.IsByondMember() - if(unlock_content) - max_save_slots = 8 + // monke edit: more save slots + //if(unlock_content) + // max_save_slots = 8 else CRASH("attempted to create a preferences datum without a client or mock!") load_savefile() @@ -272,12 +273,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/default_value = read_preference(requested_preference.type) // Yielding - var/new_color = input( + var/new_color = tgui_color_picker( usr, "Select new color", null, default_value || COLOR_WHITE, - ) as color | null + ) if (!new_color) return FALSE diff --git a/code/modules/client/preferences/assets.dm b/code/modules/client/preferences/assets.dm index fbd4d0698ca4..609de24a0811 100644 --- a/code/modules/client/preferences/assets.dm +++ b/code/modules/client/preferences/assets.dm @@ -2,7 +2,6 @@ /datum/asset/spritesheet/preferences name = "preferences" early = TRUE - cross_round_cachable = TRUE /datum/asset/spritesheet/preferences/create_spritesheets() var/list/to_insert = list() diff --git a/code/modules/client/preferences/clothing.dm b/code/modules/client/preferences/clothing.dm index c9397bde3509..c1bb5f4c3105 100644 --- a/code/modules/client/preferences/clothing.dm +++ b/code/modules/client/preferences/clothing.dm @@ -12,7 +12,7 @@ if (accessory_name != "Nude") var/datum/sprite_accessory/accessory = accessory_list[accessory_name] - var/icon/accessory_icon = icon('icons/mob/clothing/underwear.dmi', accessory.icon_state) + var/icon/accessory_icon = icon(accessory.icon, accessory.icon_state) //MONKESTATION EDIT if (color && !accessory.use_static) accessory_icon.Blend(color, ICON_MULTIPLY) icon_with_socks.Blend(accessory_icon, ICON_OVERLAY) @@ -81,11 +81,26 @@ should_generate_icons = TRUE /datum/preference/choiced/socks/init_possible_values() - return generate_values_for_underwear(GLOB.socks_list, list("human_r_leg", "human_l_leg")) + return generate_values_for_underwear(GLOB.socks_list, list("human_r_leg", "human_l_leg"), COLOR_WHITE) /datum/preference/choiced/socks/apply_to_human(mob/living/carbon/human/target, value) target.socks = value +/datum/preference/choiced/socks/is_accessible(datum/preferences/preferences) + if (!..(preferences)) + return FALSE + + var/species_type = preferences.read_preference(/datum/preference/choiced/species) + var/datum/species/species = new species_type + return !(NO_UNDERWEAR in species.species_traits) + +/datum/preference/choiced/socks/compile_constant_data() + var/list/data = ..() + + data[SUPPLEMENTAL_FEATURE_KEY] = "socks_color" + + return data + /// Undershirt preference /datum/preference/choiced/undershirt savefile_key = "undershirt" diff --git a/code/modules/client/preferences/middleware/antags.dm b/code/modules/client/preferences/middleware/antags.dm index ef70b62cd5c4..4e5d66e3b97d 100644 --- a/code/modules/client/preferences/middleware/antags.dm +++ b/code/modules/client/preferences/middleware/antags.dm @@ -108,7 +108,6 @@ /datum/asset/spritesheet/antagonists name = "antagonists" early = TRUE - cross_round_cachable = TRUE /// Mapping of spritesheet keys -> icons var/list/antag_icons = list() @@ -120,7 +119,10 @@ ROLE_FUGITIVE = /datum/antagonist/fugitive, ROLE_LONE_OPERATIVE = /datum/antagonist/nukeop/lone, ROLE_SENTIENCE = /datum/antagonist/sentient_creature, - ROLE_DRIFTING_CONTRACTOR = /datum/antagonist/traitor/contractor, //monkestation edit + //monkestation antags + ROLE_DRIFTING_CONTRACTOR = /datum/antagonist/traitor/contractor, + ROLE_SLASHER = /datum/antagonist/slasher, + ROLE_FLORIDA_MAN = /datum/antagonist/florida_man ) var/list/antagonists = non_ruleset_antagonists.Copy() diff --git a/code/modules/client/preferences/middleware/species.dm b/code/modules/client/preferences/middleware/species.dm index a87dc16a7922..80c78d256406 100644 --- a/code/modules/client/preferences/middleware/species.dm +++ b/code/modules/client/preferences/middleware/species.dm @@ -9,7 +9,6 @@ /datum/asset/spritesheet/species name = "species" early = TRUE - cross_round_cachable = TRUE /datum/asset/spritesheet/species/create_spritesheets() var/list/to_insert = list() diff --git a/code/modules/client/preferences/migrations/tgui_prefs_migration.dm b/code/modules/client/preferences/migrations/tgui_prefs_migration.dm index ba4b4d03e909..5759c42afba7 100644 --- a/code/modules/client/preferences/migrations/tgui_prefs_migration.dm +++ b/code/modules/client/preferences/migrations/tgui_prefs_migration.dm @@ -70,6 +70,7 @@ "random_undershirt" = "undershirt", "random_underwear" = "underwear", "random_underwear_color" = "underwear_color", + "random_socks_color" = "socks_color", ) var/static/list/random_antag_settings = list( diff --git a/code/modules/client/preferences/names.dm b/code/modules/client/preferences/names.dm index 3438ec14e39d..0f3105c73367 100644 --- a/code/modules/client/preferences/names.dm +++ b/code/modules/client/preferences/names.dm @@ -155,3 +155,25 @@ /datum/preference/name/bible/create_default_value() return DEFAULT_BIBLE + +/// The first name given to nuclear operative antagonists. The last name will be chosen by the team leader. +/datum/preference/name/operative_alias + savefile_key = "operative_alias" + allow_numbers = TRUE //You can get a little wacky with your alias nobody will judge you + explanation = "Operative Alias" + group = "antagonists" + +/datum/preference/name/operative_alias/create_default_value() + return pick(GLOB.operative_aliases) + +/datum/preference/name/operative_alias/is_accessible(datum/preferences/preferences) + . = ..() + if(!.) + return FALSE + + // If one of the roles is ticked in the antag prefs menu, this option will show. + var/static/list/ops_roles = list(ROLE_OPERATIVE, ROLE_LONE_OPERATIVE, ROLE_OPERATIVE_MIDROUND, ROLE_CLOWN_OPERATIVE) + if(length(ops_roles & preferences.be_special)) + return TRUE + + return FALSE diff --git a/code/modules/client/preferences/screentips.dm b/code/modules/client/preferences/screentips.dm index 5566f28b539f..87ce18d7f24e 100644 --- a/code/modules/client/preferences/screentips.dm +++ b/code/modules/client/preferences/screentips.dm @@ -35,4 +35,12 @@ client.mob?.hud_used?.screentip_color = value /datum/preference/color/screentip_color/create_default_value() - return "#ffd391" + return LIGHT_COLOR_FAINT_BLUE + +/datum/preference/toggle/screentip_images + category = PREFERENCE_CATEGORY_GAME_PREFERENCES + savefile_key = "screentip_images" + savefile_identifier = PREFERENCE_PLAYER + +/datum/preference/toggle/screentip_images/apply_to_client(client/client, value) + client.mob?.hud_used?.screentip_images = value diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 712548cdf6be..3400ca81968e 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -117,12 +117,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(parent.hotkeys) for(var/hotkeytobind in kb.hotkey_keys) - if(!length(binds_by_key[hotkeytobind]) && hotkeytobind != "Unbound") //Only bind to the key if nothing else is bound expect for Unbound + if(hotkeytobind == "Unbound") + addedbind = TRUE + else if(!length(binds_by_key[hotkeytobind])) //Only bind to the key if nothing else is bound key_bindings[kb.name] |= hotkeytobind addedbind = TRUE else for(var/classickeytobind in kb.classic_keys) - if(!length(binds_by_key[classickeytobind]) && classickeytobind != "Unbound") //Only bind to the key if nothing else is bound expect for Unbound + if(classickeytobind == "Unbound") + addedbind = TRUE + else if(!length(binds_by_key[classickeytobind])) //Only bind to the key if nothing else is bound key_bindings[kb.name] |= classickeytobind addedbind = TRUE diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index 032a7bb8d243..6d24e28e4f97 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -143,7 +143,7 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8") set category = "Server" if(IsAdminAdvancedProcCall()) return - var/newColor = input(src, "Please select the new player OOC color.", "OOC color") as color|null + var/newColor = tgui_color_picker(src, "Please select the new player OOC color.", "OOC color") if(isnull(newColor)) return if(!check_rights(R_FUN)) diff --git a/code/modules/client/verbs/who.dm b/code/modules/client/verbs/who.dm index 6dea707240fa..a92e75077463 100644 --- a/code/modules/client/verbs/who.dm +++ b/code/modules/client/verbs/who.dm @@ -1,4 +1,5 @@ #define DEFAULT_WHO_CELLS_PER_ROW 4 +#define NO_ADMINS_ONLINE_MESSAGE "Adminhelps are also sent through TGS to services like IRC and Discord. If no admins are available in game, sending an adminhelp might still be noticed and responded to." /client/verb/who() set name = "Who" @@ -10,7 +11,7 @@ var/columns_per_row = DEFAULT_WHO_CELLS_PER_ROW if(holder) - if (check_rights(R_ADMIN,0) && isobserver(src.mob))//If they have +ADMIN and are a ghost they can see players IC names and statuses. + if (check_rights(R_ADMIN, FALSE) && isobserver(src.mob))//If they have +ADMIN and are a ghost they can see players IC names and statuses. columns_per_row = 1 var/mob/dead/observer/G = src.mob if(!G.started_as_observer)//If you aghost to do this, KorPhaeron will deadmin you in your sleep. @@ -66,51 +67,132 @@ msg += "" msg += "Total Players: [length(Lines)]" - to_chat(src, "[msg]") + to_chat(src, examine_block(span_infoplain(msg))) /client/verb/adminwho() set category = "Admin" set name = "Adminwho" - var/msg = "Current Admins:\n" - var/display_name - if(holder) - for(var/client/client in GLOB.admins) - var/feedback_link = client.holder.feedback_link() - display_name = feedback_link ? "[client]" : client - - msg += "\t[display_name] is a [client.holder.rank_names()]" - - if(client.holder.fakekey) - msg += " (as [client.holder.fakekey])" - - if(isobserver(client.mob)) - msg += " - Observing" - else if(isnewplayer(client.mob)) - if(SSticker.current_state <= GAME_STATE_PREGAME) - var/mob/dead/new_player/lobbied_admin = client.mob - if(lobbied_admin.ready == PLAYER_READY_TO_PLAY) - msg += " - Lobby (Readied)" - else - msg += " - Lobby (Not readied)" + var/list/lines = list() + var/payload_string = generate_adminwho_string() + var/header = (payload_string == NO_ADMINS_ONLINE_MESSAGE) ? "No Admins Currently Online" : "Current Admins:" + + lines += span_bold(header) + lines += payload_string + + var/codermonkey_string = generate_codemonkey_string() + if(!isnull(codermonkey_string)) + lines += span_bold("Current Non-Admin Staff:") + lines += span_boldnotice("Non-admin staff are unable to handle adminhelp tickets.") + lines += codermonkey_string + + var/finalized_string = examine_block(jointext(lines, "\n")) + to_chat(src, finalized_string) + +/// Proc that generates the applicable string to dispatch to the client for adminwho. +/client/proc/generate_adminwho_string() + var/list/list_of_admins = get_list_of_admins() + if(isnull(list_of_admins)) + return NO_ADMINS_ONLINE_MESSAGE + + var/list/message_strings = list() + if(isnull(holder)) + message_strings += get_general_adminwho_information(list_of_admins) + message_strings += NO_ADMINS_ONLINE_MESSAGE + else + message_strings += get_sensitive_adminwho_information(list_of_admins) + + return jointext(message_strings, "\n") + +/// Proc that generates the applicable string to dispatch to the client for adminwho, +/// but only for maintainers/debuggers/etc without R_ADMIN. +/client/proc/generate_codemonkey_string() + var/list/list_of_admins = get_list_of_admins(coders = TRUE) + if(isnull(list_of_admins)) + return + return jointext(get_codermonkey_adminwho_information(list_of_admins), "\n") + +/// Proc that returns a list of cliented admins. Remember that this list can contain nulls! +/// Also, will return null if we don't have any admins. +/proc/get_list_of_admins(coders = FALSE) + var/returnable_list = list() + + for(var/client/admin in GLOB.admins) + var/okay = check_rights_for(admin, R_ADMIN) + if(coders) + okay = !okay + if(!okay) + continue + returnable_list += admin + + if(length(returnable_list) == 0) + return null + + return returnable_list + +/// Proc that will return the applicable display name, linkified or not, based on the input client reference. +/proc/get_linked_admin_name(client/admin) + var/feedback_link = admin.holder.feedback_link() + return isnull(feedback_link) ? admin : "[admin]" + +/// Proc that gathers adminwho information for a general player, which will only give information if an admin isn't AFK, and handles potential fakekeying. +/// Will return a list of strings. +/proc/get_general_adminwho_information(list/checkable_admins) + var/returnable_list = list() + + for(var/client/admin in checkable_admins) + if(admin.is_afk() || !isnull(admin.holder.fakekey)) + continue //Don't show afk or fakekeyed admins to adminwho + + returnable_list += "• [get_linked_admin_name(admin)] is a [admin.holder.rank_names()]" + + return returnable_list + +/// Proc that gathers adminwho information for a general player, but only returns "adminless" admins, usually coders/debuggers and such. +/proc/get_codermonkey_adminwho_information(list/checkable_admins) + var/returnable_list = list() + + for(var/client/admin in checkable_admins) + if(check_rights_for(admin, R_ADMIN)) + continue //Don't show afk or fakekeyed admins to adminwho + + returnable_list += "• [admin] is a [admin.holder.rank_names()]" + + return returnable_list + +/// Proc that gathers adminwho information for admins, which will contain information on if the admin is AFK, readied to join, etc. Only arg is a list of clients to use. +/// Will return a list of strings. +/proc/get_sensitive_adminwho_information(list/checkable_admins) + var/returnable_list = list() + + for(var/client/admin in checkable_admins) + var/list/admin_strings = list() + + admin_strings += "• [get_linked_admin_name(admin)] is a [admin.holder.rank_names()]" + + if(admin.holder.fakekey) + admin_strings += "(as [admin.holder.fakekey])" + + if(isobserver(admin.mob)) + admin_strings += "- Observing" + else if(isnewplayer(admin.mob)) + if(SSticker.current_state <= GAME_STATE_PREGAME) + var/mob/dead/new_player/lobbied_admin = admin.mob + if(lobbied_admin.ready == PLAYER_READY_TO_PLAY) + admin_strings += "- Lobby (Readied)" else - msg += " - Lobby" + admin_strings += "- Lobby (Not Readied)" else - msg += " - Playing" + admin_strings += "- Lobby" + else + admin_strings += "- Playing" - if(client.is_afk()) - msg += " (AFK)" - msg += "\n" - else - for(var/client/client in GLOB.admins) - var/feedback_link = client.holder.feedback_link() - display_name = feedback_link ? "[client]" : client + if(admin.is_afk()) + admin_strings += "(AFK)" + + returnable_list += jointext(admin_strings, " ") - if(client.is_afk()) - continue //Don't show afk admins to adminwho - if(!client.holder.fakekey) - msg += "\t[display_name] is a [client.holder.rank_names()]\n" - msg += span_info("Adminhelps are also sent through TGS to services like IRC and Discord. If no admins are available in game, sending an adminhelp might still be noticed and responded to.") - to_chat(src, msg) + return returnable_list #undef DEFAULT_WHO_CELLS_PER_ROW +#undef NO_ADMINS_ONLINE_MESSAGE diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 17640521c674..f37a8e343f14 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -397,6 +397,29 @@ inhand_icon_state = "gar" glass_colour_type = /datum/client_colour/glass_colour/red +///Syndicate item that upgrades the flash protection of your eyes. +/obj/item/syndicate_contacts + name = "suspicious contact lens case" + desc = "A sinister red case that contains two shiny black contact lenses." + w_class = WEIGHT_CLASS_TINY + icon = 'icons/obj/device.dmi' + icon_state = "contacts" + +/obj/item/syndicate_contacts/attack_self(mob/user, modifiers) + . = ..() + if(!user.get_organ_slot(ORGAN_SLOT_EYES)) + to_chat(user, span_warning("You have no eyes to apply the contacts to!")) + return + var/obj/item/organ/internal/eyes/eyes = user.get_organ_slot(ORGAN_SLOT_EYES) + + to_chat(user, span_notice("You begin applying the contact lenses to your eyes...")) + if(!do_after(user, 3 SECONDS, src)) + return + to_chat(user, span_notice("The contacts seamlessly merge with your iris.")) + eyes.flash_protect += FLASH_PROTECTION_WELDER + to_chat(user, span_warning("\The [src] disintegrates into nothing.")) + qdel(src) + /obj/item/clothing/glasses/welding name = "welding goggles" desc = "Protects the eyes from bright flashes; approved by the mad scientist association." @@ -505,6 +528,23 @@ var/datum/action/item_action/chameleon/change/chameleon_action +// MONKESTATION ADDITION START +/obj/item/clothing/glasses/thermal/syndi/attackby(obj/item/W, mob/user, params) + if(W.tool_behaviour != TOOL_MULTITOOL) + return ..() + + if(chameleon_action.hidden) + chameleon_action.hidden = FALSE + actions += chameleon_action + chameleon_action.Grant(user) + log_game("[key_name(user)] has removed the disguise lock on the chameleon thermals ([name]) with [W]") + else + chameleon_action.hidden = TRUE + actions -= chameleon_action + chameleon_action.Remove(user) + log_game("[key_name(user)] has locked the disguise of the chameleon thermals ([name]) with [W]") +// MONKESTATION ADDITION END + /obj/item/clothing/glasses/thermal/syndi/Initialize(mapload) . = ..() chameleon_action = new(src) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 989e1bbc2acf..db21c6cce3a5 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -151,6 +151,22 @@ return chameleon_action.emp_randomise() +// MONKESTATION ADDITION START +/obj/item/clothing/glasses/hud/security/chameleon/attackby(obj/item/W, mob/user, params) + if(W.tool_behaviour != TOOL_MULTITOOL) + return ..() + + if(chameleon_action.hidden) + chameleon_action.hidden = FALSE + actions += chameleon_action + chameleon_action.Grant(user) + log_game("[key_name(user)] has removed the disguise lock on the chameleon security HUD ([name]) with [W]") + else + chameleon_action.hidden = TRUE + actions -= chameleon_action + chameleon_action.Remove(user) + log_game("[key_name(user)] has locked the disguise of the chameleon security HUD ([name]) with [W]") +// MONKESTATION ADDITION END /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch name = "eyepatch HUD" diff --git a/code/modules/clothing/head/cone.dm b/code/modules/clothing/head/cone.dm index 59d8cfe0d271..0bd60b633da5 100644 --- a/code/modules/clothing/head/cone.dm +++ b/code/modules/clothing/head/cone.dm @@ -1,7 +1,7 @@ /obj/item/clothing/head/cone desc = "This cone is trying to warn you of something!" name = "warning cone" - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/service/janitor.dmi' worn_icon = 'icons/mob/clothing/head/utility.dmi' icon_state = "cone" inhand_icon_state = null diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index fc018e15a0dc..7264b435fb20 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -12,19 +12,77 @@ desc = "The commander in chef's head wear." strip_delay = 10 equip_delay_other = 10 - dog_fashion = /datum/dog_fashion/head/chef - ///the chance that the movements of a mouse inside of this hat get relayed to the human wearing the hat + /// The chance that the movements of a mouse inside of this hat get relayed to the human wearing the hat var/mouse_control_probability = 20 + /// Allowed time between movements + COOLDOWN_DECLARE(move_cooldown) + +/// Admin variant of the chef hat where every mouse pilot input will always be transferred to the wearer +/obj/item/clothing/head/utility/chefhat/i_am_assuming_direct_control + desc = "The commander in chef's head wear. Upon closer inspection, there seem to be dozens of tiny levers, buttons, dials, and screens inside of this hat. What the hell...?" + mouse_control_probability = 100 /obj/item/clothing/head/utility/chefhat/Initialize(mapload) . = ..() - create_storage(storage_type = /datum/storage/pockets/chefhat) -/obj/item/clothing/head/utility/chefhat/i_am_assuming_direct_control - desc = "The commander in chef's head wear. Upon closer inspection, there seem to be dozens of tiny levers, buttons, dials, and screens inside of this hat. What the hell...?" - mouse_control_probability = 100 +/obj/item/clothing/head/utility/chefhat/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + var/mob/living/basic/new_boss = get_mouse(arrived) + if(!new_boss) + return + RegisterSignal(new_boss, COMSIG_MOB_PRE_EMOTED, PROC_REF(on_mouse_emote)) + RegisterSignal(new_boss, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_mouse_moving)) + RegisterSignal(new_boss, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, PROC_REF(on_mouse_moving)) + +/obj/item/clothing/head/utility/chefhat/Exited(atom/movable/gone, direction) + . = ..() + var/mob/living/basic/old_boss = get_mouse(gone) + if(!old_boss) + return + UnregisterSignal(old_boss, list(COMSIG_MOB_PRE_EMOTED, COMSIG_MOVABLE_PRE_MOVE, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE)) + +/// Returns a mob stored inside a mob container, if there is one +/obj/item/clothing/head/utility/chefhat/proc/get_mouse(atom/possible_mouse) + if (!ispickedupmob(possible_mouse)) + return + var/obj/item/clothing/head/mob_holder/mousey_holder = possible_mouse + return locate(/mob/living/basic) in mousey_holder.contents + +/// Relays emotes emoted by your boss to the hat wearer for full immersion +/obj/item/clothing/head/utility/chefhat/proc/on_mouse_emote(mob/living/source, key, emote_message, type_override) + SIGNAL_HANDLER + var/mob/living/carbon/wearer = loc + if(!wearer || wearer.incapacitated(IGNORE_RESTRAINTS)) + return + if (!prob(mouse_control_probability)) + return COMPONENT_CANT_EMOTE + INVOKE_ASYNC(wearer, TYPE_PROC_REF(/mob, emote), key, type_override, emote_message, FALSE) + return COMPONENT_CANT_EMOTE + +/// Relays movement made by the mouse in your hat to the wearer of the hat +/obj/item/clothing/head/utility/chefhat/proc/on_mouse_moving(mob/living/source, atom/moved_to) + SIGNAL_HANDLER + if (!prob(mouse_control_probability) || !COOLDOWN_FINISHED(src, move_cooldown)) + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE // Didn't roll well enough or on cooldown + + var/mob/living/carbon/wearer = loc + if(!wearer || wearer.incapacitated(IGNORE_RESTRAINTS)) + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE // Not worn or can't move + + var/move_direction = get_dir(wearer, moved_to) + if(!wearer.Process_Spacemove(move_direction)) + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE // Currently drifting in space + if(!has_gravity() || !isturf(wearer.loc)) + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE // Not in a location where we can move + + step_towards(wearer, moved_to) + var/move_delay = wearer.cached_multiplicative_slowdown + if (ISDIAGONALDIR(move_direction)) + move_delay *= sqrt(2) + COOLDOWN_START(src, move_cooldown, move_delay) + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE /obj/item/clothing/head/utility/chefhat/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is donning [src]! It looks like [user.p_theyre()] trying to become a chef.")) @@ -35,14 +93,6 @@ playsound(user, 'sound/machines/ding.ogg', 50, TRUE) return FIRELOSS -/obj/item/clothing/head/utility/chefhat/relaymove(mob/living/user, direction) - if(!ismouse(user) || !isliving(loc) || !prob(mouse_control_probability)) - return - var/mob/living/L = loc - if(L.incapacitated(IGNORE_RESTRAINTS)) //just in case - return - step_towards(L, get_step(L, direction)) - //Captain /obj/item/clothing/head/hats/caphat name = "captain's hat" @@ -156,6 +206,116 @@ /obj/item/clothing/head/fedora/det_hat/minor flask_path = /obj/item/reagent_containers/cup/glass/flask/det/minor +///Detectives Fedora, but like Inspector Gadget. Not a subtype to not inherit candy corn stuff +/obj/item/clothing/head/fedora/inspector_hat + name = "inspector's fedora" + desc = "There's only one man can try to stop an evil villian." + armor_type = /datum/armor/fedora_det_hat + icon_state = "detective" + inhand_icon_state = "det_hat" + dog_fashion = /datum/dog_fashion/head/detective + ///prefix our phrases must begin with + var/prefix = "go go gadget" + ///an assoc list of phrase = item (like gun = revolver) + var/list/items_by_phrase = list() + ///how many gadgets can we hold + var/max_items = 4 + ///items above this weight cannot be put in the hat + var/max_weight = WEIGHT_CLASS_NORMAL + +/obj/item/clothing/head/fedora/inspector_hat/Initialize(mapload) + . = ..() + become_hearing_sensitive(ROUNDSTART_TRAIT) + QDEL_NULL(atom_storage) + +/obj/item/clothing/head/fedora/inspector_hat/examine(mob/user) + . = ..() + . += span_notice("You can put items inside, and get them out by saying a phrase, or using it in-hand!") + . += span_notice("The prefix is [prefix], and you can change it with alt-click!\n") + for(var/phrase in items_by_phrase) + var/obj/item/item = items_by_phrase[phrase] + . += span_notice("[icon2html(item, user)] You can remove [item] by saying \"[prefix] [phrase]\"!") + +/obj/item/clothing/head/fedora/inspector_hat/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, list/message_mods = list(), message_range) + . = ..() + var/mob/living/carbon/wearer = loc + if(!istype(wearer) || speaker != wearer) //if we are worn + return FALSE + + raw_message = htmlrendertext(raw_message) + var/prefix_index = findtext(raw_message, prefix) + if(prefix_index != 1) + return FALSE + + var/the_phrase = trim_left(replacetext(raw_message, prefix, "")) + var/obj/item/result = items_by_phrase[the_phrase] + if(!result) + return FALSE + + if(wearer.put_in_active_hand(result)) + wearer.visible_message(span_warning("[src] drops [result] into the hands of [wearer]!")) + else + balloon_alert(wearer, "cant put in hands!") + + return TRUE + +/obj/item/clothing/head/fedora/inspector_hat/attackby(obj/item/item, mob/user, params) + . = ..() + + if(LAZYLEN(contents) >= max_items) + balloon_alert(user, "full!") + return + if(item.w_class > max_weight) + balloon_alert(user, "too big!") + return + + var/input = tgui_input_text(user, "What is the activation phrase?", "Activation phrase", "gadget", max_length = 26) + if(!input) + return + if(input in items_by_phrase) + balloon_alert(user, "already used!") + return + + if(item.loc != user || !user.transferItemToLoc(item, src)) + return + + to_chat(user, span_notice("You install [item] into the [thtotext(contents.len)] slot in [src].")) + playsound(src, 'sound/machines/click.ogg', 30, TRUE) + items_by_phrase[input] = item + +/obj/item/clothing/head/fedora/inspector_hat/attack_self(mob/user) + . = ..() + var/phrase = tgui_input_list(user, "What item do you want to remove by phrase?", "Item Removal", items_by_phrase) + if(!phrase) + return + user.put_in_inactive_hand(items_by_phrase[phrase]) + +/obj/item/clothing/head/fedora/inspector_hat/AltClick(mob/user) + . = ..() + var/new_prefix = tgui_input_text(user, "What should be the new prefix?", "Activation prefix", prefix, max_length = 24) + if(!new_prefix) + return + prefix = new_prefix + +/obj/item/clothing/head/fedora/inspector_hat/Exited(atom/movable/gone, direction) + . = ..() + for(var/phrase in items_by_phrase) + var/obj/item/result = items_by_phrase[phrase] + if(gone == result) + items_by_phrase -= phrase + return + +/obj/item/clothing/head/fedora/inspector_hat/atom_destruction(damage_flag) + for(var/phrase in items_by_phrase) + var/obj/item/result = items_by_phrase[phrase] + result.forceMove(drop_location()) + items_by_phrase = null + return ..() + +/obj/item/clothing/head/fedora/inspector_hat/Destroy() + QDEL_LIST_ASSOC(items_by_phrase) + return ..() + //Mime /obj/item/clothing/head/beret name = "beret" diff --git a/code/modules/clothing/head/mind_monkey_helmet.dm b/code/modules/clothing/head/mind_monkey_helmet.dm index 4df509e951ba..b52f126281c3 100644 --- a/code/modules/clothing/head/mind_monkey_helmet.dm +++ b/code/modules/clothing/head/mind_monkey_helmet.dm @@ -47,11 +47,18 @@ playsound(src, 'sound/machines/ping.ogg', 30, TRUE) RegisterSignal(magnification, COMSIG_SPECIES_LOSS, PROC_REF(make_fall_off)) polling = TRUE - var/list/candidates = poll_candidates_for_mob("Do you want to play as a mind magnified monkey?", ROLE_MONKEY_HELMET, null, 5 SECONDS, magnification, POLL_IGNORE_MONKEY_HELMET) + var/list/candidates = SSpolling.poll_ghost_candidates_for_mob( + "Do you want to play as a mind magnified monkey?", + check_jobban = ROLE_MONKEY_HELMET, + poll_time = 5 SECONDS, + target_mob = magnification, + ignore_category = POLL_IGNORE_MONKEY_HELMET, + role_name_text = "mind-magnified monkey" + ) polling = FALSE if(!magnification) return - if(!candidates.len) + if(!length(candidates)) UnregisterSignal(magnification, COMSIG_SPECIES_LOSS) magnification = null visible_message(span_notice("[src] falls silent and drops on the floor. Maybe you should try again later?")) diff --git a/code/modules/clothing/head/wig.dm b/code/modules/clothing/head/wig.dm index 08b160fb5f8f..47d48a0b1790 100644 --- a/code/modules/clothing/head/wig.dm +++ b/code/modules/clothing/head/wig.dm @@ -32,6 +32,17 @@ return ..() +/obj/item/clothing/head/wig/build_worn_icon( + default_layer = 0, + default_icon_file = null, + isinhands = FALSE, + female_uniform = NO_FEMALE_UNIFORM, + override_state = null, + override_file = null, + use_height_offset = TRUE, +) + return ..(default_layer, default_icon_file, isinhands, female_uniform, override_state, override_file, use_height_offset = FALSE) + /obj/item/clothing/head/wig/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use) . = ..() if(isinhands) @@ -50,7 +61,7 @@ /obj/item/clothing/head/wig/attack_self(mob/user) var/new_style = tgui_input_list(user, "Select a hairstyle", "Wig Styling", GLOB.roundstart_hairstyles_list - "Bald") - var/newcolor = adjustablecolor ? input(usr,"","Choose Color",color) as color|null : null + var/newcolor = adjustablecolor ? tgui_color_picker(usr, "", "Choose Color", color) : null if(!user.can_perform_action(src)) return if(new_style && new_style != hairstyle) diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index 5b7a3332d062..df868a09db20 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -13,6 +13,8 @@ var/adjusted_flags = null ///Did we install a filtering cloth? var/has_filter = FALSE + /// The unique sound effect of dying while wearing this + var/unique_death /obj/item/clothing/mask/attack_self(mob/user) if((clothing_flags & VOICEBOX_TOGGLABLE)) diff --git a/code/modules/clothing/masks/animal_masks.dm b/code/modules/clothing/masks/animal_masks.dm index c2013b99177b..e1b600779cca 100644 --- a/code/modules/clothing/masks/animal_masks.dm +++ b/code/modules/clothing/masks/animal_masks.dm @@ -151,6 +151,7 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list( animal_sounds = list("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!") flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDEEYES|HIDEEARS|HIDESNOUT curse_spawn_sound = 'sound/magic/horsehead_curse.ogg' + flags_cover = NONE // Monkestation addition /obj/item/clothing/mask/animal/horsehead/cursed cursed = TRUE diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 08cd51942f20..c1d9d1f35e7c 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -27,10 +27,17 @@ GLOBAL_LIST_INIT(clown_mask_options, list( var/starting_filter_type = /obj/item/gas_filter ///Does the mask have an FOV? var/has_fov = FALSE + ///Cigarette in the mask + var/obj/item/clothing/mask/cigarette/cig /datum/armor/mask_gas bio = 100 +/obj/item/clothing/mask/gas/worn_overlays(mutable_appearance/standing, isinhands) + . = ..() + if(!isinhands && cig) + . += cig.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask.dmi') + /obj/item/clothing/mask/gas/Initialize(mapload) . = ..() init_fov() @@ -46,15 +53,64 @@ GLOBAL_LIST_INIT(clown_mask_options, list( QDEL_LAZYLIST(gas_filters) return..() +/obj/item/clothing/mask/gas/equipped(mob/equipee, slot) + cig?.equipped(equipee, slot) + return ..() + +/obj/item/clothing/mask/gas/adjustmask(mob/living/carbon/user) + if(isnull(cig)) + return ..() + balloon_alert(user, "there's a cig in the way!") + + /obj/item/clothing/mask/gas/examine(mob/user) . = ..() - if(max_filters > 0) - . += "[src] has [max_filters] slot\s for filters." + if(cig) + . += span_notice("There is a [cig.name] jammed into the filter slot.") + if(max_filters > 0 && !cig) + . += span_notice("[src] has [max_filters] slot\s for filters.") if(LAZYLEN(gas_filters) > 0) - . += "Currently there [LAZYLEN(gas_filters) == 1 ? "is" : "are"] [LAZYLEN(gas_filters)] filter\s with [get_filter_durability()]% durability." - . += "The filters can be removed by right-clicking with an empty hand on [src]." + . += span_notice("Currently there [LAZYLEN(gas_filters) == 1 ? "is" : "are"] [LAZYLEN(gas_filters)] filter\s with [get_filter_durability()]% durability.") + . += span_notice("The filters can be removed by right-clicking with an empty hand on [src].") + +/obj/item/clothing/mask/gas/Exited(atom/movable/gone) + . = ..() + if(gone == cig) + cig = null + if(ismob(loc)) + var/mob/wearer = loc + wearer.update_worn_mask() /obj/item/clothing/mask/gas/attackby(obj/item/tool, mob/user) + var/valid_wearer = ismob(loc) + var/mob/wearer = loc + if(istype(tool, /obj/item/clothing/mask/cigarette)) + if(flags_cover & MASKCOVERSMOUTH) + balloon_alert(user, "mask's mouth is covered!") + return ..() + + if(max_filters <= 0 || cig) + balloon_alert(user, "can't hold that!") + return ..() + + if(has_filter) + balloon_alert(user, "filters in the mask!") + return ..() + + cig = tool + if(valid_wearer) + cig.equipped(loc, wearer.get_slot_by_item(cig)) + + cig.forceMove(src) + if(valid_wearer) + wearer.update_worn_mask() + return TRUE + + if(cig) + var/cig_attackby = cig.attackby(tool, user) + if(valid_wearer) + wearer.update_worn_mask() + return cig_attackby if(!istype(tool, /obj/item/gas_filter)) return ..() if(LAZYLEN(gas_filters) >= max_filters) @@ -66,6 +122,13 @@ GLOBAL_LIST_INIT(clown_mask_options, list( return TRUE /obj/item/clothing/mask/gas/attack_hand_secondary(mob/user, list/modifiers) + if(cig) + user.put_in_hands(cig) + cig = null + if(ismob(loc)) + var/mob/wearer = loc + wearer.update_worn_mask() + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN if(!has_filter || !max_filters) return SECONDARY_ATTACK_CONTINUE_CHAIN for(var/i in 1 to max_filters) diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index 46f97f09f75a..f06e773e1d87 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -57,6 +57,7 @@ GLOBAL_LIST_INIT(hailer_phrases, list( visor_flags_cover = MASKCOVERSMOUTH tint = 0 has_fov = FALSE + unique_death = 'sound/voice/sec_death.ogg' COOLDOWN_DECLARE(hailer_cooldown) supports_variations_flags = CLOTHING_SNOUTED_VARIATION var/aggressiveness = AGGR_BAD_COP @@ -206,7 +207,7 @@ GLOBAL_LIST_INIT(hailer_phrases, list( return COOLDOWN_START(src, whistle_cooldown, 10 SECONDS) user.audible_message("HALT!") - playsound(src, 'sound/misc/whistle.ogg', 75, FALSE, 4) + playsound(src, 'sound/misc/whistle.ogg', 50, FALSE, 4) /datum/action/item_action/halt name = "HALT!" diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 4a778421bf50..33f096c67e09 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -187,26 +187,118 @@ var/mob/living/carbon/carbon_patient = M var/body_part = parse_zone(user.zone_selected) + var/oxy_loss = carbon_patient.getOxyLoss() - var/heart_strength = span_danger("no") - var/lung_strength = span_danger("no") + var/heart_strength + var/pulse_pressure var/obj/item/organ/internal/heart/heart = carbon_patient.get_organ_slot(ORGAN_SLOT_HEART) var/obj/item/organ/internal/lungs/lungs = carbon_patient.get_organ_slot(ORGAN_SLOT_LUNGS) - - if(carbon_patient.stat != DEAD && !(HAS_TRAIT(carbon_patient, TRAIT_FAKEDEATH))) - if(istype(heart)) - heart_strength = (heart.beating ? "a healthy" : span_danger("an unstable")) - if(istype(lungs)) - lung_strength = ((carbon_patient.failed_last_breath || carbon_patient.losebreath) ? span_danger("strained") : "healthy") - - user.visible_message(span_notice("[user] places [src] against [carbon_patient]'s [body_part] and listens attentively."), ignored_mobs = user) - - var/diagnosis = (body_part == BODY_ZONE_CHEST ? "You hear [heart_strength] pulse and [lung_strength] respiration" : "You faintly hear [heart_strength] pulse") - if(!user.can_hear()) - diagnosis = "Fat load of good it does you though, since you can't hear" - - to_chat(user, span_notice("You place [src] against [carbon_patient]'s [body_part]. [diagnosis].")) + var/obj/item/organ/internal/liver/liver = carbon_patient.get_organ_slot(ORGAN_SLOT_LIVER) + var/obj/item/organ/internal/appendix/appendix = carbon_patient.get_organ_slot(ORGAN_SLOT_APPENDIX) + + var/render_list = list()//information will be packaged in a list for clean display to the user + + //determine what specific action we're taking + switch (body_part) + if(BODY_ZONE_CHEST)//Listening to the chest + user.visible_message(span_notice("[user] places [src] against [carbon_patient]'s [body_part] and listens attentively."), ignored_mobs = user) + if(!user.can_hear()) + to_chat(user, span_notice("You place [src] against [carbon_patient]'s [body_part]. Fat load of good it does you though, since you can't hear")) + return + else + render_list += span_info("You place [src] against [carbon_patient]'s [body_part]:\n") + + //assess breathing + if(!lungs)//sanity check, enusure patient actually has lungs + render_list += "[M] doesn't have any lungs!\n" + else + if(carbon_patient.stat == DEAD || (HAS_TRAIT(carbon_patient, TRAIT_FAKEDEATH)) || (HAS_TRAIT(carbon_patient, TRAIT_NOBREATH))|| carbon_patient.failed_last_breath || carbon_patient.losebreath)//If pt is dead or otherwise not breathing + render_list += "[M.p_theyre(TRUE)] not breathing!\n" + else if(lungs.damage > 10)//if breathing, check for lung damage + render_list += "You hear fluid in [M.p_their()] lungs!\n" + else if(oxy_loss > 10)//if they have suffocation damage + render_list += "[M.p_theyre(TRUE)] breathing heavily!\n" + else + render_list += "[M.p_theyre(TRUE)] breathing normally.\n"//they're okay :D + + //assess heart + if(body_part == BODY_ZONE_CHEST)//if we're listening to the chest + if(!heart)//sanity check, ensure the patient actually has a heart + render_list += "[M] doesn't have a heart!\n" + else + if(!heart.beating || carbon_patient.stat == DEAD) + render_list += "You don't hear a heartbeat!\n"//they're dead or their heart isn't beating + else if(heart.damage > 10 || carbon_patient.blood_volume <= BLOOD_VOLUME_OKAY) + render_list += "You hear a weak heartbeat.\n"//their heart is damaged, or they have critical blood + else + render_list += "You hear a healthy heartbeat.\n"//they're okay :D + + if(BODY_ZONE_PRECISE_GROIN)//If we're targeting the groin + render_list += span_info("You carefully press down on [carbon_patient]'s abdomen:\n") + user.visible_message(span_notice("[user] presses their hands against [carbon_patient]'s abdomen."), ignored_mobs = user) + + //assess abdominal organs + if(body_part == BODY_ZONE_PRECISE_GROIN) + var/appendix_okay = TRUE + var/liver_okay = TRUE + if(!liver)//sanity check, ensure the patient actually has a liver + render_list += "[M] doesn't have a liver!\n" + liver_okay = FALSE + else + if(liver.damage > 10) + render_list += "[M.p_their(TRUE)] liver feels firm.\n"//their liver is damaged + liver_okay = FALSE + + if(!appendix)//sanity check, ensure the patient actually has an appendix + render_list += "[M] doesn't have an appendix!\n" + appendix_okay = FALSE + else + if(appendix.damage > 10 && carbon_patient.stat == CONSCIOUS) + render_list += "[M] screams when you lift your hand from [M.p_their()] appendix!\n"//scream if their appendix is damaged and they're awake + M.emote("scream") + appendix_okay = FALSE + + if(liver_okay && appendix_okay)//if they have all their organs and have no detectable damage + render_list += "You don't find anything abnormal.\n"//they're okay :D + + if(BODY_ZONE_PRECISE_EYES) + balloon_alert(user, "can't do that!") + return + + if(BODY_ZONE_PRECISE_MOUTH) + balloon_alert(user, "can't do that!") + return + + else//targeting an extremity or the head + if(body_part == BODY_ZONE_HEAD) + render_list += span_info("You carefully press your fingers to [carbon_patient]'s neck:\n") + user.visible_message(span_notice("[user] presses their fingers against [carbon_patient]'s neck."), ignored_mobs = user) + else + render_list += span_info("You carefully press your fingers to [carbon_patient]'s [body_part]:\n") + user.visible_message(span_notice("[user] presses their fingers against [carbon_patient]'s [body_part]."), ignored_mobs = user) + + //assess pulse (heart & blood level) + if(!heart)//sanity check, ensure the patient actually has a heart + render_list += "[M] doesn't have a heart!\n" + else + if(!heart.beating || carbon_patient.blood_volume <= BLOOD_VOLUME_OKAY || carbon_patient.stat == DEAD) + render_list += "You can't find a pulse!\n"//they're dead, their heart isn't beating, or they have critical blood + else + if(heart.damage > 10) + heart_strength = span_danger("irregular")//their heart is damaged + else + heart_strength = span_notice("regular")//they're okay :D + + if(carbon_patient.blood_volume <= BLOOD_VOLUME_SAFE && carbon_patient.blood_volume > BLOOD_VOLUME_OKAY) + pulse_pressure = span_danger("thready")//low blood + else + pulse_pressure = span_notice("strong")//they're okay :D + + render_list += "[M.p_their(TRUE)] pulse is [pulse_pressure] and [heart_strength].\n" + + //display our packaged information in an examine block for easy reading + to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO) /////////// //SCARVES// diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index b0ef5a29c703..c4e8f9133175 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -23,6 +23,7 @@ var/lace_time = 5 SECONDS ///An active alert var/datum/weakref/our_alert_ref + var/footprint_sprite = FOOTPRINT_SPRITE_SHOES /datum/armor/clothing_shoes bio = 50 diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index 621d77f29079..0e9efa5b3fb9 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -33,14 +33,16 @@ if(GET_ATOM_BLOOD_DNA_LENGTH(src)) . += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood") - var/mob/living/carbon/human/M = loc - if(!ishuman(M) || !M.w_uniform) + var/mob/living/carbon/human/wearer = loc + if(!ishuman(wearer) || !wearer.w_uniform) return - var/obj/item/clothing/under/U = M.w_uniform - if(istype(U) && U.attached_accessory) - var/obj/item/clothing/accessory/A = U.attached_accessory - if(A.above_suit) - . += U.accessory_overlay + var/obj/item/clothing/under/undershirt = wearer.w_uniform + if(!istype(undershirt) || !LAZYLEN(undershirt.attached_accessories)) + return + + var/obj/item/clothing/accessory/displayed = undershirt.attached_accessories[1] + if(displayed.above_suit) + . += undershirt.accessory_overlay /obj/item/clothing/suit/update_clothes_damaged_state(damaged_state = CLOTHING_DAMAGED) ..() diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 90f510bcde0b..c867349f6564 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -104,6 +104,7 @@ laser = 20 energy = 30 bomb = 100 + bio = 50 fire = 80 acid = 50 diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 8e461d959cc0..04873edd2268 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -11,15 +11,35 @@ drop_sound = 'sound/items/handling/cloth_drop.ogg' pickup_sound = 'sound/items/handling/cloth_pickup.ogg' limb_integrity = 30 + + /// Has this undersuit been freshly laundered and, as such, imparts a mood bonus for wearing + var/freshly_laundered = FALSE + + // Alt style handling + /// Can this suit be adjustd up or down to an alt style + var/can_adjust = TRUE + /// If adjusted what style are we currently using? + var/adjusted = NORMAL_STYLE + /// For adjusted/rolled-down jumpsuits. FALSE = exposes chest and arms, TRUE = exposes arms only + var/alt_covers_chest = FALSE /// The variable containing the flags for how the woman uniform cropping is supposed to interact with the sprite. var/female_sprite_flags = FEMALE_UNIFORM_FULL - var/has_sensor = HAS_SENSORS // For the crew computer + + // Sensor handling + /// Does this undersuit have suit sensors in general + var/has_sensor = HAS_SENSORS + /// Does this undersuit spawn with a random sensor value var/random_sensor = TRUE + /// What is the active sensor mode of this udnersuit var/sensor_mode = NO_SENSORS - var/can_adjust = TRUE - var/adjusted = NORMAL_STYLE - var/alt_covers_chest = FALSE // for adjusted/rolled-down jumpsuits, FALSE = exposes chest and arms, TRUE = exposes arms only - var/obj/item/clothing/accessory/attached_accessory + + // Accessory handling (Can be componentized eventually) + /// The max number of accessories we can have on this suit. + var/max_number_of_accessories = 5 + /// A list of all accessories attached to us. + var/list/obj/item/clothing/accessory/attached_accessories + /// The overlay of the accessory we're demonstrating. Only index 1 will show up. + /// This is the overlay on the MOB, not the item itself. var/mutable_appearance/accessory_overlay supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION @@ -33,32 +53,32 @@ //make the sensor mode favor higher levels, except coords. sensor_mode = pick(SENSOR_VITALS, SENSOR_VITALS, SENSOR_VITALS, SENSOR_LIVING, SENSOR_LIVING, SENSOR_COORDS, SENSOR_COORDS, SENSOR_OFF) register_context() + AddElement(/datum/element/update_icon_updates_onmob, flags = ITEM_SLOT_ICLOTHING|ITEM_SLOT_OCLOTHING, body = TRUE) /obj/item/clothing/under/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) - var/screentip_change = FALSE + . = NONE if(isnull(held_item) && has_sensor == HAS_SENSORS) context[SCREENTIP_CONTEXT_RMB] = "Toggle suit sensors" - screentip_change = TRUE + . = CONTEXTUAL_SCREENTIP_SET + + if(istype(held_item, /obj/item/clothing/accessory) && length(attached_accessories) < max_number_of_accessories) + context[SCREENTIP_CONTEXT_LMB] = "Attach accessory" + . = CONTEXTUAL_SCREENTIP_SET - if(istype(held_item, /obj/item/clothing/accessory) && !attached_accessory) - var/obj/item/clothing/accessory/accessory = held_item - if(accessory.can_attach_accessory(src, user)) - context[SCREENTIP_CONTEXT_LMB] = "Attach accessory" - screentip_change = TRUE + if(LAZYLEN(attached_accessories)) + context[SCREENTIP_CONTEXT_ALT_RMB] = "Remove accessory" + . = CONTEXTUAL_SCREENTIP_SET if(istype(held_item, /obj/item/stack/cable_coil) && has_sensor == BROKEN_SENSORS) context[SCREENTIP_CONTEXT_LMB] = "Repair suit sensors" - screentip_change = TRUE + . = CONTEXTUAL_SCREENTIP_SET - if(attached_accessory) - context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove accessory" - screentip_change = TRUE - else if(can_adjust) - context[SCREENTIP_CONTEXT_ALT_LMB] = adjusted == ALT_STYLE ? "Wear normally" : "Wear casually" - screentip_change = TRUE + if(can_adjust && adjusted != DIGITIGRADE_STYLE) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Wear [adjusted == ALT_STYLE ? "normally" : "casually"]" + . = CONTEXTUAL_SCREENTIP_SET - return screentip_change ? CONTEXTUAL_SCREENTIP_SET : NONE + return . /obj/item/clothing/under/worn_overlays(mutable_appearance/standing, isinhands = FALSE) . = ..() @@ -72,15 +92,18 @@ if(accessory_overlay) . += accessory_overlay -/obj/item/clothing/under/attackby(obj/item/I, mob/user, params) - if((has_sensor == BROKEN_SENSORS) && istype(I, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = I - C.use(1) +/obj/item/clothing/under/attackby(obj/item/attacking_item, mob/user, params) + if(has_sensor == BROKEN_SENSORS && istype(attacking_item, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/cabling = attacking_item + to_chat(user, span_notice("You repair the suit sensors on [src] with [cabling].")) + cabling.use(1) has_sensor = HAS_SENSORS - to_chat(user,span_notice("You repair the suit sensors on [src] with [C].")) return TRUE - if(!attach_accessory(I, user)) - return ..() + + if(istype(attacking_item, /obj/item/clothing/accessory)) + return attach_accessory(attacking_item, user) + + return ..() /obj/item/clothing/under/attack_hand_secondary(mob/user, params) . = ..() @@ -91,65 +114,53 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/item/clothing/under/update_clothes_damaged_state(damaged_state = CLOTHING_DAMAGED) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_worn_undersuit() + . = ..() if(damaged_state == CLOTHING_SHREDDED && has_sensor > NO_SENSORS) has_sensor = BROKEN_SENSORS else if(damaged_state == CLOTHING_PRISTINE && has_sensor == BROKEN_SENSORS) has_sensor = HAS_SENSORS + update_appearance() /obj/item/clothing/under/emp_act(severity) . = ..() if(. & EMP_PROTECT_SELF) return - if(has_sensor > NO_SENSORS) - if(severity <= EMP_HEAVY) - has_sensor = BROKEN_SENSORS - if(ismob(loc)) - var/mob/M = loc - to_chat(M,span_warning("[src]'s sensors short out!")) - else - sensor_mode = pick(SENSOR_OFF, SENSOR_OFF, SENSOR_OFF, SENSOR_LIVING, SENSOR_LIVING, SENSOR_VITALS, SENSOR_VITALS, SENSOR_COORDS) - if(ismob(loc)) - var/mob/M = loc - to_chat(M,span_warning("The sensors on the [src] change rapidly!")) - if(ishuman(loc)) - var/mob/living/carbon/human/ooman = loc - if(ooman.w_uniform == src) - ooman.update_suit_sensors() + if(has_sensor == NO_SENSORS || has_sensor == BROKEN_SENSORS) + return + + if(severity <= EMP_HEAVY) + has_sensor = BROKEN_SENSORS + if(ismob(loc)) + var/mob/M = loc + to_chat(M,span_warning("[src]'s sensors short out!")) + + else + sensor_mode = pick(SENSOR_OFF, SENSOR_OFF, SENSOR_OFF, SENSOR_LIVING, SENSOR_LIVING, SENSOR_VITALS, SENSOR_VITALS, SENSOR_COORDS) + if(ismob(loc)) + var/mob/M = loc + to_chat(M,span_warning("The sensors on the [src] change rapidly!")) + + if(ishuman(loc)) + var/mob/living/carbon/human/ooman = loc + if(ooman.w_uniform == src) + ooman.update_suit_sensors() /obj/item/clothing/under/visual_equipped(mob/user, slot) - ..() - if(adjusted) - adjusted = NORMAL_STYLE - female_sprite_flags = initial(female_sprite_flags) - if(!alt_covers_chest) - body_parts_covered |= CHEST + . = ..() + if(adjusted == ALT_STYLE) + adjust_to_normal() if((supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION) && ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.dna.species.bodytype & BODYTYPE_DIGITIGRADE) + var/mob/living/carbon/human/wearer = user + if(wearer.dna.species.bodytype & BODYTYPE_DIGITIGRADE) adjusted = DIGITIGRADE_STYLE - H.update_worn_undersuit() - - if(attached_accessory && !(slot & ITEM_SLOT_HANDS) && ishuman(user)) - var/mob/living/carbon/human/H = user - attached_accessory.on_uniform_equip(src, user) - H.fan_hud_set_fandom() - if(attached_accessory.above_suit) - H.update_worn_oversuit() - -/obj/item/clothing/under/dropped(mob/user) - if(attached_accessory) - attached_accessory.on_uniform_dropped(src, user) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.fan_hud_set_fandom() - if(attached_accessory.above_suit) - H.update_worn_oversuit() + update_appearance() + +/obj/item/clothing/under/equipped(mob/living/user, slot) ..() + if((slot & ITEM_SLOT_ICLOTHING) && freshly_laundered) + freshly_laundered = FALSE + user.add_mood_event("fresh_laundry", /datum/mood_event/fresh_laundry) /mob/living/carbon/human/update_suit_sensors() . = ..() @@ -165,78 +176,98 @@ /mob/living/carbon/human/dummy/update_sensor_list() return -/obj/item/clothing/under/proc/attach_accessory(obj/item/tool, mob/user, notifyAttach = 1) - . = FALSE - if(!istype(tool, /obj/item/clothing/accessory)) +// End suit sensor handling + +/// Attach the passed accessory to the clothing item +/obj/item/clothing/under/proc/attach_accessory(obj/item/clothing/accessory/accessory, mob/living/user, attach_message = TRUE) + if(!istype(accessory)) return - var/obj/item/clothing/accessory/accessory = tool - if(attached_accessory) + if(length(attached_accessories) >= max_number_of_accessories) if(user) - to_chat(user, span_warning("[src] already has an accessory.")) + balloon_alert(user, "too many accessories!") return - if(!accessory.can_attach_accessory(src, user)) //Make sure the suit has a place to put the accessory. + if(!accessory.can_attach_accessory(src, user)) return if(user && !user.temporarilyRemoveItemFromInventory(accessory)) return if(!accessory.attach(src, user)) return - . = TRUE - if(user && notifyAttach) - to_chat(user, span_notice("You attach [accessory] to [src].")) + LAZYADD(attached_accessories, accessory) + accessory.forceMove(src) + // Allow for accessories to react to the acccessory list now + accessory.successful_attach(src) - var/accessory_color = attached_accessory.icon_state - accessory_overlay = mutable_appearance(attached_accessory.worn_icon, "[accessory_color]") - accessory_overlay.alpha = attached_accessory.alpha - accessory_overlay.color = attached_accessory.color + if(user && attach_message) + balloon_alert(user, "accessory attached") + + if(isnull(accessory_overlay)) + create_accessory_overlay() update_appearance() - if(!ishuman(loc)) - return + return TRUE - var/mob/living/carbon/human/holder = loc - holder.update_worn_undersuit() - holder.update_worn_oversuit() - holder.fan_hud_set_fandom() +/// Removes (pops) the topmost accessory from the accessories list and puts it in the user's hands if supplied +/obj/item/clothing/under/proc/pop_accessory(mob/living/user, attach_message = TRUE) + var/obj/item/clothing/accessory/popped_accessory = attached_accessories[1] + remove_accessory(popped_accessory) -/obj/item/clothing/under/proc/remove_accessory(mob/user) - . = FALSE - if(!isliving(user)) - return - if(!can_use(user)) + if(!user) return - if(!attached_accessory) - return + user.put_in_hands(popped_accessory) + if(attach_message) + popped_accessory.balloon_alert(user, "accessory removed") - . = TRUE - var/obj/item/clothing/accessory/accessory = attached_accessory - attached_accessory.detach(src, user) - if(user.put_in_hands(accessory)) - to_chat(user, span_notice("You detach [accessory] from [src].")) - else - to_chat(user, span_notice("You detach [accessory] from [src] and it falls on the floor.")) +/// Removes the passed accesory from our accessories list +/obj/item/clothing/under/proc/remove_accessory(obj/item/clothing/accessory/removed) + if(removed == attached_accessories[1]) + accessory_overlay = null + + // Remove it from the list before detaching + LAZYREMOVE(attached_accessories, removed) + removed.detach(src) + + if(isnull(accessory_overlay) && LAZYLEN(attached_accessories)) + create_accessory_overlay() update_appearance() - if(!ishuman(loc)) - return - var/mob/living/carbon/human/holder = loc - holder.update_worn_undersuit() - holder.update_worn_oversuit() - holder.fan_hud_set_fandom() +/// Handles creating the worn overlay mutable appearance +/// Only the first accessory attached is displayed (currently) +/obj/item/clothing/under/proc/create_accessory_overlay() + var/obj/item/clothing/accessory/prime_accessory = attached_accessories[1] + accessory_overlay = mutable_appearance(prime_accessory.worn_icon, prime_accessory.icon_state) + accessory_overlay.alpha = prime_accessory.alpha + accessory_overlay.color = prime_accessory.color +/obj/item/clothing/under/Exited(atom/movable/gone, direction) + . = ..() + // If one of our accessories was moved out, handle it + if(gone in attached_accessories) + remove_accessory(gone) + +/// Helper to remove all attachments to the passed location +/obj/item/clothing/under/proc/dump_attachments(atom/drop_to = drop_location()) + for(var/obj/item/clothing/accessory/worn_accessory as anything in attached_accessories) + remove_accessory(worn_accessory) + worn_accessory.forceMove(drop_to) + +/obj/item/clothing/under/atom_destruction(damage_flag) + dump_attachments() + return ..() + +/obj/item/clothing/under/Destroy() + QDEL_LAZYLIST(attached_accessories) + return ..() /obj/item/clothing/under/examine(mob/user) . = ..() if(can_adjust) - if(adjusted == ALT_STYLE) - . += "Alt-click on [src] to wear it normally." - else - . += "Alt-click on [src] to wear it casually." - if (has_sensor == BROKEN_SENSORS) - . += "Its sensors appear to be shorted out." + . += "Alt-click on [src] to wear it [adjusted == ALT_STYLE ? "normally" : "casually"]." + if(has_sensor == BROKEN_SENSORS) + . += "Its sensors appear to be shorted out. You could repair it with some cabling." else if(has_sensor > NO_SENSORS) switch(sensor_mode) if(SENSOR_OFF) @@ -247,48 +278,34 @@ . += "Its vital tracker appears to be enabled." if(SENSOR_COORDS) . += "Its vital tracker and tracking beacon appear to be enabled." - if(attached_accessory) - . += "\A [attached_accessory] is attached to it." + if(LAZYLEN(attached_accessories)) + var/list/accessories = list_accessories_with_icon(user) + . += "It has [english_list(accessories)] attached." + . += "Alt-Right-Click to remove [attached_accessories[1]]." + +/// Helper to list out all accessories with an icon besides it, for use in examine +/obj/item/clothing/under/proc/list_accessories_with_icon(mob/user) + var/list/all_accessories = list() + for(var/obj/item/clothing/accessory/attached as anything in attached_accessories) + all_accessories += attached.get_examine_string(user) + + return all_accessories /obj/item/clothing/under/verb/toggle() set name = "Adjust Suit Sensors" set category = "Object" set src in usr var/mob/user_mob = usr - if (isdead(user_mob)) - return - if (!can_use(user_mob)) - return - if(has_sensor == LOCKED_SENSORS) - to_chat(user_mob, "The controls are locked.") - return - if(has_sensor == BROKEN_SENSORS) - to_chat(user_mob, "The sensors have shorted out!") - return - if(has_sensor <= NO_SENSORS) - to_chat(user_mob, "This suit does not have any sensors.") + if(!can_toggle_sensors(user_mob)) return var/list/modes = list("Off", "Binary vitals", "Exact vitals", "Tracking beacon") var/switchMode = tgui_input_list(user_mob, "Select a sensor mode", "Suit Sensors", modes, modes[sensor_mode + 1]) if(isnull(switchMode)) return - - if (!can_use(user_mob)) //make sure they didn't hold the window open. - return - if(get_dist(user_mob, src) > 1) - to_chat(user_mob, span_warning("You have moved too far away!")) + if(!can_toggle_sensors(user_mob)) return - if(has_sensor == LOCKED_SENSORS) - to_chat(user_mob, "The controls are locked.") - return - if(has_sensor == BROKEN_SENSORS) - to_chat(user_mob, "The sensors have shorted out!") - return - if(has_sensor <= NO_SENSORS) - to_chat(user_mob, "This suit does not have any sensors.") - return sensor_mode = modes.Find(switchMode) - 1 if (loc == user_mob) switch(sensor_mode) @@ -306,80 +323,116 @@ if(H.w_uniform == src) H.update_suit_sensors() +/// Checks if the toggler is allowed to toggle suit sensors currently +/obj/item/clothing/under/proc/can_toggle_sensors(mob/toggler) + if(!can_use(toggler) || toggler.stat == DEAD) //make sure they didn't hold the window open. + return FALSE + if(get_dist(toggler, src) > 1) + balloon_alert(toggler, "too far!") + return FALSE + + switch(has_sensor) + if(LOCKED_SENSORS) + balloon_alert(toggler, "sensor controls locked!") + return FALSE + if(BROKEN_SENSORS) + balloon_alert(toggler, "sensors shorted!") + return FALSE + if(NO_SENSORS) + balloon_alert(toggler, "no sensors to ajdust!") + return FALSE + + return TRUE + /obj/item/clothing/under/AltClick(mob/user) . = ..() if(.) return + if(!can_adjust) + balloon_alert(user, "can't be adjusted!") + return + if(!can_use(user)) + return + rolldown() + +/obj/item/clothing/under/alt_click_secondary(mob/user) + . = ..() + if(.) + return + + if(!LAZYLEN(attached_accessories)) + balloon_alert(user, "no accessories to remove!") + return if(!user.can_perform_action(src, NEED_DEXTERITY)) return - if(attached_accessory) - remove_accessory(user) - else - rolldown() + + pop_accessory(user) /obj/item/clothing/under/verb/jumpsuit_adjust() set name = "Adjust Jumpsuit Style" set category = null set src in usr - rolldown() -/obj/item/clothing/under/proc/rolldown() - if(!can_use(usr)) - return if(!can_adjust) - to_chat(usr, span_warning("You cannot wear this suit any differently!")) + balloon_alert(usr, "can't be adjusted!") + return + if(!can_use(usr)) return + rolldown() + +/obj/item/clothing/under/proc/rolldown() if(toggle_jumpsuit_adjust()) to_chat(usr, span_notice("You adjust the suit to wear it more casually.")) else to_chat(usr, span_notice("You adjust the suit back to normal.")) - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - H.update_worn_undersuit() - H.update_body() + update_appearance() + +/// Helper to toggle the jumpsuit style, if possible +/// Returns the new state /obj/item/clothing/under/proc/toggle_jumpsuit_adjust() - if(adjusted == DIGITIGRADE_STYLE) - return - adjusted = !adjusted - if(adjusted) - if(alt_covers_chest) //For snowflake suits that do NOT expose the chest. //MONKESTATION EDIT + switch(adjusted) + if(DIGITIGRADE_STYLE) return - if(!(female_sprite_flags & FEMALE_UNIFORM_TOP_ONLY)) - female_sprite_flags = NO_FEMALE_UNIFORM - if(!alt_covers_chest) // for the special snowflake suits that expose the chest when adjusted (and also the arms, realistically) - body_parts_covered &= ~CHEST - body_parts_covered &= ~ARMS - else - female_sprite_flags = initial(female_sprite_flags) - if(!alt_covers_chest) - body_parts_covered |= CHEST - body_parts_covered |= ARMS - if(!LAZYLEN(damage_by_parts)) - return adjusted - for(var/zone in list(BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) // ugly check to make sure we don't reenable protection on a disabled part - if(damage_by_parts[zone] > limb_integrity) - body_parts_covered &= body_zone2cover_flags(zone) - return adjusted -/obj/item/clothing/under/rank - dying_key = DYE_REGISTRY_UNDER + if(NORMAL_STYLE) + adjust_to_alt() -/obj/item/clothing/under/proc/dump_attachment() - if(!attached_accessory) - return - var/atom/drop_location = drop_location() - attached_accessory.transform *= 2 - attached_accessory.pixel_x -= 8 - attached_accessory.pixel_y += 8 - if(drop_location) - attached_accessory.forceMove(drop_location) - cut_overlays() - attached_accessory = null - accessory_overlay = null - update_appearance() + if(ALT_STYLE) + adjust_to_normal() -/obj/item/clothing/under/rank/atom_destruction(damage_flag) - dump_attachment() + SEND_SIGNAL(src, COMSIG_CLOTHING_UNDER_ADJUSTED) + return adjusted + +/// Helper to reset to normal jumpsuit state +/obj/item/clothing/under/proc/adjust_to_normal() + adjusted = NORMAL_STYLE + female_sprite_flags = initial(female_sprite_flags) + if(!alt_covers_chest) + body_parts_covered |= CHEST + body_parts_covered |= ARMS + if(LAZYLEN(damage_by_parts)) + // ugly check to make sure we don't reenable protection on a disabled part + for(var/zone in list(BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) + if(damage_by_parts[zone] > limb_integrity) + body_parts_covered &= body_zone2cover_flags(zone) + +/// Helper to adjust to alt jumpsuit state +/obj/item/clothing/under/proc/adjust_to_alt() + adjusted = ALT_STYLE + if(alt_covers_chest) //For snowflake suits that do NOT expose the chest. //MONKESTATION EDIT + return + if(!(female_sprite_flags & FEMALE_UNIFORM_TOP_ONLY)) + female_sprite_flags = NO_FEMALE_UNIFORM + if(!alt_covers_chest) // for the special snowflake suits that expose the chest when adjusted (and also the arms, realistically) + body_parts_covered &= ~CHEST + body_parts_covered &= ~ARMS + +/obj/item/clothing/under/can_use(mob/user) + if(ismob(user) && !user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS|ALLOW_RESTING)) + return FALSE return ..() + +/obj/item/clothing/under/rank + dying_key = DYE_REGISTRY_UNDER diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm deleted file mode 100755 index a10cabfaf065..000000000000 --- a/code/modules/clothing/under/accessories.dm +++ /dev/null @@ -1,505 +0,0 @@ -/obj/item/clothing/accessory //Ties moved to neck slot items, but as there are still things like medals and armbands, this accessory system is being kept as-is - name = "Accessory" - desc = "Something has gone wrong!" - icon = 'icons/obj/clothing/accessories.dmi' - worn_icon = 'icons/mob/clothing/accessories.dmi' - icon_state = "plasma" - inhand_icon_state = "" //no inhands - slot_flags = 0 - w_class = WEIGHT_CLASS_SMALL - /// Whether or not the accessory displays through suits and the like. - var/above_suit = TRUE - /// TRUE if shown as a small icon in corner, FALSE if overlayed - var/minimize_when_attached = TRUE - /// What equipment slot the accessory attaches to. - var/attachment_slot = CHEST - -/obj/item/clothing/accessory/proc/can_attach_accessory(obj/item/clothing/U, mob/user) - if(!attachment_slot || (U && U.body_parts_covered & attachment_slot)) - return TRUE - if(user) - to_chat(user, span_warning("There doesn't seem to be anywhere to put [src]...")) - -/obj/item/clothing/accessory/proc/attach(obj/item/clothing/under/U, user) - if(atom_storage) - if(U.atom_storage) - return FALSE - U.clone_storage(atom_storage) - U.atom_storage.set_real_location(src) - U.attached_accessory = src - forceMove(U) - layer = FLOAT_LAYER - plane = FLOAT_PLANE - if(minimize_when_attached) - transform *= 0.5 //halve the size so it doesn't overpower the under - pixel_x += 8 - pixel_y -= 8 - U.add_overlay(src) - - U.set_armor(U.get_armor().add_other_armor(get_armor())) - - if(isliving(user)) - on_uniform_equip(U, user) - - return TRUE - -/obj/item/clothing/accessory/proc/detach(obj/item/clothing/under/U, user) - if(U.atom_storage && U.atom_storage.real_location?.resolve() == src) - QDEL_NULL(U.atom_storage) - - U.set_armor(U.get_armor().subtract_other_armor(get_armor())) - - if(isliving(user)) - on_uniform_dropped(U, user) - - if(minimize_when_attached) - transform *= 2 - pixel_x -= 8 - pixel_y += 8 - layer = initial(layer) - SET_PLANE_IMPLICIT(src, initial(plane)) - U.cut_overlays() - U.attached_accessory = null - U.accessory_overlay = null - - -/obj/item/clothing/accessory/proc/on_uniform_equip(obj/item/clothing/under/U, user) - return - -/obj/item/clothing/accessory/proc/on_uniform_dropped(obj/item/clothing/under/U, user) - return - -/obj/item/clothing/accessory/attack_self_secondary(mob/user) - if(user.can_perform_action(src, NEED_DEXTERITY)) - above_suit = !above_suit - to_chat(user, "[src] will be worn [above_suit ? "above" : "below"] your suit.") - return - - return ..() - -/obj/item/clothing/accessory/examine(mob/user) - . = ..() - . += span_notice("\The [src] can be attached to a uniform. Alt-click to remove it once attached.") - . += span_notice("\The [src] can be worn above or below your suit. Right-click to toggle.") - -/obj/item/clothing/accessory/waistcoat - name = "waistcoat" - desc = "For some classy, murderous fun." - icon_state = "waistcoat" - inhand_icon_state = "wcoat" - lefthand_file = 'icons/mob/inhands/clothing/suits_lefthand.dmi' - righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' - minimize_when_attached = FALSE - attachment_slot = null - greyscale_config = /datum/greyscale_config/waistcoat - greyscale_config_worn = /datum/greyscale_config/waistcoat_worn - greyscale_colors = "#414344" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/accessory/vest_sheriff - name = "sheriff vest" - desc = "Now you just have to pick your favourite deputy." - icon_state = "vest_sheriff" - lefthand_file = 'icons/mob/inhands/clothing/suits_lefthand.dmi' - righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' - inhand_icon_state = "vest_sheriff" - minimize_when_attached = TRUE - attachment_slot = null - -/obj/item/clothing/accessory/maidcorset - name = "maid corset" - desc = "The final touch that holds it all together." - icon_state = "maidcorset" - inhand_icon_state = "maidapron" - lefthand_file = 'icons/mob/inhands/clothing/suits_lefthand.dmi' - righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' - minimize_when_attached = FALSE - attachment_slot = null - -/obj/item/clothing/accessory/maidapron - name = "maid apron" - desc = "The best part of a maid costume." - icon_state = "maidapron" - inhand_icon_state = "maidapron" - lefthand_file = 'icons/mob/inhands/clothing/suits_lefthand.dmi' - righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' - minimize_when_attached = FALSE - attachment_slot = null - -////////// -//Medals// -////////// - -/obj/item/clothing/accessory/medal - name = "bronze medal" - desc = "A bronze medal." - icon_state = "bronze" - custom_materials = list(/datum/material/iron=HALF_SHEET_MATERIAL_AMOUNT) - resistance_flags = FIRE_PROOF - var/medaltype = "medal" //Sprite used for medalbox - var/commended = FALSE - -//Pinning medals on people -/obj/item/clothing/accessory/medal/attack(mob/living/carbon/human/M, mob/living/user) - if(ishuman(M) && !(user.istate & ISTATE_HARM)) - - if(M.wear_suit) - if((M.wear_suit.flags_inv & HIDEJUMPSUIT)) //Check if the jumpsuit is covered - to_chat(user, span_warning("Medals can only be pinned on jumpsuits.")) - return - - if(M.w_uniform) - var/obj/item/clothing/under/U = M.w_uniform - var/delay = 20 - if(user == M) - delay = 0 - else - user.visible_message(span_notice("[user] is trying to pin [src] on [M]'s chest."), \ - span_notice("You try to pin [src] on [M]'s chest.")) - var/input - if(!commended && user != M) - input = tgui_input_text(user, "Reason for this commendation? It will be recorded by Nanotrasen.", "Commendation", max_length = 140) - if(do_after(user, delay, target = M)) - if(U.attach_accessory(src, user, 0)) //Attach it, do not notify the user of the attachment - if(user == M) - to_chat(user, span_notice("You attach [src] to [U].")) - else - user.visible_message(span_notice("[user] pins \the [src] on [M]'s chest."), \ - span_notice("You pin \the [src] on [M]'s chest.")) - if(input) - SSblackbox.record_feedback("associative", "commendation", 1, list("commender" = "[user.real_name]", "commendee" = "[M.real_name]", "medal" = "[src]", "reason" = input)) - GLOB.commendations += "[user.real_name] awarded [M.real_name] the [name]! \n- [input]" - commended = TRUE - desc += "
The inscription reads: [input] - [user.real_name]" - M.log_message("was given the following commendation by [key_name(user)]: [input]", LOG_GAME, color = "green") - message_admins("[key_name_admin(M)] was given the following commendation by [key_name_admin(user)]: [input]") - add_memory_in_range(M, 7, /datum/memory/received_medal, protagonist = M, deuteragonist = user, medal_type = src, medal_text = input) - - else - to_chat(user, span_warning("Medals can only be pinned on jumpsuits!")) - else - ..() - -/obj/item/clothing/accessory/medal/conduct - name = "distinguished conduct medal" - desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is the most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew." - -/obj/item/clothing/accessory/medal/bronze_heart - name = "bronze heart medal" - desc = "A bronze heart-shaped medal awarded for sacrifice. It is often awarded posthumously or for severe injury in the line of duty." - icon_state = "bronze_heart" - -/obj/item/clothing/accessory/medal/ribbon - name = "ribbon" - desc = "A ribbon" - icon_state = "cargo" - -/obj/item/clothing/accessory/medal/ribbon/cargo - name = "\"cargo tech of the shift\" award" - desc = "An award bestowed only upon those cargotechs who have exhibited devotion to their duty in keeping with the highest traditions of Cargonia." - -/obj/item/clothing/accessory/medal/silver - name = "silver medal" - desc = "A silver medal." - icon_state = "silver" - medaltype = "medal-silver" - custom_materials = list(/datum/material/silver=HALF_SHEET_MATERIAL_AMOUNT) - -/obj/item/clothing/accessory/medal/silver/valor - name = "medal of valor" - desc = "A silver medal awarded for acts of exceptional valor." - -/obj/item/clothing/accessory/medal/silver/security - name = "robust security award" - desc = "An award for distinguished combat and sacrifice in defence of Nanotrasen's commercial interests. Often awarded to security staff." - -/obj/item/clothing/accessory/medal/silver/excellence - name = "\proper the head of personnel award for outstanding achievement in the field of excellence" - desc = "Nanotrasen's dictionary defines excellence as \"the quality or condition of being excellent\". This is awarded to those rare crewmembers who fit that definition." - -/obj/item/clothing/accessory/medal/silver/bureaucracy - name = "\improper Excellence in Bureaucracy Medal" - desc = "Awarded for exemplary managerial services rendered while under contract with Nanotrasen." - -/obj/item/clothing/accessory/medal/gold - name = "gold medal" - desc = "A prestigious golden medal." - icon_state = "gold" - medaltype = "medal-gold" - custom_materials = list(/datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT) - -/obj/item/clothing/accessory/medal/med_medal - name = "exemplary performance medal" - desc = "A medal awarded to those who have shown distinguished conduct, performance, and initiative within the medical department." - icon_state = "med_medal" - -/obj/item/clothing/accessory/medal/med_medal2 - name = "excellence in medicine medal" - desc = "A medal awarded to those who have shown legendary performance, competence, and initiative beyond all expectations within the medical department." - icon_state = "med_medal2" - -/obj/item/clothing/accessory/medal/gold/captain - name = "medal of captaincy" - desc = "A golden medal awarded exclusively to those promoted to the rank of captain. It signifies the codified responsibilities of a captain to Nanotrasen, and their undisputable authority over their crew." - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/accessory/medal/gold/heroism - name = "medal of exceptional heroism" - desc = "An extremely rare golden medal awarded only by CentCom. To receive such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but commanders." - -/obj/item/clothing/accessory/medal/plasma - name = "plasma medal" - desc = "An eccentric medal made of plasma." - icon_state = "plasma" - medaltype = "medal-plasma" - armor_type = /datum/armor/medal_plasma - custom_materials = list(/datum/material/plasma=HALF_SHEET_MATERIAL_AMOUNT) - -/datum/armor/medal_plasma - fire = -10 - -/obj/item/clothing/accessory/medal/plasma/Initialize(mapload) - . = ..() - AddElement(/datum/element/atmos_sensitive, mapload) - -/obj/item/clothing/accessory/medal/plasma/should_atmos_process(datum/gas_mixture/air, exposed_temperature) - return exposed_temperature > 300 - -/obj/item/clothing/accessory/medal/plasma/atmos_expose(datum/gas_mixture/air, exposed_temperature) - atmos_spawn_air("plasma=20;TEMP=[exposed_temperature]") - visible_message(span_danger("\The [src] bursts into flame!"), span_userdanger("Your [src] bursts into flame!")) - qdel(src) - -/obj/item/clothing/accessory/medal/plasma/nobel_science - name = "nobel sciences award" - desc = "A plasma medal which represents significant contributions to the field of science or engineering." - - - -//////////// -//Armbands// -//////////// - -/obj/item/clothing/accessory/armband - name = "red armband" - desc = "A fancy red armband!" - icon_state = "redband" - attachment_slot = null - -/obj/item/clothing/accessory/armband/deputy - name = "security deputy armband" - desc = "An armband, worn by personnel authorized to act as a deputy of station security." - -/obj/item/clothing/accessory/armband/cargo - name = "cargo bay guard armband" - desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is brown." - icon_state = "cargoband" - -/obj/item/clothing/accessory/armband/engine - name = "engineering guard armband" - desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is orange with a reflective strip!" - icon_state = "engieband" - -/obj/item/clothing/accessory/armband/science - name = "science guard armband" - desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is purple." - icon_state = "rndband" - -/obj/item/clothing/accessory/armband/hydro - name = "hydroponics guard armband" - desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is green and blue." - icon_state = "hydroband" - -/obj/item/clothing/accessory/armband/med - name = "medical guard armband" - desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is white." - icon_state = "medband" - -/obj/item/clothing/accessory/armband/medblue - name = "medical guard armband" - desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is white and blue." - icon_state = "medblueband" - -////////////// -//OBJECTION!// -////////////// - -/obj/item/clothing/accessory/lawyers_badge - name = "attorney's badge" - desc = "Fills you with the conviction of JUSTICE. Lawyers tend to want to show it to everyone they meet." - icon_state = "lawyerbadge" - -/obj/item/clothing/accessory/lawyers_badge/attack_self(mob/user) - if(prob(1)) - user.say("The testimony contradicts the evidence!", forced = "attorney's badge") - user.visible_message(span_notice("[user] shows [user.p_their()] attorney's badge."), span_notice("You show your attorney's badge.")) - -/obj/item/clothing/accessory/lawyers_badge/on_uniform_equip(obj/item/clothing/under/U, mob/living/user) - RegisterSignal(user, COMSIG_LIVING_SLAM_TABLE, PROC_REF(table_slam)) - user.bubble_icon = "lawyer" - -/obj/item/clothing/accessory/lawyers_badge/on_uniform_dropped(obj/item/clothing/under/U, mob/living/user) - UnregisterSignal(user, COMSIG_LIVING_SLAM_TABLE) - user.bubble_icon = initial(user.bubble_icon) - -/obj/item/clothing/accessory/lawyers_badge/proc/table_slam(mob/living/source, obj/structure/table/the_table) - SIGNAL_HANDLER - INVOKE_ASYNC(src, PROC_REF(handle_table_slam), source) - -/obj/item/clothing/accessory/lawyers_badge/proc/handle_table_slam(mob/living/user) - user.say("Objection!!", spans = list(SPAN_YELL), forced=TRUE) - -//////////////// -//HA HA! NERD!// -//////////////// -/obj/item/clothing/accessory/pocketprotector - name = "pocket protector" - desc = "Can protect your clothing from ink stains, but you'll look like a nerd if you're using one." - icon_state = "pocketprotector" - -/obj/item/clothing/accessory/pocketprotector/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/pocketprotector) - -/obj/item/clothing/accessory/pocketprotector/detach(obj/item/clothing/under/U, user) - var/drop_loc = drop_location() - for(var/atom/movable/held as anything in src) - held.forceMove(drop_loc) - return ..() - -/obj/item/clothing/accessory/pocketprotector/full/Initialize(mapload) - . = ..() - - new /obj/item/pen/red(src) - new /obj/item/pen(src) - new /obj/item/pen/blue(src) - -/obj/item/clothing/accessory/pocketprotector/cosmetology/Initialize(mapload) - . = ..() - for(var/i in 1 to 3) - new /obj/item/lipstick/random(src) - -//////////////// -//REAL BIG FAN// -//////////////// - -/obj/item/clothing/accessory/clown_enjoyer_pin - name = "\improper Clown Pin" - desc = "A pin to show off your appreciation for clowns and clowning!" - icon_state = "clown_enjoyer_pin" - -/obj/item/clothing/accessory/clown_enjoyer_pin/on_uniform_equip(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(HAS_TRAIT(L, TRAIT_CLOWN_ENJOYER)) - L.add_mood_event("clown_enjoyer_pin", /datum/mood_event/clown_enjoyer_pin) - -/obj/item/clothing/accessory/clown_enjoyer_pin/on_uniform_dropped(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(HAS_TRAIT(L, TRAIT_CLOWN_ENJOYER)) - L.clear_mood_event("clown_enjoyer_pin") - -/obj/item/clothing/accessory/mime_fan_pin - name = "\improper Mime Pin" - desc = "A pin to show off your appreciation for mimes and miming!" - icon_state = "mime_fan_pin" - -/obj/item/clothing/accessory/mime_fan_pin/on_uniform_equip(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(HAS_TRAIT(L, TRAIT_MIME_FAN)) - L.add_mood_event("mime_fan_pin", /datum/mood_event/mime_fan_pin) - -/obj/item/clothing/accessory/mime_fan_pin/on_uniform_dropped(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(HAS_TRAIT(L, TRAIT_MIME_FAN)) - L.clear_mood_event("mime_fan_pin") - -//////////////// -//OONGA BOONGA// -//////////////// - -/obj/item/clothing/accessory/talisman - name = "bone talisman" - desc = "A hunter's talisman, some say the old gods smile on those who wear it." - icon_state = "talisman" - armor_type = /datum/armor/accessory_talisman - attachment_slot = null - -/datum/armor/accessory_talisman - melee = 5 - bullet = 5 - laser = 5 - energy = 5 - bomb = 20 - bio = 20 - acid = 25 - -/obj/item/clothing/accessory/skullcodpiece - name = "skull codpiece" - desc = "A skull shaped ornament, intended to protect the important things in life." - icon_state = "skull" - armor_type = /datum/armor/accessory_skullcodpiece - attachment_slot = GROIN - -/datum/armor/accessory_skullcodpiece - melee = 5 - bullet = 5 - laser = 5 - energy = 5 - bomb = 20 - bio = 20 - acid = 25 - -/obj/item/clothing/accessory/skilt - name = "Sinew Skirt" - desc = "For the last time. IT'S A KILT not a skirt." - icon_state = "skilt" - minimize_when_attached = FALSE - armor_type = /datum/armor/accessory_skilt - attachment_slot = GROIN - -/datum/armor/accessory_skilt - melee = 5 - bullet = 5 - laser = 5 - energy = 5 - bomb = 20 - bio = 20 - acid = 25 - -/obj/item/clothing/accessory/allergy_dogtag - name = "Allergy dogtag" - desc = "Dogtag with a list of your allergies" - icon_state = "allergy" - minimize_when_attached = TRUE - attachment_slot = CHEST - ///Display message - var/display - -/obj/item/clothing/accessory/allergy_dogtag/examine(mob/user) - . = ..() - . += "The dogtag has a listing of allergies : [display]" - -/obj/item/clothing/accessory/allergy_dogtag/on_uniform_equip(obj/item/clothing/under/U, user) - . = ..() - RegisterSignal(U,COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) - -/obj/item/clothing/accessory/allergy_dogtag/on_uniform_dropped(obj/item/clothing/under/U, user) - . = ..() - UnregisterSignal(U,COMSIG_ATOM_EXAMINE) - -///What happens when we examine the uniform -/obj/item/clothing/accessory/allergy_dogtag/proc/on_examine(datum/source, mob/user, list/examine_list) - SIGNAL_HANDLER - examine_list += "The dogtag has a listing of allergies : [display]" - -/obj/item/clothing/accessory/deaf_pin - name = "deaf personnel pin" - desc = "Indicates that the wearer is deaf." - icon_state = "deaf_pin" - -///Awarded for being dutiful and extinguishing the debt from the "Indebted" quirk. -/obj/item/clothing/accessory/debt_payer_pin - name = "debt payer pin" - desc = "I've paid my debt and all I've got was this pin." - icon_state = "debt_payer_pin" diff --git a/code/modules/clothing/under/accessories/_accessories.dm b/code/modules/clothing/under/accessories/_accessories.dm new file mode 100644 index 000000000000..89f1008479aa --- /dev/null +++ b/code/modules/clothing/under/accessories/_accessories.dm @@ -0,0 +1,185 @@ +/** + * Clothing accessories. + * + * These items can be slotted onto an undershirt to provide a bit of flair. + * + * These should be very light on their effects. Armor should be avoided entirely. + * + * Multiple accessories can be equipped on a mob, and only the firstmost one is shown on their sprite. + * The rest are still shown on examine, but this may create unfair circumstances when you can't examine someone. + */ +/obj/item/clothing/accessory + name = "Accessory" + desc = "Something has gone wrong!" + icon = 'icons/obj/clothing/accessories.dmi' + worn_icon = 'icons/mob/clothing/accessories.dmi' + icon_state = "plasma" + inhand_icon_state = "" //no inhands + slot_flags = NONE + w_class = WEIGHT_CLASS_SMALL + /// Whether or not the accessory displays through suits and the like. + var/above_suit = TRUE + /// TRUE if shown as a small icon in corner, FALSE if overlayed + var/minimize_when_attached = TRUE + /// What equipment slot the accessory attaches to. + /// If NONE, can always attach, while if supplied, can only attach if the clothing covers this slot. + var/attachment_slot = CHEST + +/obj/item/clothing/accessory/Initialize(mapload) + . = ..() + register_context() + +/** + * Can we be attached to the passed clothing article? + */ +/obj/item/clothing/accessory/proc/can_attach_accessory(obj/item/clothing/under/attach_to, mob/living/user) + if(!istype(attach_to)) + CRASH("[type] - can_attach_accessory called with an invalid item to attach to. (got: [attach_to])") + + if(atom_storage && attach_to.atom_storage) + if(user) + attach_to.balloon_alert(user, "isn't compatible!") + return FALSE + + if(attachment_slot && !(attach_to.body_parts_covered & attachment_slot)) + if(user) + attach_to.balloon_alert(user, "can't attach there!") + return FALSE + + return TRUE + +/** + * Actually attach this accessory to the passed clothing article. + * + * The accessory is not yet within the clothing's loc at this point, this hapens after success. + */ +/obj/item/clothing/accessory/proc/attach(obj/item/clothing/under/attach_to, mob/living/attacher) + SHOULD_CALL_PARENT(TRUE) + + if(atom_storage) + attach_to.clone_storage(atom_storage) + attach_to.atom_storage.set_real_location(src) + + var/num_other_accessories = LAZYLEN(attach_to.attached_accessories) + layer = FLOAT_LAYER + clamp(attach_to.max_number_of_accessories - num_other_accessories, 0, 10) + plane = FLOAT_PLANE + + if(minimize_when_attached) + transform *= 0.5 + pixel_x += 8 + pixel_y += (-8 + LAZYLEN(attach_to.attached_accessories) * 2) + + RegisterSignal(attach_to, COMSIG_ITEM_EQUIPPED, PROC_REF(on_uniform_equipped)) + RegisterSignal(attach_to, COMSIG_ITEM_DROPPED, PROC_REF(on_uniform_dropped)) + RegisterSignal(attach_to, COMSIG_CLOTHING_UNDER_ADJUSTED, PROC_REF(on_uniform_adjusted)) + RegisterSignal(attach_to, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_uniform_update)) + + return TRUE + +/// Called after attach is completely successful and the accessory is in the clothing's loc +/obj/item/clothing/accessory/proc/successful_attach(obj/item/clothing/under/attached_to) + SHOULD_CALL_PARENT(TRUE) + + // Do on-equip effects if we're already equipped + var/mob/worn_on = attached_to.loc + if(istype(worn_on)) + on_uniform_equipped(attached_to, worn_on, worn_on.get_slot_by_item(attached_to)) + + SEND_SIGNAL(src, COMSIG_ACCESSORY_ATTACHED, attached_to) + SEND_SIGNAL(attached_to, COMSIG_CLOTHING_ACCESSORY_ATTACHED, src) + +/** + * Detach this accessory from the passed clothing article + * + * We may have exited the clothing's loc at this point + */ +/obj/item/clothing/accessory/proc/detach(obj/item/clothing/under/detach_from) + SHOULD_CALL_PARENT(TRUE) + + if(IS_WEAKREF_OF(src, detach_from.atom_storage?.real_location)) + // Ensure void items do not stick around + atom_storage.close_all() + detach_from.atom_storage.close_all() + // And clean up the storage we made + QDEL_NULL(detach_from.atom_storage) + + UnregisterSignal(detach_from, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_CLOTHING_UNDER_ADJUSTED, COMSIG_ATOM_UPDATE_OVERLAYS)) + var/mob/dropped_from = detach_from.loc + if(istype(dropped_from)) + on_uniform_dropped(detach_from, dropped_from) + + SEND_SIGNAL(src, COMSIG_ACCESSORY_DETACHED, detach_from) + SEND_SIGNAL(detach_from, COMSIG_CLOTHING_ACCESSORY_DETACHED, src) + + if(minimize_when_attached) + transform *= 2 + // just randomize position + pixel_x = rand(4, -4) + pixel_y = rand(4, -4) + + layer = initial(layer) + SET_PLANE_IMPLICIT(src, initial(plane)) + return TRUE + +/// Signal proc for [COMSIG_ITEM_EQUIPPED] on the uniform we're pinned to +/obj/item/clothing/accessory/proc/on_uniform_equipped(obj/item/clothing/under/source, mob/living/user, slot) + SIGNAL_HANDLER + + if(!(slot & source.slot_flags)) + return + + accessory_equipped(source, user) + +/// Signal proc for [COMSIG_ITEM_DROPPED] on the uniform we're pinned to +/obj/item/clothing/accessory/proc/on_uniform_dropped(obj/item/clothing/under/source, mob/living/user) + SIGNAL_HANDLER + + accessory_dropped(source, user) + user.update_clothing(ITEM_SLOT_ICLOTHING|ITEM_SLOT_OCLOTHING) + +/// Called when the uniform this accessory is pinned to is equipped in a valid slot +/obj/item/clothing/accessory/proc/accessory_equipped(obj/item/clothing/under/clothes, mob/living/user) + return + +/// Called when the uniform this accessory is pinned to is dropped +/obj/item/clothing/accessory/proc/accessory_dropped(obj/item/clothing/under/clothes, mob/living/user) + return + +/// Signal proc for [COMSIG_CLOTHING_UNDER_ADJUSTED] on the uniform we're pinned to +/// Checks if we can no longer be attached to the uniform, and if so, drops us +/obj/item/clothing/accessory/proc/on_uniform_adjusted(obj/item/clothing/under/source) + SIGNAL_HANDLER + + if(can_attach_accessory(source)) + return + + source.remove_accessory(src) + forceMove(source.drop_location()) + source.visible_message(span_warning("[src] falls off of [source]!")) + +/// Signal proc for [COMSIG_ATOM_UPDATE_OVERLAYS] on the uniform we're pinned to to add our overlays to the inventory icon +/obj/item/clothing/accessory/proc/on_uniform_update(obj/item/source, list/overlays) + SIGNAL_HANDLER + + overlays |= src + +/obj/item/clothing/accessory/attack_self_secondary(mob/user) + . = ..() + if(.) + return + if(user.can_perform_action(src, NEED_DEXTERITY)) + above_suit = !above_suit + balloon_alert(user, "wearing [above_suit ? "above" : "below"] suits") + return TRUE + +/obj/item/clothing/accessory/examine(mob/user) + . = ..() + . += "It can be attached to a uniform." + . += "It can be worn above or below your suit. Right-click to toggle." + +/obj/item/clothing/accessory/add_context(atom/source, list/context, obj/item/held_item, mob/user) + if(!isnull(held_item)) + return NONE + + context[SCREENTIP_CONTEXT_RMB] = "Wear [above_suit ? "below" : "above"] suit" + return CONTEXTUAL_SCREENTIP_SET diff --git a/code/modules/clothing/under/accessories/armbands.dm b/code/modules/clothing/under/accessories/armbands.dm new file mode 100644 index 000000000000..fb2619256118 --- /dev/null +++ b/code/modules/clothing/under/accessories/armbands.dm @@ -0,0 +1,40 @@ +// Armbands, which go around a sleeve of a shirt. +/obj/item/clothing/accessory/armband + name = "red armband" + desc = "A fancy red armband!" + icon_state = "redband" + attachment_slot = NONE + +/obj/item/clothing/accessory/armband/deputy + name = "security deputy armband" + desc = "An armband, worn by personnel authorized to act as a deputy of station security." + +/obj/item/clothing/accessory/armband/cargo + name = "cargo bay guard armband" + desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is brown." + icon_state = "cargoband" + +/obj/item/clothing/accessory/armband/engine + name = "engineering guard armband" + desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is orange with a reflective strip!" + icon_state = "engieband" + +/obj/item/clothing/accessory/armband/science + name = "science guard armband" + desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is purple." + icon_state = "rndband" + +/obj/item/clothing/accessory/armband/hydro + name = "hydroponics guard armband" + desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is green and blue." + icon_state = "hydroband" + +/obj/item/clothing/accessory/armband/med + name = "medical guard armband" + desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is white." + icon_state = "medband" + +/obj/item/clothing/accessory/armband/medblue + name = "medical guard armband" + desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is white and blue." + icon_state = "medblueband" diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm new file mode 100644 index 000000000000..f5c68023128b --- /dev/null +++ b/code/modules/clothing/under/accessories/badges.dm @@ -0,0 +1,205 @@ +// Badges, pins, and other very small items that slot onto a shirt. +/obj/item/clothing/accessory/lawyers_badge + name = "attorney's badge" + desc = "Fills you with the conviction of JUSTICE. Lawyers tend to want to show it to everyone they meet." + icon_state = "lawyerbadge" + +/obj/item/clothing/accessory/lawyers_badge/interact(mob/user) + . = ..() + if(prob(1)) + user.say("The testimony contradicts the evidence!", forced = "[src]") + user.visible_message(span_notice("[user] shows [user.p_their()] attorney's badge."), span_notice("You show your attorney's badge.")) + +/obj/item/clothing/accessory/lawyers_badge/accessory_equipped(obj/item/clothing/under/clothes, mob/living/user) + RegisterSignal(user, COMSIG_LIVING_SLAM_TABLE, PROC_REF(table_slam)) + user.bubble_icon = "lawyer" + +/obj/item/clothing/accessory/lawyers_badge/accessory_dropped(obj/item/clothing/under/clothes, mob/living/user) + UnregisterSignal(user, COMSIG_LIVING_SLAM_TABLE) + user.bubble_icon = initial(user.bubble_icon) + +/obj/item/clothing/accessory/lawyers_badge/proc/table_slam(mob/living/source, obj/structure/table/the_table) + SIGNAL_HANDLER + + ASYNC + source.say("Objection!!", spans = list(SPAN_YELL), forced = "[src]") + +/obj/item/clothing/accessory/clown_enjoyer_pin + name = "\improper Clown Pin" + desc = "A pin to show off your appreciation for clowns and clowning!" + icon_state = "clown_enjoyer_pin" + +/obj/item/clothing/accessory/clown_enjoyer_pin/can_attach_accessory(obj/item/clothing/under/attach_to, mob/living/user) + . = ..() + if(!.) + return + if(locate(/obj/item/clothing/accessory/mime_fan_pin) in attach_to.attached_accessories) + if(user) + attach_to.balloon_alert(user, "can't pick both sides!") + return FALSE + return TRUE + +/obj/item/clothing/accessory/clown_enjoyer_pin/accessory_equipped(obj/item/clothing/under/clothes, mob/living/user) + if(HAS_TRAIT(user, TRAIT_CLOWN_ENJOYER)) + user.add_mood_event("clown_enjoyer_pin", /datum/mood_event/clown_enjoyer_pin) + if(ishuman(user)) + var/mob/living/carbon/human/human_equipper = user + human_equipper.fan_hud_set_fandom() + +/obj/item/clothing/accessory/clown_enjoyer_pin/accessory_dropped(obj/item/clothing/under/clothes, mob/living/user) + user.clear_mood_event("clown_enjoyer_pin") + if(ishuman(user)) + var/mob/living/carbon/human/human_equipper = user + human_equipper.fan_hud_set_fandom() + +/obj/item/clothing/accessory/mime_fan_pin + name = "\improper Mime Pin" + desc = "A pin to show off your appreciation for mimes and miming!" + icon_state = "mime_fan_pin" + +/obj/item/clothing/accessory/mime_fan_pin/can_attach_accessory(obj/item/clothing/under/attach_to, mob/living/user) + . = ..() + if(!.) + return + if(locate(/obj/item/clothing/accessory/clown_enjoyer_pin) in attach_to.attached_accessories) + if(user) + attach_to.balloon_alert(user, "can't pick both sides!") + return FALSE + return TRUE + +/obj/item/clothing/accessory/mime_fan_pin/accessory_equipped(obj/item/clothing/under/clothes, mob/living/user) + if(HAS_TRAIT(user, TRAIT_MIME_FAN)) + user.add_mood_event("mime_fan_pin", /datum/mood_event/mime_fan_pin) + if(ishuman(user)) + var/mob/living/carbon/human/human_equipper = user + human_equipper.fan_hud_set_fandom() + +/obj/item/clothing/accessory/mime_fan_pin/accessory_dropped(obj/item/clothing/under/clothes, mob/living/user) + user.clear_mood_event("mime_fan_pin") + if(ishuman(user)) + var/mob/living/carbon/human/human_equipper = user + human_equipper.fan_hud_set_fandom() + +/obj/item/clothing/accessory/pocketprotector + name = "pocket protector" + desc = "Can protect your clothing from ink stains, but you'll look like a nerd if you're using one." + icon_state = "pocketprotector" + +/obj/item/clothing/accessory/pocketprotector/Initialize(mapload) + . = ..() + create_storage(storage_type = /datum/storage/pockets/pocketprotector) + +/obj/item/clothing/accessory/pocketprotector/can_attach_accessory(obj/item/clothing/under/attach_to, mob/living/user) + . = ..() + if(!.) + return + + if(!isnull(attach_to.atom_storage)) + if(user) + attach_to.balloon_alert(user, "not compatible!") + return FALSE + return TRUE + +/obj/item/clothing/accessory/pocketprotector/full + +/obj/item/clothing/accessory/pocketprotector/full/Initialize(mapload) + . = ..() + new /obj/item/pen/red(src) + new /obj/item/pen(src) + new /obj/item/pen/blue(src) + +/obj/item/clothing/accessory/pocketprotector/cosmetology + +/obj/item/clothing/accessory/pocketprotector/cosmetology/Initialize(mapload) + . = ..() + for(var/i in 1 to 3) + new /obj/item/lipstick/random(src) + +/obj/item/clothing/accessory/dogtag + name = "Dogtag" + desc = "Can't wear a collar, but this is fine?" + icon_state = "allergy" + attachment_slot = NONE // actually NECK but that doesn't make sense + /// What message is displayed when our dogtags / its clothes / its wearer is examined + var/display = "Nothing!" + +/obj/item/clothing/accessory/dogtag/examine(mob/user) + . = ..() + . += display + +// Examining the clothes will display the examine message of the dogtag +/obj/item/clothing/accessory/dogtag/attach(obj/item/clothing/under/attach_to, mob/living/attacher) + . = ..() + if(!.) + return + RegisterSignal(attach_to, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + +/obj/item/clothing/accessory/dogtag/detach(obj/item/clothing/under/detach_from) + . = ..() + UnregisterSignal(detach_from, COMSIG_ATOM_EXAMINE) + +// Double examining the person wearing the clothes will display the examine message of the dogtag +/obj/item/clothing/accessory/dogtag/accessory_equipped(obj/item/clothing/under/clothes, mob/living/user) + RegisterSignal(user, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(on_examine)) + +/obj/item/clothing/accessory/dogtag/accessory_dropped(obj/item/clothing/under/clothes, mob/living/user) + UnregisterSignal(user, COMSIG_ATOM_EXAMINE_MORE) + +/// Adds the examine message to the clothes and mob. +/obj/item/clothing/accessory/dogtag/proc/on_examine(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + + // Only show the examine message if we're close (2 tiles) + if(!IN_GIVEN_RANGE(get_turf(user), get_turf(src), 2)) + return + + if(ismob(source)) + // Examining a mob wearing the clothes, wearing the dogtag will also show the message + examine_list += "A dogtag is hanging around [source.p_their()] neck: [display]" + else + examine_list += "A dogtag is attached to [source]: [display]" + +/obj/item/clothing/accessory/dogtag/allergy + name = "Allergy dogtag" + desc = "A dogtag with a listing of allergies." + +/obj/item/clothing/accessory/dogtag/allergy/Initialize(mapload, allergy_string) + . = ..() + if(allergy_string) + display = span_notice("The dogtag has a listing of allergies: [allergy_string]") + else + display = span_notice("The dogtag is all scratched up.") + +/// Reskins for the pride pin accessory, mapped by display name to icon state +GLOBAL_LIST_INIT(pride_pin_reskins, list( + "Rainbow Pride" = "pride", + "Bisexual Pride" = "pride_bi", + "Pansexual Pride" = "pride_pan", + "Asexual Pride" = "pride_ace", + "Non-binary Pride" = "pride_enby", + "Transgender Pride" = "pride_trans", + "Intersex Pride" = "pride_intersex", + "Lesbian Pride" = "pride_lesbian", +)) + +/obj/item/clothing/accessory/pride + name = "pride pin" + desc = "A Nanotrasen Diversity & Inclusion Center-sponsored holographic pin to show off your pride, reminding the crew of their unwavering commitment to equity, diversity, and inclusion!" + icon_state = "pride" + obj_flags = UNIQUE_RENAME + infinite_reskin = TRUE + +/obj/item/clothing/accessory/pride/Initialize(mapload) + . = ..() + unique_reskin = GLOB.pride_pin_reskins + +///Awarded for being dutiful and extinguishing the debt from the "Indebted" quirk. +/obj/item/clothing/accessory/debt_payer_pin + name = "debt payer pin" + desc = "I've paid my debt and all I've got was this pin." + icon_state = "debt_payer_pin" + +/obj/item/clothing/accessory/deaf_pin + name = "deaf personnel pin" + desc = "Indicates that the wearer is deaf." + icon_state = "deaf_pin" diff --git a/code/modules/clothing/under/accessories/medals.dm b/code/modules/clothing/under/accessories/medals.dm new file mode 100644 index 000000000000..01f134fa1ba0 --- /dev/null +++ b/code/modules/clothing/under/accessories/medals.dm @@ -0,0 +1,140 @@ +/obj/item/clothing/accessory/medal + name = "bronze medal" + desc = "A bronze medal." + icon_state = "bronze" + custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) + resistance_flags = FIRE_PROOF + /// Sprite used for medalbox + var/medaltype = "medal" + /// Has this been use for a commendation? + var/commended = FALSE + +// If someone adds SHOULD_NOT_SLEEP anywhere up the chain, this will need to be reworked +/obj/item/clothing/accessory/medal/attach(obj/item/clothing/under/attach_to, mob/living/attacher) + if(isnull(attacher)) + // Do normal attach + return ..() + + var/mob/living/distinguished = attach_to.loc + if(!istype(distinguished) || distinguished == attacher) + // Do normal attach + return ..() + + // Do a do_after before we attach, and allow us to include a commendation message. + attacher.visible_message( + span_notice("[attacher] is trying to pin [src] on [distinguished]'s chest."), + span_notice("You try to pin [src] on [distinguished]'s chest."), + ) + + var/input + if(!commended) + input = tgui_input_text(attacher, "Reason for this commendation? It will be recorded by Nanotrasen.", "Commendation", max_length = 140) + + if(!do_after(attacher, 2 SECONDS, distinguished)) + return FALSE + + attacher.visible_message( + span_notice("[attacher] pins [src] on [distinguished]'s chest."), + span_notice("You pin [src] on [distinguished]'s chest."), + ) + if(!input) + return FALSE + + commended = TRUE + SSblackbox.record_feedback("associative", "commendation", 1, list("commender" = "[attacher.real_name]", "commendee" = "[distinguished.real_name]", "medal" = "[src]", "reason" = input)) + GLOB.commendations += "[attacher.real_name] awarded [distinguished.real_name] the [name]! \n- [input]" + desc += "
The inscription reads: [input] - [attacher.real_name]" + distinguished.log_message("was given the following commendation by [key_name(attacher)]: [input]", LOG_GAME, color = "green") + message_admins("[key_name_admin(distinguished)] was given the following commendation by [key_name_admin(attacher)]: [input]") + add_memory_in_range(distinguished, 7, /datum/memory/received_medal, protagonist = distinguished, deuteragonist = attacher, medal_type = src, medal_text = input) + return ..() + +/obj/item/clothing/accessory/medal/conduct + name = "distinguished conduct medal" + desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is the most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew." + +/obj/item/clothing/accessory/medal/bronze_heart + name = "bronze heart medal" + desc = "A bronze heart-shaped medal awarded for sacrifice. It is often awarded posthumously or for severe injury in the line of duty." + icon_state = "bronze_heart" + +/obj/item/clothing/accessory/medal/ribbon + name = "ribbon" + desc = "A ribbon" + icon_state = "cargo" + +/obj/item/clothing/accessory/medal/ribbon/cargo + name = "\"cargo tech of the shift\" award" + desc = "An award bestowed only upon those cargotechs who have exhibited devotion to their duty in keeping with the highest traditions of Cargonia." + +/obj/item/clothing/accessory/medal/silver + name = "silver medal" + desc = "A silver medal." + icon_state = "silver" + medaltype = "medal-silver" + custom_materials = list(/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT) + +/obj/item/clothing/accessory/medal/silver/valor + name = "medal of valor" + desc = "A silver medal awarded for acts of exceptional valor." + +/obj/item/clothing/accessory/medal/silver/security + name = "robust security award" + desc = "An award for distinguished combat and sacrifice in defence of Nanotrasen's commercial interests. Often awarded to security staff." + +/obj/item/clothing/accessory/medal/silver/excellence + name = "\proper the head of personnel award for outstanding achievement in the field of excellence" + desc = "Nanotrasen's dictionary defines excellence as \"the quality or condition of being excellent\". This is awarded to those rare crewmembers who fit that definition." + +/obj/item/clothing/accessory/medal/silver/bureaucracy + name = "\improper Excellence in Bureaucracy Medal" + desc = "Awarded for exemplary managerial services rendered while under contract with Nanotrasen." + +/obj/item/clothing/accessory/medal/gold + name = "gold medal" + desc = "A prestigious golden medal." + icon_state = "gold" + medaltype = "medal-gold" + custom_materials = list(/datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT) + +/obj/item/clothing/accessory/medal/med_medal + name = "exemplary performance medal" + desc = "A medal awarded to those who have shown distinguished conduct, performance, and initiative within the medical department." + icon_state = "med_medal" + +/obj/item/clothing/accessory/medal/med_medal2 + name = "excellence in medicine medal" + desc = "A medal awarded to those who have shown legendary performance, competence, and initiative beyond all expectations within the medical department." + icon_state = "med_medal2" + +/obj/item/clothing/accessory/medal/gold/captain + name = "medal of captaincy" + desc = "A golden medal awarded exclusively to those promoted to the rank of captain. It signifies the codified responsibilities of a captain to Nanotrasen, and their undisputable authority over their crew." + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + +/obj/item/clothing/accessory/medal/gold/heroism + name = "medal of exceptional heroism" + desc = "An extremely rare golden medal awarded only by CentCom. To receive such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but commanders." + +/obj/item/clothing/accessory/medal/plasma + name = "plasma medal" + desc = "An eccentric medal made of plasma." + icon_state = "plasma" + medaltype = "medal-plasma" + custom_materials = list(/datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT) + +/obj/item/clothing/accessory/medal/plasma/Initialize(mapload) + . = ..() + AddElement(/datum/element/atmos_sensitive, mapload) + +/obj/item/clothing/accessory/medal/plasma/should_atmos_process(datum/gas_mixture/air, exposed_temperature) + return exposed_temperature > 300 + +/obj/item/clothing/accessory/medal/plasma/atmos_expose(datum/gas_mixture/air, exposed_temperature) + atmos_spawn_air("plasma=20;TEMP=[exposed_temperature]") + visible_message(span_danger("\The [src] bursts into flame!"), span_userdanger("Your [src] bursts into flame!")) + qdel(src) + +/obj/item/clothing/accessory/medal/plasma/nobel_science + name = "nobel sciences award" + desc = "A plasma medal which represents significant contributions to the field of science or engineering." diff --git a/code/modules/clothing/under/accessories/tribal.dm b/code/modules/clothing/under/accessories/tribal.dm new file mode 100644 index 000000000000..ad55b26fa89f --- /dev/null +++ b/code/modules/clothing/under/accessories/tribal.dm @@ -0,0 +1,19 @@ +// Tribal undershirt accessories, made from bone or sinew. +/obj/item/clothing/accessory/talisman + name = "bone talisman" + desc = "A hunter's talisman, some say the old gods smile on those who wear it." + icon_state = "talisman" + attachment_slot = NONE + +/obj/item/clothing/accessory/skullcodpiece + name = "skull codpiece" + desc = "A skull shaped ornament, intended to protect the important things in life." + icon_state = "skull" + attachment_slot = GROIN + +/obj/item/clothing/accessory/skilt + name = "Sinew Skirt" + desc = "For the last time. IT'S A KILT not a skirt." + icon_state = "skilt" + minimize_when_attached = FALSE + attachment_slot = GROIN diff --git a/code/modules/clothing/under/accessories/vests.dm b/code/modules/clothing/under/accessories/vests.dm new file mode 100644 index 000000000000..a6603941dd08 --- /dev/null +++ b/code/modules/clothing/under/accessories/vests.dm @@ -0,0 +1,44 @@ +// Accessories that mostly or entirely cover a shirt. +/obj/item/clothing/accessory/waistcoat + name = "waistcoat" + desc = "For some classy, murderous fun." + icon_state = "waistcoat" + inhand_icon_state = "wcoat" + lefthand_file = 'icons/mob/inhands/clothing/suits_lefthand.dmi' + righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' + minimize_when_attached = FALSE + attachment_slot = NONE + greyscale_config = /datum/greyscale_config/waistcoat + greyscale_config_worn = /datum/greyscale_config/waistcoat_worn + greyscale_colors = "#414344" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/accessory/vest_sheriff + name = "sheriff vest" + desc = "Now you just have to pick your favourite deputy." + icon_state = "vest_sheriff" + lefthand_file = 'icons/mob/inhands/clothing/suits_lefthand.dmi' + righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' + inhand_icon_state = "vest_sheriff" + minimize_when_attached = TRUE + attachment_slot = NONE + +/obj/item/clothing/accessory/maidcorset + name = "maid corset" + desc = "The final touch that holds it all together." + icon_state = "maidcorset" + inhand_icon_state = "maidapron" + lefthand_file = 'icons/mob/inhands/clothing/suits_lefthand.dmi' + righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' + minimize_when_attached = FALSE + attachment_slot = NONE + +/obj/item/clothing/accessory/maidapron + name = "maid apron" + desc = "The best part of a maid costume." + icon_state = "maidapron" + inhand_icon_state = "maidapron" + lefthand_file = 'icons/mob/inhands/clothing/suits_lefthand.dmi' + righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' + minimize_when_attached = FALSE + attachment_slot = NONE diff --git a/code/modules/emote_panel/emote_panel.dm b/code/modules/emote_panel/emote_panel.dm new file mode 100644 index 000000000000..72caf05e92b2 --- /dev/null +++ b/code/modules/emote_panel/emote_panel.dm @@ -0,0 +1,64 @@ +/datum/emote_panel + var/list/blacklisted_emotes = list("me", "help") + +/datum/emote_panel/ui_static_data(mob/user) + var/list/data = list() + + var/list/emotes = list() + var/list/keys = list() + + for(var/key in GLOB.emote_list) + for(var/datum/emote/emote in GLOB.emote_list[key]) + if(emote.key in keys) + continue + if(emote.key in blacklisted_emotes) + continue + if(emote.can_run_emote(user, status_check = FALSE, intentional = FALSE)) + keys += emote.key + emotes += list(list( + "key" = emote.key, + "name" = emote.name, + "hands" = emote.hands_use_check, + "visible" = emote.emote_type & EMOTE_VISIBLE, + "audible" = emote.emote_type & EMOTE_AUDIBLE, + "sound" = !isnull(emote.get_sound(user)), + "use_params" = emote.message_param, + )) + + data["emotes"] = emotes + + return data + +/datum/emote_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + switch(action) + if("play_emote") + var/emote_key = params["emote_key"] + if(isnull(emote_key) || !GLOB.emote_list[emote_key]) + return + var/use_params = params["use_params"] + var/datum/emote/emote = GLOB.emote_list[emote_key][1] + var/emote_param + if(emote.message_param && use_params) + emote_param = tgui_input_text(ui.user, "Add params to the emote...", emote.message_param) + ui.user.emote(emote_key, message = emote_param, intentional = TRUE) + +/datum/emote_panel/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "EmotePanel") + ui.open() + +/datum/emote_panel/ui_state(mob/user) + return GLOB.always_state + +/mob/living/verb/emote_panel() + set name = "Emote Panel" + set category = "IC" + + var/static/datum/emote_panel/emote_panel + if(isnull(emote_panel)) + emote_panel = new + emote_panel.ui_interact(src) diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm index 09f232c2149d..2efc1936f442 100644 --- a/code/modules/events/_event.dm +++ b/code/modules/events/_event.dm @@ -90,7 +90,7 @@ /datum/round_event_control/proc/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE) SHOULD_CALL_PARENT(TRUE) //monkestation edit start - if(roundstart && (world.time-SSticker.round_start_time >= 2 MINUTES || (SSgamemode.ran_roundstart && !fake_check))) + if(roundstart && ((SSticker.round_start_time && world.time - SSticker.round_start_time >= 2 MINUTES) || (SSgamemode.ran_roundstart && !fake_check))) return FALSE //monkestation edit end if(occurrences >= max_occurrences) @@ -335,9 +335,17 @@ Runs the event for(var/datum/event_admin_setup/admin_setup_datum in src.admin_setup) if(admin_setup_datum.prompt_admins() == ADMIN_CANCEL_EVENT) return - message_admins("[key_name_admin(usr)] force scheduled event [src.name].") - log_admin_private("[key_name(usr)] force scheduled event [src.name].") + message_admins("[key_name_admin(usr)] forced scheduled event [src.name].") + log_admin_private("[key_name(usr)] forced scheduled event [src.name].") SSgamemode.forced_next_events[src.track] = src + if("fire") + if(length(src.admin_setup)) + for(var/datum/event_admin_setup/admin_setup_datum in src.admin_setup) + if(admin_setup_datum.prompt_admins() == ADMIN_CANCEL_EVENT) + return + message_admins("[key_name_admin(usr)] fired event [src.name].") + log_admin_private("[key_name(usr)] fired event [src.name].") + run_event(random = FALSE, admin_forced = TRUE) //monkestation addition ends - STORYTELLERS diff --git a/code/modules/events/anomaly/anomaly_bioscrambler.dm b/code/modules/events/anomaly/anomaly_bioscrambler.dm index fe0e93929d9f..d157eba43c44 100644 --- a/code/modules/events/anomaly/anomaly_bioscrambler.dm +++ b/code/modules/events/anomaly/anomaly_bioscrambler.dm @@ -15,4 +15,4 @@ anomaly_path = /obj/effect/anomaly/bioscrambler /datum/round_event/anomaly/anomaly_bioscrambler/announce(fake) - priority_announce("Biologic limb swapping agent detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name]. Wear biosuits or other protective gear to counter the effects. Calculated half-life of %9£$T$%F3 years.", "Anomaly Alert") + priority_announce("Biologic limb swapping agent detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name]. Wear biosuits or other protective gear to counter the effects.", "Anomaly Alert") // monke edit: bioscrambler is no longer immortal diff --git a/code/modules/events/creep_awakening.dm b/code/modules/events/creep_awakening.dm index 648c2cc9db04..bf5b4eb922d3 100644 --- a/code/modules/events/creep_awakening.dm +++ b/code/modules/events/creep_awakening.dm @@ -5,6 +5,7 @@ min_players = 20 category = EVENT_CATEGORY_HEALTH description = "A random crewmember becomes obsessed with another." + weight = 0 // essentially disables it /datum/round_event/obsessed fakeable = FALSE diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index 0dfb89be418b..91b3c0f99431 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -24,7 +24,7 @@ typepath = /datum/round_event/disease_outbreak max_occurrences = 1 min_players = 10 - weight = 5 + weight = 4 category = EVENT_CATEGORY_HEALTH description = "A 'classic' virus will infect some members of the crew." min_wizard_trigger_potency = 2 @@ -143,7 +143,7 @@ name = "Disease Outbreak: Advanced" typepath = /datum/round_event/disease_outbreak/advanced category = EVENT_CATEGORY_HEALTH - weight = 7 //monkestation change 15 ==> 7 + weight = 5 //monkestation change 15 ==> 5 min_players = 35 // To avoid shafting lowpop earliest_start = 15 MINUTES // give the chemist a chance description = "An 'advanced' disease will infect some members of the crew." diff --git a/code/modules/events/fake_virus.dm b/code/modules/events/fake_virus.dm index fb6bfd5be975..950badd99362 100644 --- a/code/modules/events/fake_virus.dm +++ b/code/modules/events/fake_virus.dm @@ -1,7 +1,7 @@ /datum/round_event_control/fake_virus name = "Fake Virus" typepath = /datum/round_event/fake_virus - weight = 20 + weight = 15 //MONKESTATION CHANGE: 20 ==> 15 category = EVENT_CATEGORY_HEALTH description = "Some crewmembers suffer from temporary hypochondria." diff --git a/code/modules/events/ghost_role/_ghost_role.dm b/code/modules/events/ghost_role/_ghost_role.dm index 90b6b36dca3f..336fb4c03bbd 100644 --- a/code/modules/events/ghost_role/_ghost_role.dm +++ b/code/modules/events/ghost_role/_ghost_role.dm @@ -3,8 +3,6 @@ /datum/round_event/ghost_role fakeable = FALSE - /// Members of this list will be placed at the front of the candicacy list, in front of the (shuffled) normal candidates. - var/list/priority_candidates = list() //expected to contain 0 or more /clients (or things with .key) /// The minimum number of signups required for the event to continue past the polling period var/minimum_required = 1 /// The name of the role, to be displayed in logs/polls/etc. @@ -84,29 +82,4 @@ /datum/round_event/ghost_role/proc/spawn_role() return FALSE -/** - * Gathers the candidates to select our ghost roles from. - * - * Returns a list of candidates in priority order, with candidates from - * `priority_candidates` first, and ghost roles randomly shuffled and - * appended after. - * - * jobban - The jobban flag to exclude players from the polling pool with. - * be_special - The "special role" flag for the ghost candidacy poll. - */ - -/datum/round_event/ghost_role/proc/get_candidates(jobban, be_special) - var/list/mob/dead/observer/regular_candidates - // don't get their hopes up - if(priority_candidates.len < minimum_required) - regular_candidates = poll_ghost_candidates("Do you wish to be considered for the special role of '[role_name]'?", jobban, be_special) - else - regular_candidates = list() - - shuffle_inplace(regular_candidates) - - var/list/candidates = priority_candidates + regular_candidates - - return candidates - #undef MAX_SPAWN_ATTEMPT diff --git a/code/modules/events/ghost_role/abductor.dm b/code/modules/events/ghost_role/abductor.dm index 708f154c58da..323bb8e9e0a7 100644 --- a/code/modules/events/ghost_role/abductor.dm +++ b/code/modules/events/ghost_role/abductor.dm @@ -14,9 +14,9 @@ fakeable = FALSE //Nothing to fake here /datum/round_event/ghost_role/abductor/spawn_role() - var/list/mob/dead/observer/candidates = get_candidates(ROLE_ABDUCTOR, ROLE_ABDUCTOR) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_ABDUCTOR, role = ROLE_ABDUCTOR, pic_source = /obj/item/melee/baton/abductor, role_name_text = role_name) - if(candidates.len < 2) + if(length(candidates) < 2) return NOT_ENOUGH_PLAYERS SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_ABDUCTOR_SHIPS) diff --git a/code/modules/events/ghost_role/alien_infestation.dm b/code/modules/events/ghost_role/alien_infestation.dm index da862efb05bf..47e930204c57 100644 --- a/code/modules/events/ghost_role/alien_infestation.dm +++ b/code/modules/events/ghost_role/alien_infestation.dm @@ -63,12 +63,12 @@ message_admins("An event attempted to spawn an alien but no suitable vents were found. Shutting down.") return MAP_ERROR - var/list/candidates = get_candidates(ROLE_ALIEN, ROLE_ALIEN) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_ALIEN, role = ROLE_ALIEN, pic_source = /mob/living/carbon/alien/larva, role_name_text = role_name) - if(!candidates.len) + if(!length(candidates)) return NOT_ENOUGH_PLAYERS - while(spawncount > 0 && vents.len && candidates.len) + while(spawncount > 0 && vents.len && length(candidates)) var/obj/vent = pick_n_take(vents) var/mob/dead/observer/selected = pick_n_take(candidates) var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc) diff --git a/code/modules/events/ghost_role/blob.dm b/code/modules/events/ghost_role/blob.dm index 6bc02bcf2ff4..508a113852da 100644 --- a/code/modules/events/ghost_role/blob.dm +++ b/code/modules/events/ghost_role/blob.dm @@ -29,8 +29,12 @@ /datum/round_event/ghost_role/blob/spawn_role() if(!GLOB.blobstart.len) return MAP_ERROR - var/list/candidates = get_candidates(ROLE_BLOB, ROLE_BLOB) - if(!candidates.len) + var/icon/blob_icon = icon('icons/mob/nonhuman-player/blob.dmi', icon_state = "blob_core") + blob_icon.Blend("#9ACD32", ICON_MULTIPLY) + blob_icon.Blend(icon('icons/mob/nonhuman-player/blob.dmi', "blob_core_overlay"), ICON_OVERLAY) + var/image/blob_image = image(blob_icon) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_BLOB, role = ROLE_BLOB, pic_source = blob_image, role_name_text = role_name) + if(!length(candidates)) return NOT_ENOUGH_PLAYERS var/mob/dead/observer/new_blob = pick(candidates) var/mob/camera/blob/BC = new_blob.become_overmind() diff --git a/code/modules/events/ghost_role/changeling_event.dm b/code/modules/events/ghost_role/changeling_event.dm index 9d3af9164681..08070f985945 100644 --- a/code/modules/events/ghost_role/changeling_event.dm +++ b/code/modules/events/ghost_role/changeling_event.dm @@ -21,7 +21,7 @@ fakeable = FALSE /datum/round_event/ghost_role/changeling/spawn_role() - var/list/mob/dead/observer/candidate = get_candidates(ROLE_CHANGELING, ROLE_CHANGELING_MIDROUND) + var/list/mob/dead/observer/candidate = SSpolling.poll_ghost_candidates(check_jobban = ROLE_CHANGELING, role = ROLE_CHANGELING_MIDROUND, pic_source = /obj/item/melee/arm_blade, role_name_text = role_name) if(!candidate.len) return NOT_ENOUGH_PLAYERS diff --git a/code/modules/events/ghost_role/fugitive_event.dm b/code/modules/events/ghost_role/fugitive_event.dm index 24aa4798c79c..73291df5b5aa 100644 --- a/code/modules/events/ghost_role/fugitive_event.dm +++ b/code/modules/events/ghost_role/fugitive_event.dm @@ -20,7 +20,7 @@ if(isnull(landing_turf)) return MAP_ERROR var/list/possible_backstories = list() - var/list/candidates = get_candidates(ROLE_FUGITIVE, ROLE_FUGITIVE) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_FUGITIVE, role = ROLE_FUGITIVE, pic_source = /obj/item/card/id/advanced/prisoner) if(!length(candidates)) return NOT_ENOUGH_PLAYERS diff --git a/code/modules/events/ghost_role/morph_event.dm b/code/modules/events/ghost_role/morph_event.dm index e0b75119c282..083342d4783d 100644 --- a/code/modules/events/ghost_role/morph_event.dm +++ b/code/modules/events/ghost_role/morph_event.dm @@ -13,8 +13,8 @@ role_name = "morphling" /datum/round_event/ghost_role/morph/spawn_role() - var/list/candidates = get_candidates(ROLE_ALIEN, ROLE_ALIEN) - if(!candidates.len) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_MORPH, role = ROLE_MORPH, pic_source = /mob/living/basic/morph, role_name_text = "morph") + if(!length(candidates)) return NOT_ENOUGH_PLAYERS var/mob/dead/selected = pick_n_take(candidates) diff --git a/code/modules/events/ghost_role/nightmare.dm b/code/modules/events/ghost_role/nightmare.dm index a5f2a772b70a..8df00041de44 100644 --- a/code/modules/events/ghost_role/nightmare.dm +++ b/code/modules/events/ghost_role/nightmare.dm @@ -15,8 +15,15 @@ fakeable = FALSE /datum/round_event/ghost_role/nightmare/spawn_role() - var/list/candidates = get_candidates(ROLE_ALIEN, ROLE_NIGHTMARE) - if(!candidates.len) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + "Do you want to play as a Nightmare?", + role = ROLE_NIGHTMARE, + check_jobban = ROLE_NIGHTMARE, + poll_time = 20 SECONDS, + pic_source = /datum/antagonist/nightmare, + role_name_text = "nightmare" + ) + if(!length(candidates)) return NOT_ENOUGH_PLAYERS var/mob/dead/selected = pick(candidates) diff --git a/code/modules/events/ghost_role/operative.dm b/code/modules/events/ghost_role/operative.dm index 4cf8da639bb5..628901d068cc 100644 --- a/code/modules/events/ghost_role/operative.dm +++ b/code/modules/events/ghost_role/operative.dm @@ -12,8 +12,8 @@ fakeable = FALSE /datum/round_event/ghost_role/operative/spawn_role() - var/list/candidates = get_candidates(ROLE_OPERATIVE, ROLE_LONE_OPERATIVE) - if(!candidates.len) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_OPERATIVE, role = ROLE_LONE_OPERATIVE, pic_source = /obj/machinery/nuclearbomb) + if(!length(candidates)) return NOT_ENOUGH_PLAYERS var/mob/dead/selected = pick_n_take(candidates) diff --git a/code/modules/events/ghost_role/revenant_event.dm b/code/modules/events/ghost_role/revenant_event.dm index 079454cf11bb..5a8d4e20734d 100644 --- a/code/modules/events/ghost_role/revenant_event.dm +++ b/code/modules/events/ghost_role/revenant_event.dm @@ -29,8 +29,8 @@ message_admins("Event attempted to spawn a revenant, but there were only [deadMobs]/[REVENANT_SPAWN_THRESHOLD] dead mobs.") return WAITING_FOR_SOMETHING - var/list/candidates = get_candidates(ROLE_REVENANT, ROLE_REVENANT) - if(!candidates.len) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_REVENANT, role = ROLE_REVENANT, pic_source = /mob/living/basic/revenant) + if(!length(candidates)) return NOT_ENOUGH_PLAYERS var/mob/dead/observer/selected = pick_n_take(candidates) diff --git a/code/modules/events/ghost_role/sentience.dm b/code/modules/events/ghost_role/sentience.dm index 7c58e6e7e928..c39ec0ffcc14 100644 --- a/code/modules/events/ghost_role/sentience.dm +++ b/code/modules/events/ghost_role/sentience.dm @@ -50,7 +50,12 @@ GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list( /datum/round_event/ghost_role/sentience/spawn_role() var/list/mob/dead/observer/candidates - candidates = get_candidates(ROLE_SENTIENCE, ROLE_SENTIENCE) + candidates = SSpolling.poll_ghost_candidates( + "Would you like to be a random animal?", + role = ROLE_SENTIENCE, + pic_source = /obj/item/slimepotion/slime/sentience, + role_name_text = role_name + ) // find our chosen mob to breathe life into // Mobs have to be simple animals, mindless, on station, and NOT holograms. @@ -74,11 +79,11 @@ GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list( if(!potential.len) return WAITING_FOR_SOMETHING - if(!candidates.len) + if(!length(candidates)) return NOT_ENOUGH_PLAYERS var/spawned_animals = 0 - while(spawned_animals < animals && candidates.len && potential.len) + while(spawned_animals < animals && length(candidates) && potential.len) var/mob/living/selected = popleft(potential) var/mob/dead/observer/picked_candidate = pick_n_take(candidates) diff --git a/code/modules/events/ghost_role/sentient_disease.dm b/code/modules/events/ghost_role/sentient_disease.dm index ac445050b4d5..ed2490414604 100644 --- a/code/modules/events/ghost_role/sentient_disease.dm +++ b/code/modules/events/ghost_role/sentient_disease.dm @@ -14,8 +14,8 @@ role_name = "sentient disease" /datum/round_event/ghost_role/sentient_disease/spawn_role() - var/list/candidates = get_candidates(ROLE_ALIEN, ROLE_ALIEN) - if(!candidates.len) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_SENTIENT_DISEASE, role = ROLE_SENTIENT_DISEASE, pic_source = /obj/structure/sign/warning/biohazard, role_name_text = role_name) + if(!length(candidates)) return NOT_ENOUGH_PLAYERS var/mob/dead/observer/selected = pick_n_take(candidates) diff --git a/code/modules/events/ghost_role/slaughter_event.dm b/code/modules/events/ghost_role/slaughter_event.dm index 13ab7d59d546..ca29647ad95a 100644 --- a/code/modules/events/ghost_role/slaughter_event.dm +++ b/code/modules/events/ghost_role/slaughter_event.dm @@ -16,8 +16,8 @@ role_name = "slaughter demon" /datum/round_event/ghost_role/slaughter/spawn_role() - var/list/candidates = get_candidates(ROLE_ALIEN, ROLE_ALIEN) - if(!candidates.len) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_SLAUGHTER_DEMON, role = ROLE_SLAUGHTER_DEMON, pic_source = /mob/living/basic/demon/slaughter, role_name_text = role_name) + if(!length(candidates)) return NOT_ENOUGH_PLAYERS var/mob/dead/selected = pick_n_take(candidates) diff --git a/code/modules/events/ghost_role/space_dragon.dm b/code/modules/events/ghost_role/space_dragon.dm index 1f93e363d788..6c9ac0d61876 100644 --- a/code/modules/events/ghost_role/space_dragon.dm +++ b/code/modules/events/ghost_role/space_dragon.dm @@ -20,9 +20,8 @@ priority_announce("A large organic energy flux has been recorded near [station_name()], please stand by.", "Lifesign Alert") /datum/round_event/ghost_role/space_dragon/spawn_role() - - var/list/candidates = get_candidates(ROLE_SPACE_DRAGON, ROLE_SPACE_DRAGON) - if(!candidates.len) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_SPACE_DRAGON, role = ROLE_SPACE_DRAGON, pic_source = /mob/living/basic/space_dragon) + if(!length(candidates)) return NOT_ENOUGH_PLAYERS var/mob/dead/selected = pick(candidates) diff --git a/code/modules/events/ghost_role/space_ninja.dm b/code/modules/events/ghost_role/space_ninja.dm index 3c4f532bcd7b..86f5e6c7a577 100644 --- a/code/modules/events/ghost_role/space_ninja.dm +++ b/code/modules/events/ghost_role/space_ninja.dm @@ -19,8 +19,8 @@ return MAP_ERROR //selecting a candidate player - var/list/candidates = get_candidates(ROLE_NINJA, ROLE_NINJA) - if(!candidates.len) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_NINJA, role = ROLE_NINJA, pic_source = /obj/item/energy_katana) + if(!length(candidates)) return NOT_ENOUGH_PLAYERS var/mob/dead/selected_candidate = pick(candidates) diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index 3726da4c6504..cad343f7debd 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -84,7 +84,7 @@ priority_announce("Santa is coming to town!", "Unknown Transmission") /datum/round_event/santa/start() - var/list/candidates = poll_ghost_candidates("Santa is coming to town! Do you want to be Santa?", poll_time=150) + var/list/candidates = SSpolling.poll_ghost_candidates("Santa is coming to town! Do you want to be Santa?", poll_time = 15 SECONDS, pic_source = /obj/item/clothing/head/costume/santa, role_name_text = "santa") if(LAZYLEN(candidates)) var/mob/dead/observer/C = pick(candidates) santa = new /mob/living/carbon/human(pick(GLOB.blobstart)) diff --git a/code/modules/events/scrubber_clog.dm b/code/modules/events/scrubber_clog.dm index 195f4e447c14..6a6de8f7fbf4 100644 --- a/code/modules/events/scrubber_clog.dm +++ b/code/modules/events/scrubber_clog.dm @@ -216,5 +216,6 @@ /mob/living/basic/mushroom, /mob/living/simple_animal/hostile/retaliate/goose, //Janitors HATE geese. /mob/living/simple_animal/pet/gondola, + /mob/living/basic/slugcat //Monkestation edit. Let the slugs come out of the pipes! ) return pick(mob_list) diff --git a/code/modules/events/wizard/imposter.dm b/code/modules/events/wizard/imposter.dm index 036785def2f6..2770b1136761 100644 --- a/code/modules/events/wizard/imposter.dm +++ b/code/modules/events/wizard/imposter.dm @@ -13,7 +13,7 @@ if(!ishuman(M.current)) continue var/mob/living/carbon/human/W = M.current - var/list/candidates = poll_ghost_candidates("Would you like to be an imposter wizard?", ROLE_WIZARD) + var/list/candidates = SSpolling.poll_ghost_candidates("Would you like to be an imposter wizard?", check_jobban = ROLE_WIZARD, pic_source = /obj/item/clothing/head/wizard, role_name_text = "imposter wizard") if(!length(candidates)) return //Sad Trombone var/mob/dead/observer/C = pick(candidates) diff --git a/code/modules/events/wizard/rpgtitles.dm b/code/modules/events/wizard/rpgtitles.dm index b2890150c93d..37eae2459f62 100644 --- a/code/modules/events/wizard/rpgtitles.dm +++ b/code/modules/events/wizard/rpgtitles.dm @@ -42,7 +42,7 @@ GLOBAL_DATUM(rpgtitle_controller, /datum/rpgtitle_controller) //we must prepare for the mother of all strings new_crewmember.maptext_height = max(new_crewmember.maptext_height, 32) - new_crewmember.maptext_width = max(new_crewmember.maptext_width, 80) + new_crewmember.maptext_width = max(new_crewmember.maptext_width, 112) new_crewmember.maptext_x = -24 - new_crewmember.base_pixel_x new_crewmember.maptext_y = -32 @@ -90,7 +90,7 @@ GLOBAL_DATUM(rpgtitle_controller, /datum/rpgtitle_controller) maptext_title += "[applicable_biotypes[iteration][1]] " //mother of all strings... - new_crewmember.maptext = "Level [rand(1, 100)] [maptext_title]" + new_crewmember.maptext = MAPTEXT_TINY_UNICODE("Level [rand(1, 100)] [maptext_title]") if(!(job.job_flags & JOB_CREW_MEMBER)) return diff --git a/code/modules/events/wizard/shuffle.dm b/code/modules/events/wizard/shuffle.dm index a41e7d7de322..460fe7b8a2f6 100644 --- a/code/modules/events/wizard/shuffle.dm +++ b/code/modules/events/wizard/shuffle.dm @@ -87,7 +87,7 @@ var/list/mobs_to_swap = list() for(var/mob/living/carbon/human/alive_human in GLOB.alive_mob_list) - if(alive_human.stat != CONSCIOUS || !alive_human.mind || IS_WIZARD(alive_human)) + if(alive_human.stat != CONSCIOUS || isnull(alive_human.mind) || IS_WIZARD(alive_human) || HAS_TRAIT(alive_human, TRAIT_NO_MINDSWAP)) continue //the wizard(s) are spared on this one mobs_to_swap += alive_human diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index 37ad8afec98c..cc9c923ae2a9 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -54,7 +54,7 @@ GLOBAL_LIST_EMPTY(all_wormholes) // So we can pick wormholes to teleport to icon = 'icons/obj/objects.dmi' icon_state = "anom" mech_sized = TRUE - + light_on = FALSE /obj/effect/portal/wormhole/Initialize(mapload, _creator, _lifespan = 0, obj/effect/portal/_linked, automatic_link = FALSE, turf/hard_target_override) . = ..() diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm index e505cac2621f..a946cb780e96 100644 --- a/code/modules/experisci/experiment/experiments.dm +++ b/code/modules/experisci/experiment/experiments.dm @@ -218,8 +218,6 @@ required_atoms = list( /obj/machinery/autolathe = 1, /obj/machinery/rnd/production/circuit_imprinter/department/science = 1, - /obj/machinery/monkey_recycler = 1, - /obj/machinery/processor/slime = 1, /obj/machinery/processor = 2, /obj/machinery/reagentgrinder = 2, /obj/machinery/hydroponics = 2, diff --git a/code/modules/fishing/fish_catalog.dm b/code/modules/fishing/fish_catalog.dm index a49974c9c27b..a0f66c2227d0 100644 --- a/code/modules/fishing/fish_catalog.dm +++ b/code/modules/fishing/fish_catalog.dm @@ -5,9 +5,6 @@ icon_state = "fishbook" starting_content = "Lot of fish stuff" //book wrappers could use cleaning so this is not necessary -/obj/item/book/fish_catalog/on_read(mob/user) - ui_interact(user) - /obj/item/book/fish_catalog/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index 67dd90eb05fa..56e418e03f0a 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -236,8 +236,7 @@ GLOBAL_LIST(fishing_property_cache) for(var/result in final_table) final_table[result] *= rod.multiplicative_fish_bonus(result, src) final_table[result] += rod.additive_fish_bonus(result, src) //Decide on order here so it can be multiplicative - if(result == FISHING_DUD) - else if(ispath(result, /obj/item/fish)) + if(result != FISHING_DUD && ispath(result, /obj/item/fish)) //Modify fish roll chance var/obj/item/fish/caught_fish = result diff --git a/code/modules/food_and_drinks/machinery/coffeemaker.dm b/code/modules/food_and_drinks/machinery/coffeemaker.dm index 7a5ea1a177e1..122b2325b0fd 100644 --- a/code/modules/food_and_drinks/machinery/coffeemaker.dm +++ b/code/modules/food_and_drinks/machinery/coffeemaker.dm @@ -8,7 +8,7 @@ base_icon_state = "coffeemaker" resistance_flags = FIRE_PROOF | ACID_PROOF circuit = /obj/item/circuitboard/machine/coffeemaker - pixel_y = 4 //needed to make it sit nicely on tables + anchored_tabletop_offset = 4 var/obj/item/reagent_containers/cup/coffeepot/coffeepot = null var/brewing = FALSE var/brew_time = 20 SECONDS diff --git a/code/modules/food_and_drinks/machinery/microwave.dm b/code/modules/food_and_drinks/machinery/microwave.dm index 696cc909c6a7..183b45f1ac16 100644 --- a/code/modules/food_and_drinks/machinery/microwave.dm +++ b/code/modules/food_and_drinks/machinery/microwave.dm @@ -26,6 +26,7 @@ pass_flags = PASSTABLE light_color = LIGHT_COLOR_DIM_YELLOW light_power = 3 + anchored_tabletop_offset = 6 var/wire_disabled = FALSE // is its internal wire cut? var/operating = FALSE /// How dirty is it? @@ -53,8 +54,6 @@ set_wires(new /datum/wires/microwave(src)) create_reagents(100) soundloop = new(src, FALSE) - set_on_table() - update_appearance(UPDATE_ICON) /obj/machinery/microwave/Exited(atom/movable/gone, direction) @@ -78,10 +77,6 @@ QDEL_NULL(soundloop) return ..() -/obj/machinery/microwave/set_anchored(anchorvalue) - . = ..() - set_on_table() - /obj/machinery/microwave/RefreshParts() . = ..() efficiency = 0 @@ -292,9 +287,16 @@ balloon_alert(user, "it's too dirty!") return TRUE - if(istype(O, /obj/item/storage/bag/tray)) + if(istype(O, /obj/item/storage)) var/obj/item/storage/T = O var/loaded = 0 + + if(!istype(O, /obj/item/storage/bag/tray)) + // Non-tray dumping requires a do_after + to_chat(user, span_notice("You start dumping out the contents of [O] into [src]...")) + if(!do_after(user, 2 SECONDS, target = T)) + return + for(var/obj/S in T.contents) if(!IS_EDIBLE(S)) continue @@ -518,14 +520,6 @@ open = FALSE update_appearance() -/// Go on top of a table if we're anchored & not varedited -/obj/machinery/microwave/proc/set_on_table() - var/obj/structure/table/counter = locate(/obj/structure/table) in get_turf(src) - if(anchored && counter && !pixel_y) - pixel_y = 6 - else if(!anchored) - pixel_y = initial(pixel_y) - /// Type of microwave that automatically turns it self on erratically. Probably don't use this outside of the holodeck program "Microwave Paradise". /// You could also live your life with a microwave that will continously run in the background of everything while also not having any power draw. I think the former makes more sense. /obj/machinery/microwave/hell diff --git a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm deleted file mode 100644 index fa5418d30305..000000000000 --- a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm +++ /dev/null @@ -1,103 +0,0 @@ -GLOBAL_LIST_EMPTY(monkey_recyclers) - -/obj/machinery/monkey_recycler - name = "monkey recycler" - desc = "A machine used for recycling dead monkeys into monkey cubes." - icon = 'icons/obj/kitchen.dmi' - icon_state = "grinder" - layer = BELOW_OBJ_LAYER - density = TRUE - circuit = /obj/item/circuitboard/machine/monkey_recycler - var/stored_matter = 0 - var/cube_production = 0.2 - var/list/connected = list() //Keeps track of connected xenobio consoles, for deletion in /Destroy() - -/obj/machinery/monkey_recycler/Initialize(mapload) - . = ..() - if (mapload) - GLOB.monkey_recyclers += src - -/obj/machinery/monkey_recycler/Destroy() - GLOB.monkey_recyclers -= src - for(var/thing in connected) - var/obj/machinery/computer/camera_advanced/xenobio/console = thing - console.connected_recycler = null - connected.Cut() - return ..() - -/obj/machinery/monkey_recycler/RefreshParts() //Ranges from 0.2 to 0.8 per monkey recycled - . = ..() - cube_production = 0 - for(var/datum/stock_part/manipulator/manipulator in component_parts) - cube_production += manipulator.tier * 0.1 - for(var/datum/stock_part/matter_bin/matter_bin in component_parts) - cube_production += matter_bin.tier * 0.1 - -/obj/machinery/monkey_recycler/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += span_notice("The status display reads: Producing [cube_production] cubes for every monkey inserted.") - -/obj/machinery/monkey_recycler/wrench_act(mob/living/user, obj/item/tool) - . = ..() - if(default_unfasten_wrench(user, tool)) - power_change() - return TOOL_ACT_TOOLTYPE_SUCCESS - -/obj/machinery/monkey_recycler/attackby(obj/item/O, mob/user, params) - if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", O)) - return - - if(default_pry_open(O, close_after_pry = TRUE)) - return - - if(default_deconstruction_crowbar(O)) - return - - if(machine_stat) //NOPOWER etc - return - else - return ..() - -/obj/machinery/monkey_recycler/MouseDrop_T(mob/living/target, mob/living/user) - if(!istype(target)) - return - if(ismonkey(target)) - stuff_monkey_in(target, user) - -/obj/machinery/monkey_recycler/proc/stuff_monkey_in(mob/living/carbon/human/target, mob/living/user) - if(!istype(target)) - return - if(target.stat == CONSCIOUS) - to_chat(user, span_warning("The monkey is struggling far too much to put it in the recycler.")) - return - if(target.buckled || target.has_buckled_mobs()) - to_chat(user, span_warning("The monkey is attached to something.")) - return - qdel(target) - to_chat(user, span_notice("You stuff the monkey into the machine.")) - playsound(src.loc, 'sound/machines/juicer.ogg', 50, TRUE) - var/offset = prob(50) ? -2 : 2 - animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking - use_power(active_power_usage) - stored_matter += cube_production - addtimer(VARSET_CALLBACK(src, pixel_x, base_pixel_x)) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), user, span_notice("The machine now has [stored_matter] monkey\s worth of material stored."))) - -/obj/machinery/monkey_recycler/interact(mob/user) - if(stored_matter >= 1) - to_chat(user, span_notice("The machine hisses loudly as it condenses the ground monkey meat. After a moment, it dispenses a brand new monkey cube.")) - playsound(src.loc, 'sound/machines/hiss.ogg', 50, TRUE) - for(var/i in 1 to FLOOR(stored_matter, 1)) - new /obj/item/food/monkeycube(src.loc) - stored_matter-- - to_chat(user, span_notice("The machine's display flashes that it has [stored_matter] monkeys worth of material left.")) - else - to_chat(user, span_danger("The machine needs at least 1 monkey worth of material to produce a monkey cube. It currently has [stored_matter].")) - -/obj/machinery/monkey_recycler/multitool_act(mob/living/user, obj/item/multitool/I) - . = ..() - if(istype(I)) - to_chat(user, span_notice("You log [src] in the multitool's buffer.")) - I.buffer = src - return TRUE diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm index 7132bb26cbb1..7ff1e07db07d 100644 --- a/code/modules/food_and_drinks/machinery/processor.dm +++ b/code/modules/food_and_drinks/machinery/processor.dm @@ -7,7 +7,9 @@ icon_state = "processor1" layer = BELOW_OBJ_LAYER density = TRUE + pass_flags = PASSTABLE circuit = /obj/item/circuitboard/machine/processor + anchored_tabletop_offset = 8 ///Is the processor blending items at the moment var/processing = FALSE ///The speed at which the processor processes items @@ -183,59 +185,4 @@ user.forceMove(drop_location()) user.visible_message(span_notice("[user] crawls free of the processor!")) -/obj/machinery/processor/slime - name = "slime processor" - desc = "An industrial grinder with a sticker saying appropriated for science department. Keep hands clear of intake area while operating." - circuit = /obj/item/circuitboard/machine/processor/slime - -/obj/machinery/processor/slime/adjust_item_drop_location(atom/movable/atom_to_drop) - var/static/list/slimecores = subtypesof(/obj/item/slime_extract) - var/i = 0 - if(!(i = slimecores.Find(atom_to_drop.type))) // If the item is not found - return - if (i <= 16) // If in the first 12 slots - atom_to_drop.pixel_x = atom_to_drop.base_pixel_x - 12 + ((i%4)*8) - atom_to_drop.pixel_y = atom_to_drop.base_pixel_y - 12 + (round(i/4)*8) - return i - var/ii = i - 16 - atom_to_drop.pixel_x = atom_to_drop.base_pixel_x - 8 + ((ii%3)*8) - atom_to_drop.pixel_y = atom_to_drop.base_pixel_y - 8 + (round(ii/3)*8) - return i - -/obj/machinery/processor/slime/process() - if(processing) - return - var/mob/living/simple_animal/slime/picked_slime - for(var/mob/living/simple_animal/slime/slime in range(1,src)) - if(!CanReach(slime)) //don't take slimes behind glass panes or somesuch; also makes it ignore slimes inside the processor - continue - if(slime.stat) - picked_slime = slime - break - if(!picked_slime) - return - var/datum/food_processor_process/recipe = PROCESSOR_SELECT_RECIPE(picked_slime) - if (!recipe) - return - - visible_message(span_notice("[picked_slime] is sucked into [src].")) - LAZYADD(processor_contents, picked_slime) - picked_slime.forceMove(src) - -/obj/machinery/processor/slime/process_food(datum/food_processor_process/recipe, atom/movable/what) - var/mob/living/simple_animal/slime/processed_slime = what - if (!istype(processed_slime)) - return - - if(processed_slime.stat != DEAD) - processed_slime.forceMove(drop_location()) - processed_slime.balloon_alert_to_viewers("crawls free") - return - var/core_count = processed_slime.cores - for(var/i in 1 to (core_count+rating_amount-1)) - var/atom/movable/item = new processed_slime.coretype(drop_location()) - adjust_item_drop_location(item) - SSblackbox.record_feedback("tally", "slime_core_harvested", 1, processed_slime.colour) - return ..() - #undef PROCESSOR_SELECT_RECIPE diff --git a/code/modules/food_and_drinks/machinery/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm index 91149a415920..3001a97f8152 100644 --- a/code/modules/food_and_drinks/machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/machinery/smartfridge.dm @@ -399,12 +399,10 @@ /obj/machinery/smartfridge/extract/accept_check(obj/item/O) if(istype(O, /obj/item/slime_extract)) return TRUE - if(istype(O, /obj/item/slime_scanner)) - return TRUE return FALSE /obj/machinery/smartfridge/extract/preloaded - initial_contents = list(/obj/item/slime_scanner = 2) + initial_contents = list(/obj/item/slime_extract/grey = 2) // ------------------------------------- // Cytology Petri Dish Smartfridge diff --git a/code/modules/food_and_drinks/machinery/stove.dm b/code/modules/food_and_drinks/machinery/stove.dm index db5e0bb63c8b..c6e1d9dfbebe 100644 --- a/code/modules/food_and_drinks/machinery/stove.dm +++ b/code/modules/food_and_drinks/machinery/stove.dm @@ -178,11 +178,18 @@ // Clearing reagents Will do this for us already, but if we have no reagents this is a failsafe dump_ingredients() -/obj/item/reagent_containers/cup/soup_pot/proc/dump_ingredients(atom/drop_loc = drop_location()) +/** + * Dumps all inside ingredients to a spot + * + * * drop_loc - Where to drop the ingredients, defaults to drop loc + * * x_offset - How much pixel X offset to give every ingredient, if not set will be random + * * y_offset - How much pixel Y offset to give every ingredient, if not set will be random + */ +/obj/item/reagent_containers/cup/soup_pot/proc/dump_ingredients(atom/drop_loc = drop_location(), x_offset, y_offset) for(var/obj/item/ingredient as anything in added_ingredients) ingredient.forceMove(drop_loc) - ingredient.pixel_x += rand(-4, 4) - ingredient.pixel_y += rand(-4, 4) + ingredient.pixel_x += (isnum(x_offset) ? x_offset : rand(-4, 4)) + ingredient.pixel_y += (isnum(y_offset) ? x_offset : rand(-4, 4)) ingredient.SpinAnimation(loops = 1) update_appearance(UPDATE_OVERLAYS) diff --git a/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm b/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm index acbabbaa54e6..116982d597c2 100644 --- a/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm +++ b/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm @@ -168,6 +168,10 @@ results = list(/datum/reagent/consumable/ethanol/whiskeysoda = 3) required_reagents = list(/datum/reagent/consumable/ethanol/whiskey = 2, /datum/reagent/consumable/sodawater = 1) +/datum/chemical_reaction/drink/wellcheers + results = list(/datum/reagent/consumable/wellcheers = 5) + required_reagents = list(/datum/reagent/consumable/berryjuice = 1, /datum/reagent/consumable/watermelonjuice = 1, /datum/reagent/consumable/sodawater = 1, /datum/reagent/consumable/salt = 1, /datum/reagent/consumable/ethanol/absinthe = 1) + /datum/chemical_reaction/drink/black_russian results = list(/datum/reagent/consumable/ethanol/black_russian = 5) required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 3, /datum/reagent/consumable/ethanol/kahlua = 2) @@ -582,3 +586,78 @@ mix_message = "Arcs of lightning fly from the mixture." mix_sound = 'sound/weapons/zapbang.ogg' +/datum/chemical_reaction/drink/yuyakita + results = list(/datum/reagent/consumable/ethanol/yuyakita = 4) + required_reagents = list(/datum/reagent/consumable/ethanol/tequila = 2, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/ethanol/yuyake = 1) + +/datum/chemical_reaction/drink/saibasan + results = list(/datum/reagent/consumable/ethanol/saibasan = 10) + required_reagents = list(/datum/reagent/consumable/ethanol/shochu = 2, /datum/reagent/consumable/ethanol/yuyake = 2, /datum/reagent/consumable/triple_citrus = 3, /datum/reagent/consumable/cherryjelly = 3) + +/datum/chemical_reaction/drink/banzai_ti + results = list(/datum/reagent/consumable/ethanol/banzai_ti = 10) + required_reagents = list(/datum/reagent/consumable/ethanol/yuyake = 1, /datum/reagent/consumable/ethanol/triple_sec = 1, /datum/reagent/consumable/ethanol/gin = 1, /datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/consumable/ethanol/tequila = 1, /datum/reagent/consumable/ethanol/vodka = 1, /datum/reagent/consumable/triple_citrus = 2, /datum/reagent/consumable/sodawater = 2) + +/datum/chemical_reaction/drink/sanraizusoda + results = list(/datum/reagent/consumable/ethanol/sanraizusoda = 5) + required_reagents = list(/datum/reagent/consumable/ethanol/yuyake = 1, /datum/reagent/consumable/sodawater = 2, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/cream = 1) + +/datum/chemical_reaction/drink/kumicho + results = list(/datum/reagent/consumable/ethanol/kumicho = 4) + required_reagents = list(/datum/reagent/consumable/ethanol/godfather = 2, /datum/reagent/consumable/ethanol/shochu = 1, /datum/reagent/consumable/ethanol/bitters = 1) + +/datum/chemical_reaction/drink/red_planet + results = list(/datum/reagent/consumable/ethanol/red_planet = 8) + required_reagents = list(/datum/reagent/consumable/ethanol/shochu = 2, /datum/reagent/consumable/ethanol/triple_sec = 2, /datum/reagent/consumable/ethanol/vermouth = 2, /datum/reagent/consumable/grenadine = 1, /datum/reagent/consumable/ethanol/bitters = 1) + +/datum/chemical_reaction/drink/amaterasu + results = list(/datum/reagent/consumable/ethanol/amaterasu = 10) + required_reagents = list(/datum/reagent/consumable/ethanol/shochu = 1, /datum/reagent/consumable/ethanol/vodka = 1, /datum/reagent/consumable/grenadine = 1, /datum/reagent/consumable/berryjuice = 2, /datum/reagent/consumable/sodawater = 5) + +/datum/chemical_reaction/drink/nekomimosa + results = list(/datum/reagent/consumable/ethanol/nekomimosa = 5) + required_reagents = list(/datum/reagent/consumable/ethanol/yuyake = 2, /datum/reagent/consumable/watermelonjuice = 2, /datum/reagent/consumable/ethanol/champagne = 1) + +/datum/chemical_reaction/drink/sentai_quencha + results = list(/datum/reagent/consumable/ethanol/sentai_quencha = 5) + required_reagents = list(/datum/reagent/consumable/ethanol/shochu = 1, /datum/reagent/consumable/ethanol/curacao = 1, /datum/reagent/consumable/triple_citrus = 1, /datum/reagent/consumable/melon_soda = 2) + +/datum/chemical_reaction/drink/bosozoku + results = list(/datum/reagent/consumable/ethanol/bosozoku = 2) + required_reagents = list(/datum/reagent/consumable/ethanol/rice_beer = 1, /datum/reagent/consumable/lemonade = 1) + +/datum/chemical_reaction/drink/ersatzche + results = list(/datum/reagent/consumable/ethanol/ersatzche = 10) + required_reagents = list(/datum/reagent/consumable/ethanol/rice_beer = 5, /datum/reagent/consumable/pineapplejuice = 3, /datum/reagent/consumable/capsaicin = 1, /datum/reagent/consumable/sugar = 1) + +/datum/chemical_reaction/drink/red_city_am + results = list(/datum/reagent/consumable/ethanol/red_city_am = 10) + required_reagents = list(/datum/reagent/consumable/ethanol/rice_beer = 5, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/red_bay = 1, /datum/reagent/consumable/soysauce = 1, /datum/reagent/consumable/tomatojuice = 2) + +/datum/chemical_reaction/drink/kings_ransom + results = list(/datum/reagent/consumable/ethanol/kings_ransom = 10) + required_reagents = list(/datum/reagent/consumable/ethanol/rice_beer = 5, /datum/reagent/consumable/ethanol/gin = 2, /datum/reagent/consumable/berryjuice = 2, /datum/reagent/consumable/ethanol/bitters = 1) + +/datum/chemical_reaction/drink/four_bit + results = list(/datum/reagent/consumable/ethanol/four_bit = 5) + required_reagents = list(/datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/hakka_mate = 2, /datum/reagent/consumable/limejuice = 1) + +/datum/chemical_reaction/drink/white_hawaiian + results = list(/datum/reagent/consumable/ethanol/white_hawaiian = 4) + required_reagents = list(/datum/reagent/consumable/ethanol/kahlua = 1, /datum/reagent/consumable/ethanol/coconut_rum = 1, /datum/reagent/consumable/coconut_milk = 2) + +/datum/chemical_reaction/drink/maui_sunrise + results = list(/datum/reagent/consumable/ethanol/maui_sunrise = 10) + required_reagents = list(/datum/reagent/consumable/ethanol/coconut_rum = 2, /datum/reagent/consumable/pineapplejuice = 2, /datum/reagent/consumable/ethanol/yuyake = 1, /datum/reagent/consumable/triple_citrus = 1, /datum/reagent/consumable/lemon_lime = 4) + +/datum/chemical_reaction/drink/imperial_mai_tai + results = list(/datum/reagent/consumable/ethanol/imperial_mai_tai = 5) + required_reagents = list(/datum/reagent/consumable/ethanol/navy_rum = 1, /datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/consumable/ethanol/triple_sec = 1, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/korta_nectar = 1) + +/datum/chemical_reaction/drink/konococo_rumtini + results = list(/datum/reagent/consumable/ethanol/konococo_rumtini = 10) + required_reagents = list(/datum/reagent/consumable/ethanol/coconut_rum = 2, /datum/reagent/consumable/ethanol/kahlua = 3, /datum/reagent/consumable/coffee = 3, /datum/reagent/consumable/sugar = 2) + +/datum/chemical_reaction/drink/blue_hawaiian + results = list(/datum/reagent/consumable/ethanol/blue_hawaiian = 5) + required_reagents = list(/datum/reagent/consumable/ethanol/coconut_rum = 2, /datum/reagent/consumable/pineapplejuice = 1, /datum/reagent/consumable/lemonjuice = 1, /datum/reagent/consumable/ethanol/curacao = 1) diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index dd32b7d9f80a..714ca78a76a7 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -258,4 +258,17 @@ /datum/chemical_reaction/food/vinegar results = list(/datum/reagent/consumable/vinegar = 5) required_reagents = list(/datum/reagent/consumable/ethanol/wine = 1, /datum/reagent/water = 1, /datum/reagent/consumable/sugar = 1) - + //reaction_flags = REACTION_INSTANT + +/datum/chemical_reaction/food/grounding_neutralise + results = list(/datum/reagent/consumable/salt = 2) + required_reagents = list(/datum/reagent/consumable/liquidelectricity = 2, /datum/reagent/consumable/grounding_solution = 1) //Monkestation edit: no enriched + mix_message = "The mixture lets off a sharp snap as the electricity discharges." + mix_sound = 'sound/weapons/taser.ogg' + //reaction_flags = REACTION_INSTANT + +/datum/chemical_reaction/food/martian_batter + results = list(/datum/reagent/consumable/martian_batter = 2) + required_reagents = list(/datum/reagent/consumable/flour = 1, /datum/reagent/consumable/nutriment/soup/dashi = 1) + mix_message = "A smooth batter forms." + //reaction_flags = REACTION_INSTANT diff --git a/code/modules/food_and_drinks/recipes/processor_recipes.dm b/code/modules/food_and_drinks/recipes/processor_recipes.dm index 67339575703a..469909030d2c 100644 --- a/code/modules/food_and_drinks/recipes/processor_recipes.dm +++ b/code/modules/food_and_drinks/recipes/processor_recipes.dm @@ -128,11 +128,6 @@ input = /obj/item/food/grown/parsnip output = /obj/item/food/roastparsnip -/datum/food_processor_process/mob/slime - input = /mob/living/simple_animal/slime - output = null - required_machine = /obj/machinery/processor/slime - /datum/food_processor_process/towercap input = /obj/item/grown/log output = /obj/item/popsicle_stick diff --git a/code/modules/food_and_drinks/recipes/soup_guide.dm b/code/modules/food_and_drinks/recipes/soup_guide.dm index 4a1e0a58132e..a2bc0faccdba 100644 --- a/code/modules/food_and_drinks/recipes/soup_guide.dm +++ b/code/modules/food_and_drinks/recipes/soup_guide.dm @@ -2,10 +2,27 @@ machinery = list(/obj/machinery/stove) category = CAT_SOUP non_craftable = TRUE - + /// What contained is this reaction expected to be served in? + /// Used to determine the icon to display in the crafting UI. var/expected_container = /obj/item/reagent_containers/cup/bowl +/datum/crafting_recipe/food/reaction/soup/New() + // What are ya using this path for if it's not a food reaction? + if(!ispath(reaction, /datum/chemical_reaction/food)) + return ..() + + var/datum/chemical_reaction/food/soup_reaction = reaction + // If the reaction has a solid food item result, it is prioritized over reagent results + if(ispath(initial(soup_reaction.resulting_food_path), /obj/item/food)) + result = initial(soup_reaction.resulting_food_path) + result_amount = 1 + + return ..() + /datum/crafting_recipe/food/reaction/soup/crafting_ui_data() + if(ispath(result, /obj/item/food)) + return ..() + var/list/data = list() var/datum/glass_style/has_foodtype/soup_style = GLOB.glass_style_singletons[expected_container][result] @@ -20,11 +37,11 @@ if(!istype(chemical_reaction)) return for(var/obj/item/ingredienttype as anything in chemical_reaction.required_ingredients) - reqs[ingredienttype] = chemical_reaction.required_ingredients[ingredienttype] + LAZYSET(reqs, ingredienttype, chemical_reaction.required_ingredients[ingredienttype]) if(ispath(result, /datum/reagent/consumable)) var/datum/reagent/consumable/soup_result = result - total_nutriment_factor = initial(soup_result.nutriment_factor) * result_amount + total_nutriment_factor += initial(soup_result.nutriment_factor) * result_amount /datum/crafting_recipe/food/reaction/soup/meatball_soup reaction = /datum/chemical_reaction/food/soup/meatballsoup diff --git a/code/modules/food_and_drinks/recipes/soup_mixtures.dm b/code/modules/food_and_drinks/recipes/soup_mixtures.dm index e4912ebfa0ad..186d144a0771 100644 --- a/code/modules/food_and_drinks/recipes/soup_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/soup_mixtures.dm @@ -91,6 +91,12 @@ if(!length(required_ingredients)) return + // This only happens if we're being instant reacted so let's just skip to what we really want + if(isnull(reaction)) + testing("Soup reaction of type [type] instant reacted, cleaning up.") + clean_up(holder) + return + if(isnull(total_ingredient_max)) total_ingredient_max = 0 // We only need to calculate this once, effectively static per-type @@ -164,9 +170,21 @@ var/obj/item/reagent_containers/cup/soup_pot/pot = holder.my_atom if(!istype(pot)) CRASH("[pot ? "Non-pot atom" : "Null pot"]) made it to the end of the [type] reaction chain.") - reaction.data["ingredients"] = null testing("Soup reaction finished with a total react volume of [react_vol] and [length(pot.added_ingredients)] ingredients. Cleaning up.") + clean_up(holder, reaction, react_vol) + +/** + * Cleans up the ingredients and adds whatever leftover reagents to the mixture + * + * * holder: The sou ppot + * * reaction: The reaction being cleaned up, note this CAN be null if being instant reacted + * * react_vol: How much soup was produced + */ +/datum/chemical_reaction/food/soup/proc/clean_up(datum/reagents/holder, datum/equilibrium/reaction, react_vol) + var/obj/item/reagent_containers/cup/soup_pot/pot = holder.my_atom + + reaction?.data["ingredients"] = null if(length(outputted_ingredients)) var/repeating_amount = 0 @@ -199,11 +217,28 @@ if (!Nonsouprecipe) //monkeedit ingredient.AddElement(/datum/element/fried_item, 30) - //LAZYNULL(pot.added_ingredients) + // Spawning physical food results + if(resulting_food_path) + var/obj/item/created = new resulting_food_path(get_turf(pot)) + created.pixel_y += 8 + + // Anything left in the ingredient list will get dumped out + pot.dump_ingredients(get_turf(pot), y_offset = 8) // Blackbox log the chemical reaction used, to account for soup reaction that don't produce typical results BLACKBOX_LOG_FOOD_MADE(type) +/** + * Transfers reagents from the passed reagent to the soup pot, as a "result" + * + * Also handles deleting a portion of nutriment reagents present, pseudo-converting it into soup reagent + * + * * ingredient: The ingredient to transfer reagents from + * * holder: The reagent holder of the soup pot the reaction is taking place in + * * amount: The amount of reagents to transfer, if null will transfer all reagents + */ /datum/chemical_reaction/food/soup/proc/transfer_ingredient_reagents(obj/item/ingredient, datum/reagents/holder, amount) + if(ingredient_reagent_multiplier <= 0) + return var/datum/reagents/ingredient_pool = ingredient.reagents // Some ingredients are purely flavor (no pun intended) and will have reagents if(isnull(ingredient_pool) || ingredient_pool.total_volume <= 0) @@ -219,6 +254,7 @@ // The other half of the nutriment, and the rest of the reagents, will get put directly into the pot ingredient_pool.trans_to(holder, amount, ingredient_reagent_multiplier, no_react = TRUE) +/// Called whenever the soup pot overfills with reagent. /datum/chemical_reaction/food/soup/proc/boil_over(datum/reagents/holder) var/obj/item/reagent_containers/cup/soup_pot/pot = holder.my_atom var/turf/below_pot = get_turf(pot) @@ -1738,3 +1774,408 @@ /datum/reagent/consumable/sugar = 8, ) percentage_of_nutriment_converted = 0.1 + +// Martian Food +// Boiled Noodles +/datum/chemical_reaction/food/soup/boilednoodles + required_reagents = list( + /datum/reagent/consumable/salt = 2 + ) + required_ingredients = list( + /obj/item/food/spaghetti/rawnoodles = 1 + ) + required_catalysts = list( + /datum/reagent/water/salt = 10, + ) + resulting_food_path = /obj/item/food/spaghetti/boilednoodles + ingredient_reagent_multiplier = 0 + +// Dashi Broth +/datum/reagent/consumable/nutriment/soup/dashi + name = "Dashi" + description = "Made with kombu and katsuobushi, this mother stock forms the basis for a large number of Japanese dishes." + data = list("umami" = 1) + color = "#D49D26" + +/datum/glass_style/has_foodtype/soup/dashi + required_drink_type = /datum/reagent/consumable/nutriment/soup/dashi + name = "dashi" + drink_type = SEAFOOD + +/datum/chemical_reaction/food/soup/dashi + required_reagents = list( + /datum/reagent/consumable/dashi_concentrate = 5, + /datum/reagent/water = 40, + ) + results = list( + /datum/reagent/consumable/nutriment/soup/dashi = 40, + ) + +// Teriyaki Sauce +/datum/reagent/consumable/nutriment/soup/teriyaki + name = "Teriyaki Sauce" + description = "A Japanese sauce that's heavy on umami." + data = list("umami" = 1) + color = "#3F0D02" + +/datum/glass_style/has_foodtype/soup/teriyaki + required_drink_type = /datum/reagent/consumable/nutriment/soup/teriyaki + name = "teriyaki sauce" + drink_type = VEGETABLES + +/datum/chemical_reaction/food/soup/teriyaki + required_reagents = list( + /datum/reagent/consumable/soysauce = 10, + /datum/reagent/consumable/ethanol/sake = 10, + /datum/reagent/consumable/honey = 5, + ) + results = list( + /datum/reagent/consumable/nutriment/soup/teriyaki = 20, + ) + +// Curry Sauce +/datum/reagent/consumable/nutriment/soup/curry_sauce + name = "Curry Sauce" + description = "A basic curry sauce that goes well on a wide range of foods." + data = list("curry" = 1) + color = "#F6C800" + +/datum/glass_style/has_foodtype/soup/curry_sauce + required_drink_type = /datum/reagent/consumable/nutriment/soup/curry_sauce + name = "curry sauce" + drink_type = VEGETABLES + +/datum/chemical_reaction/food/soup/curry_sauce + required_reagents = list( + /datum/reagent/water = 30, + /datum/reagent/consumable/curry_powder = 10, + /datum/reagent/consumable/soysauce = 5, + /datum/reagent/consumable/corn_starch = 5, + ) + results = list( + /datum/reagent/consumable/nutriment/soup/curry_sauce = 40, + ) + +// Shoyu Ramen +/datum/reagent/consumable/nutriment/soup/shoyu_ramen + name = "Shōyu Ramen" + description = "A soy-sauce based ramen, with noodles, fishcake, barbecued meat and a boiled egg." + data = list("egg" = 1, "fish" = 1, "noodles" = 1, "meat" = 1, "broth" = 1) + color = "#442621" + +/datum/glass_style/has_foodtype/soup/shoyu_ramen + required_drink_type = /datum/reagent/consumable/nutriment/soup/shoyu_ramen + name = "shōyu ramen" + icon = 'icons/obj/food/martian.dmi' + icon_state = "shoyu_ramen" + drink_type = MEAT | GRAIN | VEGETABLES | SEAFOOD + +/datum/chemical_reaction/food/soup/shoyu_ramen + required_reagents = list( + /datum/reagent/consumable/nutriment/soup/dashi = 20, + /datum/reagent/consumable/nutriment/soup/teriyaki = 15, + ) + required_ingredients = list( + /obj/item/food/spaghetti/boilednoodles = 1, + /obj/item/food/kamaboko_slice = 1, + /obj/item/food/meat/cutlet = 1, + /obj/item/food/boiledegg = 1, + ) + results = list( + /datum/reagent/consumable/nutriment/soup/shoyu_ramen = 30, + /datum/reagent/consumable/nutriment/vitamin = 8, + /datum/reagent/consumable/nutriment/protein = 8, + ) + percentage_of_nutriment_converted = 0.2 + +// Gyuramen +/datum/reagent/consumable/nutriment/soup/gyuramen + name = "Gyuramen Miy Käzu" + description = "A rich beef and onion ramen with cheese- blending several cultural influences seemlessly into one tasty dish." + data = list("beef broth" = 1, "onion" = 1, "cheese" = 1) + color = "#442621" + +/datum/glass_style/has_foodtype/soup/gyuramen + required_drink_type = /datum/reagent/consumable/nutriment/soup/gyuramen + name = "gyuramen miy käzu" + icon = 'icons/obj/food/martian.dmi' + icon_state = "gyuramen" + drink_type = MEAT | GRAIN | DAIRY | VEGETABLES + +/datum/chemical_reaction/food/soup/gyuramen + required_reagents = list( + /datum/reagent/consumable/nutriment/soup/dashi = 20, + /datum/reagent/consumable/soysauce = 5, + ) + required_ingredients = list( + /obj/item/food/spaghetti/boilednoodles = 1, + /obj/item/food/cheese/wedge = 1, + /obj/item/food/onion_slice = 2, + /obj/item/food/meat/cutlet = 1, + ) + results = list( + /datum/reagent/consumable/nutriment/soup/gyuramen = 30, + /datum/reagent/consumable/nutriment/vitamin = 2, + /datum/reagent/consumable/nutriment/protein = 10, + ) + percentage_of_nutriment_converted = 0.15 + +// New Osaka Sunrise +/datum/reagent/consumable/nutriment/soup/new_osaka_sunrise + name = "New Osaka Sunrise Soup" + description = "A bright, flavourful miso soup with tofu that commonly forms part of a traditional Martian breakfast, at least in the capital." + data = list("miso" = 1, "tofu" = 1, "onion" = 1, "eggplant" = 1) + color = "#EAB26E" + +/datum/glass_style/has_foodtype/soup/new_osaka_sunrise + required_drink_type = /datum/reagent/consumable/nutriment/soup/new_osaka_sunrise + name = "\improper New Osaka Sunrise soup" + icon = 'icons/obj/food/martian.dmi' + icon_state = "new_osaka_sunrise" + drink_type = MEAT | GRAIN | DAIRY | VEGETABLES + +/datum/chemical_reaction/food/soup/new_osaka_sunrise + required_reagents = list( + /datum/reagent/consumable/nutriment/soup/miso = 15, + ) + required_ingredients = list( + /obj/item/food/grown/herbs = 1, + /obj/item/food/grown/eggplant = 1, + /obj/item/food/onion_slice = 1, + /obj/item/food/tofu = 1, + ) + results = list( + /datum/reagent/consumable/nutriment/soup/new_osaka_sunrise = 30, + /datum/reagent/consumable/nutriment/vitamin = 8, + /datum/reagent/consumable/nutriment/protein = 2, + ) + percentage_of_nutriment_converted = 0.15 + +// Satsuma Black +/datum/reagent/consumable/nutriment/soup/satsuma_black + name = "Satsuma Black Soup" + description = "A rich, heavy seafood and noodle soup from Mars, employing squid ink to give a strong taste of the sea." + data = list("seafood" = 1, "tofu" = 1, "noodles" = 1) + color = "#171221" + +/datum/glass_style/has_foodtype/soup/satsuma_black + required_drink_type = /datum/reagent/consumable/nutriment/soup/satsuma_black + name = "\improper Satsuma Black soup" + icon = 'icons/obj/food/martian.dmi' + icon_state = "satsuma_black" + drink_type = SEAFOOD | GRAIN | VEGETABLES + +/datum/chemical_reaction/food/soup/satsuma_black + required_reagents = list( + /datum/reagent/consumable/nutriment/soup/dashi = 20, + ) + required_ingredients = list( + /obj/item/food/spaghetti/boilednoodles = 1, + /obj/item/food/seaweedsheet = 1, + /obj/item/food/tofu = 1, + /obj/item/food/canned/squid_ink = 1, + ) + results = list( + /datum/reagent/consumable/nutriment/soup/satsuma_black = 30, + /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/nutriment/protein = 6, + ) + percentage_of_nutriment_converted = 0.15 + +// Dragon Style +/datum/reagent/consumable/nutriment/soup/dragon_ramen + name = "Dragon Style Ramen" + description = "For the ramen fan who hates their tastebuds and digestive tract. Traditionally made with seven different chilis, although after two or so the point sorta gets lost." + data = list("meat" = 1, "liquid hot magma" = 1, "noodles" = 1) + color = "#980F00" + +/datum/glass_style/has_foodtype/soup/dragon_ramen + required_drink_type = /datum/reagent/consumable/nutriment/soup/dragon_ramen + name = "\improper Dragon Style ramen" + icon = 'icons/obj/food/martian.dmi' + icon_state = "dragon_ramen" + drink_type = SEAFOOD | GRAIN | VEGETABLES + +/datum/chemical_reaction/food/soup/dragon_ramen + required_reagents = list( + /datum/reagent/consumable/nutriment/soup/dashi = 20, + /datum/reagent/consumable/nutriment/soup/teriyaki = 10, + /datum/reagent/consumable/red_bay = 5, + ) + required_ingredients = list( + /obj/item/food/spaghetti/boilednoodles = 1, + /obj/item/food/grown/ghost_chili = 1, + /obj/item/food/grown/chili = 1, + /obj/item/food/kamaboko_slice = 1, + /obj/item/food/boiledegg = 1, + ) + results = list( + /datum/reagent/consumable/nutriment/soup/dragon_ramen = 30, + /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/nutriment/protein = 6, + ) + ingredient_reagent_multiplier = 0.3 //reduces the impact of the chilis to manageable levels + +// Hong Kong Borscht +/datum/reagent/consumable/nutriment/soup/hong_kong_borscht + name = "Hong Kong Borscht" + description = "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." + data = list("tomato" = 1, "meat" = 1, "cabbage" = 1) + color = "#CA4810" + +/datum/glass_style/has_foodtype/soup/hong_kong_borscht + required_drink_type = /datum/reagent/consumable/nutriment/soup/hong_kong_borscht + name = "\improper Hong Kong borscht" + icon = 'icons/obj/food/martian.dmi' + icon_state = "hong_kong_borscht" + drink_type = MEAT | VEGETABLES + +/datum/chemical_reaction/food/soup/hong_kong_borscht + required_reagents = list( + /datum/reagent/water = 50, + /datum/reagent/consumable/soysauce = 5, + ) + required_ingredients = list( + /obj/item/food/grown/tomato = 1, + /obj/item/food/grown/cabbage = 1, + /obj/item/food/grown/onion = 1, + /obj/item/food/grown/carrot = 1, + /obj/item/food/meat/cutlet = 1, + ) + results = list( + /datum/reagent/consumable/nutriment/soup/hong_kong_borscht = 30, + /datum/reagent/consumable/nutriment/vitamin = 8, + /datum/reagent/consumable/nutriment/protein = 2, + ) + percentage_of_nutriment_converted = 0.1 + +// Huotui Tong Fen +/datum/reagent/consumable/nutriment/soup/hong_kong_macaroni + name = "Hong Kong Macaroni Soup" + description = "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." + data = list("cream" = 1, "chicken" = 1, "pasta" = 1, "ham" = 1) + color = "#FFFAB5" + +/datum/glass_style/has_foodtype/soup/hong_kong_macaroni + required_drink_type = /datum/reagent/consumable/nutriment/soup/hong_kong_macaroni + name = "\improper Hong Kong macaroni soup" + icon = 'icons/obj/food/martian.dmi' + icon_state = "hong_kong_macaroni" + drink_type = MEAT | VEGETABLES + +/datum/chemical_reaction/food/soup/hong_kong_macaroni + required_reagents = list( + /datum/reagent/water = 30, + /datum/reagent/consumable/cream = 10, + ) + required_ingredients = list( + /obj/item/food/spaghetti/boiledspaghetti = 1, + /obj/item/food/meat/cutlet/chicken = 1, + /obj/item/food/meat/bacon = 1, + ) + results = list( + /datum/reagent/consumable/nutriment/soup/hong_kong_macaroni = 30, + /datum/reagent/consumable/nutriment/protein = 6, + ) + percentage_of_nutriment_converted = 0.2 + +// Fox's Prize Soup +/datum/reagent/consumable/nutriment/soup/foxs_prize_soup + name = "Fox's Prize Soup" + description = "Originally based on the Chinese classic of egg-drop soup, fox's prize soup iterated on the concept via the addition of aburaage and dashi, making a dish that would truly appeal to any hungry fox." + data = list("egg" = 1, "chicken" = 1, "fried tofu" = 1, "umami broth" = 1) + color = "#E9B200" + +/datum/glass_style/has_foodtype/soup/foxs_prize_soup + required_drink_type = /datum/reagent/consumable/nutriment/soup/foxs_prize_soup + name = "fox's prize soup" + icon = 'icons/obj/food/martian.dmi' + icon_state = "foxs_prize_soup" + drink_type = MEAT | VEGETABLES + +/datum/chemical_reaction/food/soup/foxs_prize_soup + required_reagents = list( + /datum/reagent/consumable/nutriment/soup/dashi = 30, + /datum/reagent/consumable/eggwhite = 10, + ) + required_ingredients = list( + /obj/item/food/meat/cutlet/chicken = 1, + /obj/item/food/tofu = 1, + ) + results = list( + /datum/reagent/consumable/nutriment/soup/foxs_prize_soup = 30, + /datum/reagent/consumable/nutriment/protein = 6, + ) + +// Secret Noodle Soup +/datum/reagent/consumable/nutriment/soup/secret_noodle_soup + name = "Secret Noodle Soup" + description = "Made to a secret family recipe (that's in several cookbooks). What is the secret ingredient, you ask? Well, let's just say it could be anything..." + data = list("noodles" = 1, "chicken" = 1, "aromatic broth" = 1) + color = "#D9BB79" + +/datum/glass_style/has_foodtype/soup/secret_noodle_soup + required_drink_type = /datum/reagent/consumable/nutriment/soup/secret_noodle_soup + name = "secret noodle soup" + icon = 'icons/obj/food/martian.dmi' + icon_state = "secret_noodle_soup" + drink_type = MEAT | VEGETABLES + +/datum/chemical_reaction/food/soup/secret_noodle_soup + required_reagents = list( + /datum/reagent/consumable/nutriment/soup/dashi = 30, + ) + required_ingredients = list( + /obj/item/food/meat/cutlet/chicken = 1, + /obj/item/food/spaghetti/boilednoodles = 1, + /obj/item/food/grown/mushroom/chanterelle = 1, + ) + results = list( + /datum/reagent/consumable/nutriment/soup/secret_noodle_soup = 30, + /datum/reagent/consumable/nutriment/protein = 6, + ) + +// Budae-Jjigae +/datum/reagent/consumable/nutriment/soup/budae_jjigae + name = "Budae-Jjigae" + description = "A dish born of the American presence in South Korea, made with ingredients typical to the 1960s American army base- hot dogs, chap, and baked beans, as well as a number of native Korean ingredients such as gochujang and kimchi." + data = list("hot dog" = 1, "pork" = 1, "beans" = 1, "kimchi" = 1, "noodles" = 1) + color = "#C8400E" + +/datum/glass_style/has_foodtype/soup/budae_jjigae + required_drink_type = /datum/reagent/consumable/nutriment/soup/budae_jjigae + name = "budae-jjigae" + icon = 'icons/obj/food/martian.dmi' + icon_state = "budae_jjigae" + drink_type = MEAT | VEGETABLES | GRAIN + +/datum/chemical_reaction/food/soup/budae_jjigae + required_reagents = list( + /datum/reagent/water = 30, + ) + required_ingredients = list( + /obj/item/food/canned/beans = 1, + /obj/item/food/spaghetti/rawnoodles = 1, + /obj/item/food/sausage/american = 1, + /obj/item/food/chapslice = 2, + /obj/item/food/kimchi = 1, + /obj/item/food/cheese/wedge = 1, + ) + results = list( + /datum/reagent/consumable/nutriment/soup/budae_jjigae = 30, + /datum/reagent/consumable/nutriment/protein = 6, + ) + percentage_of_nutriment_converted = 0.1 + +// 24-Volt Fish +// Simply poach the fish in boiling energy drink, easy as +/datum/chemical_reaction/food/soup/volt_fish + required_reagents = list( + /datum/reagent/consumable/volt_energy = 15, + ) + required_ingredients = list( + /obj/item/food/fishmeat = 1 + ) + resulting_food_path = /obj/item/food/volt_fish + ingredient_reagent_multiplier = 0 + mix_message = "The air fills with a hellish mix of fish and artificial flavouring." diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm index ea0ebdad95be..3b44f5afcd88 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm @@ -38,7 +38,7 @@ /datum/crafting_recipe/food/reaction/New() . = ..() - if(!reaction) + if(!ispath(reaction, /datum/chemical_reaction)) return if(length(GLOB.chemical_reactions_list)) @@ -189,6 +189,13 @@ /datum/crafting_recipe/food/reaction/moonshine reaction = /datum/chemical_reaction/drink/moonshine +/datum/crafting_recipe/food/reaction/martian_batter + reaction = /datum/chemical_reaction/food/martian_batter + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/grounding_neutralise + reaction = /datum/chemical_reaction/food/grounding_neutralise + // Tools: Rolling pin /datum/crafting_recipe/food/rollingpin @@ -352,6 +359,21 @@ result = /obj/item/food/watermelonslice category = CAT_SALAD +/datum/crafting_recipe/food/knife/kamaboko_slice + reqs = list(/obj/item/food/kamaboko = 1) + result = /obj/item/food/kamaboko_slice + category = CAT_MARTIAN + +/datum/crafting_recipe/food/knife/raw_noodles + reqs = list(/obj/item/food/rice_dough = 1) + result = /obj/item/food/spaghetti/rawnoodles + category = CAT_MARTIAN + +/datum/crafting_recipe/food/knife/chapslice + reqs = list(/obj/item/food/canned/chap = 1) + result = /obj/item/food/chapslice + category = CAT_MEAT + // Machinery: Grill /datum/crafting_recipe/food/grill @@ -422,11 +444,26 @@ result = /obj/item/food/grilled_cheese_sandwich category = CAT_BREAD -/datum/crafting_recipe/food/grill/moonfish +/datum/crafting_recipe/food/grill/grilled_cheese reqs = list(/obj/item/food/cheese/firm_cheese_slice = 1) result = /obj/item/food/grilled_cheese category = CAT_MISCFOOD +/datum/crafting_recipe/food/grill/ballpark_pretzel + reqs = list(/obj/item/food/raw_ballpark_pretzel = 1) + result = /obj/item/food/ballpark_pretzel + category = CAT_MARTIAN + +/datum/crafting_recipe/food/grill/ballpark_tsukune + reqs = list(/obj/item/food/kebab/raw_ballpark_tsukune = 1) + result = /obj/item/food/kebab/ballpark_tsukune + category = CAT_MARTIAN + +/datum/crafting_recipe/food/grill/chapslice + reqs = list(/obj/item/food/chapslice = 1) + result = /obj/item/food/grilled_chapslice + category = CAT_MEAT + /datum/crafting_recipe/food/grill/friedegg reqs = list(/obj/item/food/egg = 1) result = /obj/item/food/friedegg @@ -632,10 +669,10 @@ result = /obj/item/food/boiledegg category = CAT_EGG -/datum/crafting_recipe/food/microwave/boiledrice +/* /datum/crafting_recipe/food/microwave/boiledrice Monkestation Edit: Boiled rice needs to be boiled reqs = list(/obj/item/food/uncooked_rice = 1) result = /obj/item/food/boiledrice - category = CAT_SALAD + category = CAT_SALAD */ /datum/crafting_recipe/food/microwave/onionrings reqs = list(/obj/item/food/onion_slice = 1) @@ -761,6 +798,16 @@ result = /obj/item/food/yakiimo category = CAT_SALAD +/datum/crafting_recipe/food/oven/reispan + reqs = list(/obj/item/food/rice_dough = 1) + result = /obj/item/food/bread/reispan + category = CAT_MARTIAN + +/datum/crafting_recipe/food/oven/ballpark_pretzel + reqs = list(/obj/item/food/raw_ballpark_pretzel = 1) + result = /obj/item/food/ballpark_pretzel + category = CAT_MARTIAN + // Machinery: Drying rack /datum/crafting_recipe/food/drying machinery = list(/obj/machinery/smartfridge/drying_rack) @@ -794,3 +841,8 @@ /datum/crafting_recipe/food/drying/semki reqs = list(/obj/item/food/grown/sunflower = 1) result = /obj/item/food/semki/healthy + +/datum/crafting_recipe/food/drying/kamaboko + reqs = list(/obj/item/food/surimi = 1) + result = /obj/item/food/kamaboko + category = CAT_MARTIAN diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_martian.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_martian.dm new file mode 100644 index 000000000000..774c8ed5b464 --- /dev/null +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_martian.dm @@ -0,0 +1,915 @@ +/datum/crafting_recipe/food/kimchi + name = "Kimchi" + reqs = list( + /obj/item/food/grown/cabbage = 1, + /obj/item/food/grown/chili = 1, + /datum/reagent/consumable/salt = 5 + ) + result = /obj/item/food/kimchi + category = CAT_MARTIAN + +/datum/crafting_recipe/food/inferno_kimchi + name = "Inferno kimchi" + reqs = list( + /obj/item/food/grown/cabbage = 1, + /obj/item/food/grown/ghost_chili = 1, + /datum/reagent/consumable/salt = 5 + ) + result = /obj/item/food/inferno_kimchi + category = CAT_MARTIAN + +/datum/crafting_recipe/food/garlic_kimchi + name = "Garlic kimchi" + reqs = list( + /obj/item/food/grown/cabbage = 1, + /obj/item/food/grown/chili = 1, + /obj/item/food/grown/garlic = 1, + /datum/reagent/consumable/salt = 5 + ) + result = /obj/item/food/garlic_kimchi + category = CAT_MARTIAN + +/datum/crafting_recipe/food/surimi + name = "Surimi" + reqs = list( + /obj/item/food/fishmeat = 1, + ) + result = /obj/item/food/surimi + category = CAT_MARTIAN + +/datum/crafting_recipe/food/sambal + name = "Sambal" + reqs = list( + /obj/item/food/grown/chili = 1, + /obj/item/food/grown/garlic = 1, + /obj/item/food/grown/onion = 1, + /datum/reagent/consumable/sugar = 3, + /datum/reagent/consumable/limejuice = 3, + ) + result = /obj/item/food/sambal + category = CAT_MARTIAN + +/datum/crafting_recipe/food/katsu_fillet + name = "Katsu fillet" + reqs = list( + /obj/item/food/meat/rawcutlet = 1, + /obj/item/food/breadslice/reispan = 1, + ) + result = /obj/item/food/katsu_fillet + category = CAT_MARTIAN + +/datum/crafting_recipe/food/rice_dough + name = "Rice dough" + reqs = list( + /datum/reagent/consumable/flour = 10, + /datum/reagent/consumable/rice = 10, + /datum/reagent/water = 10, + ) + result = /obj/item/food/rice_dough + category = CAT_MARTIAN + +/datum/crafting_recipe/food/hurricane_rice + name = "Hurricane fried rice" + reqs = list( + /obj/item/food/boiledrice = 1, + /obj/item/food/egg = 1, + /obj/item/food/onion_slice = 1, + /obj/item/food/grown/chili = 1, + /obj/item/food/meat/cutlet = 1, + /obj/item/food/pineappleslice = 1, + /datum/reagent/consumable/soysauce = 3, + ) + result = /obj/item/food/salad/hurricane_rice + category = CAT_MARTIAN + +/datum/crafting_recipe/food/ikareis + name = "Ikareis" + reqs = list( + /obj/item/food/boiledrice = 1, + /obj/item/food/canned/squid_ink = 1, + /obj/item/food/grown/bell_pepper = 1, + /obj/item/food/onion_slice = 1, + /obj/item/food/sausage = 1, + /obj/item/food/grown/chili = 1, + ) + result = /obj/item/food/salad/ikareis + category = CAT_MARTIAN + +/datum/crafting_recipe/food/hawaiian_fried_rice + name = "Hawaiian fried rice" + reqs = list( + /obj/item/food/boiledrice = 1, + /obj/item/food/chapslice = 1, + /obj/item/food/grown/bell_pepper = 1, + /obj/item/food/pineappleslice = 1, + /obj/item/food/onion_slice = 1, + /datum/reagent/consumable/soysauce = 5 + ) + result = /obj/item/food/salad/hawaiian_fried_rice + category = CAT_MARTIAN + +/datum/crafting_recipe/food/ketchup_fried_rice + name = "Ketchup fried rice" + reqs = list( + /obj/item/food/boiledrice = 1, + /obj/item/food/onion_slice = 1, + /obj/item/food/sausage/american = 1, + /obj/item/food/grown/carrot = 1, + /obj/item/food/grown/peas = 1, + /datum/reagent/consumable/ketchup = 5, + /datum/reagent/consumable/worcestershire = 2, + ) + result = /obj/item/food/salad/ketchup_fried_rice + category = CAT_MARTIAN + +/datum/crafting_recipe/food/mediterranean_fried_rice + name = "Mediterranean fried rice" + reqs = list( + /obj/item/food/boiledrice = 1, + /obj/item/food/onion_slice = 1, + /obj/item/food/grown/herbs = 1, + /obj/item/food/cheese/firm_cheese_slice = 1, + /obj/item/food/grown/olive = 1, + /obj/item/food/meatball = 1, + ) + result = /obj/item/food/salad/mediterranean_fried_rice + category = CAT_MARTIAN + +/datum/crafting_recipe/food/egg_fried_rice + name = "Egg fried rice" + reqs = list( + /obj/item/food/boiledrice = 1, + /obj/item/food/egg = 1, + /datum/reagent/consumable/soysauce = 3, + ) + result = /obj/item/food/salad/egg_fried_rice + category = CAT_MARTIAN + +/datum/crafting_recipe/food/bibimbap + name = "Bibimbap" + reqs = list( + /obj/item/food/boiledrice = 1, + /obj/item/food/grown/cucumber = 1, + /obj/item/food/grown/mushroom = 1, + /obj/item/food/meat/cutlet = 1, + /obj/item/food/kimchi = 1, + /obj/item/food/egg = 1, + ) + result = /obj/item/food/salad/bibimbap + category = CAT_MARTIAN + +/datum/crafting_recipe/food/bulgogi_noodles + name = "Bulgogi noodles" + reqs = list( + /obj/item/food/spaghetti/boilednoodles = 1, + /obj/item/food/meat/cutlet = 1, + /obj/item/food/grown/apple = 1, + /obj/item/food/grown/garlic = 1, + /obj/item/food/onion_slice = 1, + /datum/reagent/consumable/nutriment/soup/teriyaki = 4, + ) + result = /obj/item/food/salad/bibimbap + category = CAT_MARTIAN + +/datum/crafting_recipe/food/yakisoba_katsu + name = "Yakisoba katsu" + reqs = list( + /obj/item/food/spaghetti/boilednoodles = 1, + /obj/item/food/grown/cabbage = 1, + /obj/item/food/grown/carrot = 1, + /obj/item/food/onion_slice = 1, + /obj/item/food/katsu_fillet = 1, + /datum/reagent/consumable/worcestershire = 3, + ) + result = /obj/item/food/salad/yakisoba_katsu + category = CAT_MARTIAN + +/datum/crafting_recipe/food/martian_fried_noodles + name = "Martian fried noodles" + reqs = list( + /obj/item/food/spaghetti/boilednoodles = 1, + /obj/item/food/peanuts/salted = 1, + /obj/item/food/meat/cutlet = 1, + /obj/item/food/onion_slice = 1, + /obj/item/food/egg = 1, + /datum/reagent/consumable/soysauce = 3, + /datum/reagent/consumable/red_bay = 3, + ) + result = /obj/item/food/salad/martian_fried_noodles + category = CAT_MARTIAN + +/datum/crafting_recipe/food/simple_fried_noodles + name = "Simple fried noodles" + reqs = list( + /obj/item/food/spaghetti/boilednoodles = 1, + /datum/reagent/consumable/soysauce = 3, + ) + result = /obj/item/food/salad/simple_fried_noodles + category = CAT_MARTIAN + +/datum/crafting_recipe/food/setagaya_curry + name = "Setagaya curry" + reqs = list( + /obj/item/food/boiledrice = 1, + /obj/item/food/grown/apple = 1, + /datum/reagent/consumable/honey = 3, + /datum/reagent/consumable/ketchup = 3, + /obj/item/food/chocolatebar = 1, + /datum/reagent/consumable/coffee = 3, + /datum/reagent/consumable/ethanol/wine = 3, + /datum/reagent/consumable/curry_powder = 3, + /obj/item/food/meat/slab = 1, + /obj/item/food/grown/onion = 1, + /obj/item/food/grown/carrot = 1, + /obj/item/food/grown/potato = 1, + ) + result = /obj/item/food/salad/setagaya_curry + category = CAT_MARTIAN + +/datum/crafting_recipe/food/big_blue_burger + name = "Big Blue Burger" + reqs = list( + /obj/item/food/bun = 1, + /obj/item/food/patty = 2, + /obj/item/food/onion_slice = 1, + /obj/item/food/cheese/wedge = 1, + /obj/item/food/meat/bacon = 1, + /obj/item/food/pineappleslice = 1, + /datum/reagent/consumable/nutriment/soup/teriyaki = 4, + ) + result = /obj/item/food/burger/big_blue + category = CAT_MARTIAN + +/datum/crafting_recipe/food/chappy_patty + name = "Chappy Patty" + reqs = list( + /obj/item/food/bun = 1, + /obj/item/food/grilled_chapslice = 2, + /obj/item/food/friedegg = 1, + /obj/item/food/cheese/wedge = 1, + /datum/reagent/consumable/ketchup = 3, + ) + result = /obj/item/food/burger/chappy + category = CAT_MARTIAN + +/datum/crafting_recipe/food/king_katsu_sandwich + name = "King Katsu sandwich" + reqs = list( + /obj/item/food/breadslice/reispan = 2, + /obj/item/food/katsu_fillet = 1, + /obj/item/food/meat/bacon = 1, + /obj/item/food/kimchi = 1, + /obj/item/food/onion_slice = 1, + /obj/item/food/grown/tomato = 1, + ) + result = /obj/item/food/king_katsu_sandwich + category = CAT_MARTIAN + +/datum/crafting_recipe/food/marte_cubano_sandwich + name = "Marte Cubano sandwich" + reqs = list( + /obj/item/food/breadslice/reispan = 2, + /obj/item/food/meat/bacon = 1, + /obj/item/food/pickle = 2, + /obj/item/food/cheese/wedge = 1, + ) + result = /obj/item/food/marte_cubano_sandwich + category = CAT_MARTIAN + +/datum/crafting_recipe/food/little_shiro_sandwich + name = "Little Shiro sandwich" + reqs = list( + /obj/item/food/breadslice/reispan = 2, + /obj/item/food/meat/cutlet = 1, + /obj/item/food/friedegg = 1, + /obj/item/food/garlic_kimchi = 1, + /obj/item/food/cheese/mozzarella = 1, + /obj/item/food/grown/herbs = 1, + ) + result = /obj/item/food/little_shiro_sandwich + category = CAT_MARTIAN + +/datum/crafting_recipe/food/croque_martienne + name = "Croque-Martienne sandwich" + reqs = list( + /obj/item/food/breadslice/reispan = 2, + /obj/item/food/meat/cutlet = 1, + /obj/item/food/cheese/wedge = 1, + /obj/item/food/pineappleslice = 1, + /obj/item/food/friedegg = 1, + ) + result = /obj/item/food/croque_martienne + category = CAT_MARTIAN + +/datum/crafting_recipe/food/prospect_sunrise + name = "Prospect Sunrise sandwich" + reqs = list( + /obj/item/food/breadslice/reispan = 2, + /obj/item/food/meat/bacon = 1, + /obj/item/food/cheese/wedge = 1, + /obj/item/food/omelette = 1, + /obj/item/food/pickle = 1, + ) + result = /obj/item/food/prospect_sunrise + category = CAT_MARTIAN + +/datum/crafting_recipe/food/takoyaki + name = "Takoyaki" + reqs = list( + /obj/item/food/fishmeat/octopus = 1, + /obj/item/food/onion_slice = 1, + /datum/reagent/consumable/martian_batter = 6, + /datum/reagent/consumable/worcestershire = 3, + ) + result = /obj/item/food/takoyaki + category = CAT_MARTIAN + +/datum/crafting_recipe/food/russian_takoyaki + name = "Russian takoyaki" + reqs = list( + /obj/item/food/fishmeat/octopus = 1, + /obj/item/food/grown/ghost_chili = 1, + /datum/reagent/consumable/martian_batter = 6, + /datum/reagent/consumable/capsaicin = 3, + ) + result = /obj/item/food/takoyaki/russian + category = CAT_MARTIAN + +/datum/crafting_recipe/food/tacoyaki + name = "Tacoyaki" + reqs = list( + /obj/item/food/meatball = 1, + /obj/item/food/grown/corn = 1, + /datum/reagent/consumable/martian_batter = 6, + /datum/reagent/consumable/red_bay = 3, + /obj/item/food/cheese/wedge = 1, + ) + result = /obj/item/food/takoyaki/taco + category = CAT_MARTIAN + +/datum/crafting_recipe/food/okonomiyaki + name = "Okonomiyaki" + reqs = list( + /datum/reagent/consumable/martian_batter = 6, + /datum/reagent/consumable/worcestershire = 3, + /datum/reagent/consumable/mayonnaise = 3, + /obj/item/food/grown/cabbage = 1, + /obj/item/food/grown/potato/sweet = 1, + ) + result = /obj/item/food/okonomiyaki + category = CAT_MARTIAN + +/datum/crafting_recipe/food/brat_kimchi + name = "Brat-kimchi" + reqs = list( + /obj/item/food/sausage = 1, + /obj/item/food/kimchi = 1, + /datum/reagent/consumable/sugar = 3, + ) + result = /obj/item/food/brat_kimchi + category = CAT_MARTIAN + +/datum/crafting_recipe/food/tonkatsuwurst + name = "Tonkatsuwurst" + reqs = list( + /obj/item/food/sausage = 1, + /obj/item/food/fries = 1, + /datum/reagent/consumable/worcestershire = 3, + /datum/reagent/consumable/red_bay = 2, + ) + result = /obj/item/food/tonkatsuwurst + category = CAT_MARTIAN + +/datum/crafting_recipe/food/ti_hoeh_koe + name = "Ti hoeh koe" + reqs = list( + /obj/item/food/boiledrice = 1, + /obj/item/food/peanuts/salted = 1, + /obj/item/food/grown/herbs = 1, + /datum/reagent/blood = 5, + ) + result = /obj/item/food/kebab/ti_hoeh_koe + category = CAT_MARTIAN + +/datum/crafting_recipe/food/kitzushi + name = "Kitzushi" + reqs = list( + /obj/item/food/boiledrice = 1, + /obj/item/food/tofu = 1, + /obj/item/food/cheese/wedge = 1, + /obj/item/food/grown/chili = 1, + ) + result = /obj/item/food/kitzushi + category = CAT_MARTIAN + +/datum/crafting_recipe/food/epok_epok + name = "Epok-epok" + reqs = list( + /obj/item/food/doughslice = 1, + /obj/item/food/meat/cutlet/chicken = 1, + /obj/item/food/grown/potato/wedges = 1, + /obj/item/food/boiledegg = 1, + /datum/reagent/consumable/curry_powder = 3, + ) + result = /obj/item/food/epok_epok + category = CAT_MARTIAN + +/datum/crafting_recipe/food/roti_john + name = "Roti John" + reqs = list( + /obj/item/food/baguette = 1, + /obj/item/food/raw_meatball = 1, + /obj/item/food/egg = 1, + /obj/item/food/onion_slice = 1, + /datum/reagent/consumable/capsaicin = 3, + /datum/reagent/consumable/mayonnaise = 3, + ) + result = /obj/item/food/roti_john + category = CAT_MARTIAN + +/datum/crafting_recipe/food/izakaya_fries + name = "Izakaya fries" + reqs = list( + /obj/item/food/fries = 1, + /obj/item/food/grown/herbs = 1, + /datum/reagent/consumable/red_bay = 3, + /datum/reagent/consumable/mayonnaise = 3, + ) + result = /obj/item/food/izakaya_fries + category = CAT_MARTIAN + +/datum/crafting_recipe/food/kurry_ok_subsando + name = "Kurry-OK subsando" + reqs = list( + /obj/item/food/baguette = 1, + /obj/item/food/izakaya_fries = 1, + /obj/item/food/katsu_fillet = 1, + /datum/reagent/consumable/nutriment/soup/curry_sauce = 5, + ) + result = /obj/item/food/kurry_ok_subsando + category = CAT_MARTIAN + +/datum/crafting_recipe/food/loco_moco + name = "Loco moco" + reqs = list( + /obj/item/food/boiledrice = 1, + /obj/item/food/patty = 1, + /obj/item/food/onion_slice = 1, + /obj/item/food/friedegg = 1, + /datum/reagent/consumable/gravy = 5, + ) + result = /obj/item/food/loco_moco + category = CAT_MARTIAN + +/datum/crafting_recipe/food/wild_duck_fries + name = "Wild duck fries" + reqs = list( + /obj/item/food/izakaya_fries = 1, + /obj/item/food/meat/cutlet = 1, + /datum/reagent/consumable/ketchup = 3, + ) + result = /obj/item/food/wild_duck_fries + category = CAT_MARTIAN + +/datum/crafting_recipe/food/little_hawaii_hotdog + name = "Little Hawaii hotdog" + reqs = list( + /obj/item/food/hotdog = 1, + /obj/item/food/pineappleslice = 1, + /obj/item/food/onion_slice = 1, + /datum/reagent/consumable/nutriment/soup/teriyaki = 3, + ) + result = /obj/item/food/little_hawaii_hotdog + category = CAT_MARTIAN + +/datum/crafting_recipe/food/salt_chilli_fries + name = "Salt n' chilli fries" + reqs = list( + /obj/item/food/fries = 1, + /obj/item/food/grown/chili = 1, + /obj/item/food/grown/onion = 1, + /obj/item/food/grown/garlic = 1, + /datum/reagent/consumable/salt = 3, + ) + result = /obj/item/food/salt_chilli_fries + category = CAT_MARTIAN + +/datum/crafting_recipe/food/steak_croquette + name = "Steak croquette" + reqs = list( + /obj/item/food/meat/steak = 1, + /obj/item/food/mashed_potatoes = 1, + /obj/item/food/breadslice/reispan = 1, + ) + result = /obj/item/food/steak_croquette + category = CAT_MARTIAN + +/datum/crafting_recipe/food/chapsilog + name = "Chapsilog" + reqs = list( + /obj/item/food/grilled_chapslice = 2, + /obj/item/food/friedegg = 1, + /obj/item/food/boiledrice = 1, + /obj/item/food/grown/garlic = 1, + ) + result = /obj/item/food/chapsilog + category = CAT_MARTIAN + +/datum/crafting_recipe/food/chap_hash + name = "Chap hash" + reqs = list( + /obj/item/food/chapslice = 2, + /obj/item/food/egg = 1, + /obj/item/food/grown/bell_pepper = 1, + /obj/item/food/grown/potato = 1, + /obj/item/food/onion_slice = 1, + ) + result = /obj/item/food/chap_hash + category = CAT_MARTIAN + +/datum/crafting_recipe/food/agedashi_tofu + name = "Agedashi tofu" + reqs = list( + /obj/item/food/tofu = 1, + /obj/item/food/onion_slice = 1, + /datum/reagent/consumable/nutriment/soup/dashi = 20, + /obj/item/reagent_containers/cup/bowl = 1, + ) + result = /obj/item/food/salad/agedashi_tofu + category = CAT_MARTIAN + +/datum/crafting_recipe/food/po_kok_gai + name = "Po kok gai" + reqs = list( + /obj/item/food/boiledrice = 1, + /obj/item/food/meat/slab/chicken = 1, + /datum/reagent/consumable/coconut_milk = 5, + /datum/reagent/consumable/curry_powder = 3, + ) + result = /obj/item/food/salad/po_kok_gai + category = CAT_MARTIAN + +/datum/crafting_recipe/food/huoxing_tofu + name = "Huoxing tofu" + reqs = list( + /obj/item/food/tofu = 1, + /obj/item/food/raw_meatball = 1, + /obj/item/food/grown/chili = 1, + /obj/item/food/grown/soybeans = 1, + /obj/item/reagent_containers/cup/bowl = 1, + ) + result = /obj/item/food/salad/huoxing_tofu + category = CAT_MARTIAN + +/datum/crafting_recipe/food/feizhou_ji + name = "Fēizhōu jī" + reqs = list( + /obj/item/food/meat/slab/chicken = 1, + /obj/item/food/grown/chili = 1, + /obj/item/food/grown/bell_pepper = 1, + /datum/reagent/consumable/vinegar = 5, + ) + result = /obj/item/food/feizhou_ji + category = CAT_MARTIAN + +/datum/crafting_recipe/food/galinha_de_cabidela + name = "Galinha de cabidela" + reqs = list( + /obj/item/food/meat/slab/chicken = 1, + /obj/item/food/grown/tomato = 1, + /obj/item/food/uncooked_rice = 1, + /datum/reagent/blood = 5, + ) + result = /obj/item/food/salad/galinha_de_cabidela + category = CAT_MARTIAN + +/datum/crafting_recipe/food/katsu_curry + name = "Katsu curry" + reqs = list( + /obj/item/food/katsu_fillet = 1, + /obj/item/food/boiledrice = 1, + /datum/reagent/consumable/nutriment/soup/curry_sauce = 5, + ) + result = /obj/item/food/salad/katsu_curry + category = CAT_MARTIAN + +/datum/crafting_recipe/food/beef_bowl + name = "Beef bowl" + reqs = list( + /obj/item/food/meat/cutlet = 1, + /obj/item/food/onion_slice = 1, + /obj/item/food/boiledrice = 1, + /datum/reagent/consumable/nutriment/soup/dashi = 5, + ) + result = /obj/item/food/salad/beef_bowl + category = CAT_MARTIAN + +/datum/crafting_recipe/food/salt_chilli_bowl + name = "Salt n' chilli octopus bowl" + reqs = list( + /obj/item/food/grilled_octopus = 1, + /obj/item/food/grown/chili = 1, + /obj/item/food/grown/onion = 1, + /obj/item/food/boiledrice = 1, + /datum/reagent/consumable/salt = 2, + /datum/reagent/consumable/nutriment/soup/curry_sauce = 5, + ) + result = /obj/item/food/salad/salt_chilli_bowl + category = CAT_MARTIAN + +/datum/crafting_recipe/food/kansai_bowl + name = "Kansai bowl" + reqs = list( + /obj/item/food/kamaboko_slice = 2, + /obj/item/food/boiledegg = 1, + /obj/item/food/grown/onion = 1, + /obj/item/food/boiledrice = 1, + /datum/reagent/consumable/nutriment/soup/dashi = 5, + ) + result = /obj/item/food/salad/kansai_bowl + category = CAT_MARTIAN + +/datum/crafting_recipe/food/eigamudo_curry + name = "Eigamudo curry" + reqs = list( + /obj/item/food/grown/olive = 1, + /obj/item/food/kimchi = 1, + /obj/item/food/fishmeat = 1, + /obj/item/food/boiledrice = 1, + /datum/reagent/consumable/cafe_latte = 5, + ) + result = /obj/item/food/salad/eigamudo_curry + category = CAT_MARTIAN + +/datum/crafting_recipe/food/cilbir + name = "Çilbir" + reqs = list( + /obj/item/food/grown/garlic = 1, + /obj/item/food/friedegg = 1, + /obj/item/food/grown/chili = 1, + /datum/reagent/consumable/yoghurt = 5, + /datum/reagent/consumable/quality_oil = 2, + ) + result = /obj/item/food/cilbir + category = CAT_MARTIAN + +/datum/crafting_recipe/food/peking_duck_crepes + name = "Peking duck crepes a l'orange" + reqs = list( + /obj/item/food/pancakes = 1, + /obj/item/food/meat/cutlet = 1, + /obj/item/food/grown/citrus/orange = 1, + /datum/reagent/consumable/ethanol/cognac = 2, + ) + result = /obj/item/food/peking_duck_crepes + category = CAT_MARTIAN + +/datum/crafting_recipe/food/vulgaris_spekkoek + name = "Vulgaris spekkoek" + reqs = list( + /obj/item/food/cake/plain = 1, + /obj/item/food/grown/ambrosia/vulgaris = 1, + /obj/item/food/butter = 1, //monkestation edit: no butterslices yet, is intended to be 2 slices + ) + result = /obj/item/food/cake/spekkoek + category = CAT_MARTIAN + +/datum/crafting_recipe/food/pineapple_foster + name = "Pineapple foster" + reqs = list( + /obj/item/food/pineappleslice = 1, + /datum/reagent/consumable/caramel = 2, + /obj/item/food/icecream = 1, + /datum/reagent/consumable/ethanol/rum = 2, + ) + result = /obj/item/food/salad/pineapple_foster + category = CAT_MARTIAN + +/datum/crafting_recipe/food/pastel_de_nata + name = "Pastel de nata" + reqs = list( + /obj/item/food/pastrybase = 1, + /obj/item/food/grown/vanillapod = 1, + /obj/item/food/egg = 1, + /datum/reagent/consumable/sugar = 2, + ) + result = /obj/item/food/pastel_de_nata + category = CAT_MARTIAN + +/datum/crafting_recipe/food/boh_loh_yah + name = "Boh loh yah" + reqs = list( + /obj/item/food/doughslice = 1, + /obj/item/food/butter = 1, //monkestation edit: no butterslices yet, is intended to be 1 slice + /datum/reagent/consumable/sugar = 5, + ) + result = /obj/item/food/boh_loh_yah + category = CAT_MARTIAN + +/datum/crafting_recipe/food/banana_fritter + name = "Banana fritter" + reqs = list( + /obj/item/food/grown/banana = 1, + /datum/reagent/consumable/martian_batter = 2 + ) + result = /obj/item/food/banana_fritter + category = CAT_MARTIAN + +/datum/crafting_recipe/food/pineapple_fritter + name = "Pineapple fritter" + reqs = list( + /obj/item/food/pineappleslice = 1, + /datum/reagent/consumable/martian_batter = 2 + ) + result = /obj/item/food/pineapple_fritter + category = CAT_MARTIAN + +/datum/crafting_recipe/food/kasei_dango + name = "Kasei dango" + reqs = list( + /obj/item/stack/rods = 1, + /datum/reagent/consumable/sugar = 5, + /datum/reagent/consumable/rice = 5, + /datum/reagent/consumable/orangejuice = 2, + /datum/reagent/consumable/grenadine = 2, + ) + result = /obj/item/food/kebab/kasei_dango + category = CAT_MARTIAN + +/datum/crafting_recipe/food/pb_ice_cream_mochi + name = "Peanut-butter ice cream mochi" + reqs = list( + /datum/reagent/consumable/sugar = 5, + /datum/reagent/consumable/rice = 5, + /datum/reagent/consumable/peanut_butter = 2, + /obj/item/food/icecream = 1, + ) + result = /obj/item/food/pb_ice_cream_mochi + category = CAT_MARTIAN + +/datum/crafting_recipe/food/frozen_pineapple_pop + name = "Frozen pineapple pop" + reqs = list( + /obj/item/food/pineappleslice = 1, + /obj/item/food/chocolatebar = 1, + /obj/item/popsicle_stick = 1, + ) + result = /obj/item/food/popsicle/pineapple_pop + category = CAT_MARTIAN + +/datum/crafting_recipe/food/sea_salt_pop + name = "Sea-salt ice cream bar" + reqs = list( + /datum/reagent/consumable/cream = 5, + /datum/reagent/consumable/sugar = 5, + /datum/reagent/consumable/salt = 3, + /obj/item/popsicle_stick = 1, + ) + result = /obj/item/food/popsicle/sea_salt + category = CAT_MARTIAN + +/datum/crafting_recipe/food/berry_topsicle + name = "Berry topsicle" + reqs = list( + /obj/item/food/tofu = 1, + /datum/reagent/consumable/berryjuice = 5, + /datum/reagent/consumable/sugar = 5, + /obj/item/popsicle_stick = 1, + ) + result = /obj/item/food/popsicle/topsicle + category = CAT_MARTIAN + +/datum/crafting_recipe/food/banana_topsicle + name = "Banana topsicle" + reqs = list( + /obj/item/food/tofu = 1, + /datum/reagent/consumable/banana = 5, + /datum/reagent/consumable/sugar = 5, + /obj/item/popsicle_stick = 1, + ) + result = /obj/item/food/popsicle/topsicle/banana + category = CAT_MARTIAN + +/datum/crafting_recipe/food/berry_topsicle + name = "Pineapple topsicle" + reqs = list( + /obj/item/food/tofu = 1, + /datum/reagent/consumable/pineapplejuice = 5, + /datum/reagent/consumable/sugar = 5, + /obj/item/popsicle_stick = 1, + ) + result = /obj/item/food/popsicle/topsicle/pineapple + category = CAT_MARTIAN + +/datum/crafting_recipe/food/plasma_dog_supreme + name = "Plasma Dog Supreme" + reqs = list( + /obj/item/food/hotdog = 1, + /obj/item/food/pineappleslice = 1, + /obj/item/food/sambal = 1, + /obj/item/food/onion_slice = 1, + ) + result = /obj/item/food/plasma_dog_supreme + category = CAT_MARTIAN + +/datum/crafting_recipe/food/frickles + name = "Frickles" + reqs = list( + /obj/item/food/pickle = 1, + /datum/reagent/consumable/martian_batter = 2, + /datum/reagent/consumable/red_bay = 1, + ) + result = /obj/item/food/frickles + category = CAT_MARTIAN + +/datum/crafting_recipe/food/raw_ballpark_pretzel + name = "Raw ballpark pretzel" + reqs = list( + /obj/item/food/doughslice = 1, + /datum/reagent/consumable/salt = 2, + ) + result = /obj/item/food/raw_ballpark_pretzel + category = CAT_MARTIAN + +/datum/crafting_recipe/food/raw_ballpark_tsukune + name = "Raw ballpark tsukune" + reqs = list( + /obj/item/food/raw_meatball/chicken = 1, + /datum/reagent/consumable/nutriment/soup/teriyaki = 2, + /obj/item/stack/rods = 1, + ) + result = /obj/item/food/kebab/raw_ballpark_tsukune + category = CAT_MARTIAN + +/datum/crafting_recipe/food/sprout_bowl + name = "Sprout bowl" + reqs = list( + /obj/item/food/pickled_voltvine = 1, + /obj/item/food/fishmeat = 1, + /obj/item/food/boiledrice = 1, + /datum/reagent/consumable/nutriment/soup/dashi = 5, + ) + result = /obj/item/food/salad/sprout_bowl + category = CAT_MARTIAN + +// Soups + +/datum/crafting_recipe/food/reaction/soup/boilednoodles + reaction = /datum/chemical_reaction/food/soup/boilednoodles + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/soup/dashi + reaction = /datum/chemical_reaction/food/soup/dashi + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/soup/teriyaki + reaction = /datum/chemical_reaction/food/soup/teriyaki + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/soup/curry_sauce + reaction = /datum/chemical_reaction/food/soup/curry_sauce + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/soup/shoyu_ramen + reaction = /datum/chemical_reaction/food/soup/shoyu_ramen + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/soup/gyuramen + reaction = /datum/chemical_reaction/food/soup/gyuramen + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/soup/new_osaka_sunrise + reaction = /datum/chemical_reaction/food/soup/new_osaka_sunrise + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/soup/satsuma_black + reaction = /datum/chemical_reaction/food/soup/satsuma_black + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/soup/dragon_ramen + reaction = /datum/chemical_reaction/food/soup/dragon_ramen + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/soup/hong_kong_borscht + reaction = /datum/chemical_reaction/food/soup/hong_kong_borscht + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/soup/hong_kong_macaroni + reaction = /datum/chemical_reaction/food/soup/hong_kong_macaroni + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/soup/foxs_prize_soup + reaction = /datum/chemical_reaction/food/soup/foxs_prize_soup + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/soup/secret_noodle_soup + reaction = /datum/chemical_reaction/food/soup/secret_noodle_soup + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/soup/budae_jjigae + reaction = /datum/chemical_reaction/food/soup/budae_jjigae + category = CAT_MARTIAN + +/datum/crafting_recipe/food/reaction/soup/volt_fish + reaction = /datum/chemical_reaction/food/soup/volt_fish + category = CAT_MARTIAN diff --git a/code/modules/hallucination/mother.dm b/code/modules/hallucination/mother.dm new file mode 100644 index 000000000000..631a5c6641e3 --- /dev/null +++ b/code/modules/hallucination/mother.dm @@ -0,0 +1,94 @@ +/// Your mother appears to scold you. +/datum/hallucination/your_mother + random_hallucination_weight = 2 + var/obj/effect/client_image_holder/hallucination/your_mother/mother + +/datum/hallucination/your_mother/start() + var/list/spawn_locs = list() + for(var/turf/open/floor in view(hallucinator, 4)) + if(floor.is_blocked_turf(exclude_mobs = TRUE)) + continue + spawn_locs += floor + + if(!length(spawn_locs)) + return FALSE + var/turf/spawn_loc = pick(spawn_locs) + mother = new(spawn_loc, hallucinator, src) + mother.AddComponent(/datum/component/leash, owner = hallucinator, distance = get_dist(hallucinator, mother)) //basically makes mother follow them + point_at(hallucinator) + talk("[capitalize(hallucinator.real_name)]!!!!") // Your mother won't be fooled by paltry disguises + var/list/scold_lines = list( + pick_list_replacements(MOTHER_FILE, "do_something"), + pick_list_replacements(MOTHER_FILE, "be_upset"), + pick_list_replacements(MOTHER_FILE, "get_reprimanded"), + ) + var/delay = 2 SECONDS + for(var/line in scold_lines) + addtimer(CALLBACK(src, PROC_REF(talk), line), delay) + delay += 2 SECONDS + addtimer(CALLBACK(src, PROC_REF(exit)), delay + 4 SECONDS) + return TRUE + +/datum/hallucination/your_mother/proc/point_at(atom/target) + var/turf/tile = get_turf(target) + if(!tile) + return + + var/obj/visual = image('icons/hud/screen_gen.dmi', mother.loc, "arrow", FLY_LAYER) + + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(flick_overlay_global), visual, list(hallucinator.client), 2.5 SECONDS) + animate(visual, pixel_x = (tile.x - mother.x) * world.icon_size, pixel_y = (tile.y - mother.y) * world.icon_size, time = 1.7, easing = EASE_OUT) + +/datum/hallucination/your_mother/proc/talk(text) + var/plus_runechat = hallucinator.client?.prefs.read_preference(/datum/preference/toggle/enable_runechat) + var/datum/language/understood_language = hallucinator.get_random_understood_language() + var/spans = list(mother.speech_span) + + if(!plus_runechat) + var/image/speech_overlay = image('icons/mob/effects/talk.dmi', mother, "default0", layer = ABOVE_MOB_LAYER) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(flick_overlay_global), speech_overlay, list(hallucinator.client), 30) + else + hallucinator.create_chat_message(mother, understood_language, text, spans) + + var/message = hallucinator.compose_message(mother, understood_language, text, null, spans, visible_name = TRUE) + to_chat(hallucinator, message) + +/datum/hallucination/your_mother/proc/exit() + qdel(src) + +/datum/outfit/yourmother + name = "Your Mother" + + uniform = /obj/item/clothing/under/color/jumpskirt/red + neck = /obj/item/clothing/neck/beads + shoes = /obj/item/clothing/shoes/sandal + +/datum/outfit/yourmother/post_equip(mob/living/carbon/human/user, visualsOnly = FALSE) + . = ..() + user.hairstyle = "Braided" //get_dynamic_human_appearance uses bald dummies + user.update_body_parts() + +/obj/effect/client_image_holder/hallucination/your_mother + gender = FEMALE + image_icon = 'icons/mob/simple/simple_human.dmi' + name = "Your mother" + desc = "She is not happy." + image_state = "" + +/obj/effect/client_image_holder/hallucination/your_mother/Initialize(mapload, list/mobs_which_see_us, datum/hallucination/parent) + var/mob/living/hallucinator = parent.hallucinator + if (ishuman(hallucinator)) + var/mob/living/carbon/dna_haver = hallucinator + image_icon = getFlatIcon(get_dynamic_human_appearance(/datum/outfit/yourmother, dna_haver.dna.species.type)) + return ..() + + if (istype(hallucinator, /mob/living/basic/pet/dog/corgi/ian)) + image_icon = getFlatIcon(get_dynamic_human_appearance(/datum/outfit/job/hop)) + name = "Head of Personnel" + return ..() + + image_icon = hallucinator.icon + image_state = hallucinator.icon_state + image_pixel_x = hallucinator.pixel_x + image_pixel_y = hallucinator.pixel_y + return ..() diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index df3c48f9883f..085225e34f37 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -327,9 +327,9 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf for(var/atom/movable/atom_contents as anything in holo_atom) //make sure that things inside of a holoitem are moved outside before destroying it atom_contents.forceMove(target_turf) - if(istype(holo_atom, /obj/item/clothing/under/rank)) + if(istype(holo_atom, /obj/item/clothing/under)) var/obj/item/clothing/under/holo_clothing = holo_atom - holo_clothing.dump_attachment() + holo_clothing.dump_attachments() if(!silent) visible_message(span_notice("[holo_atom] fades away!")) diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm index efdb9a7d4dde..52d0f30d8932 100644 --- a/code/modules/hydroponics/grown/melon.dm +++ b/code/modules/hydroponics/grown/melon.dm @@ -11,7 +11,7 @@ growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' icon_dead = "watermelon-dead" genes = list(/datum/plant_gene/trait/repeated_harvest) - possible_mutations = list(/datum/hydroponics/plant_mutation/melon_barrel, /datum/hydroponics/plant_mutation/holy_melon) + possible_mutations = list(/datum/hydroponics/plant_mutation/melon_barrel, /datum/hydroponics/plant_mutation/holy_melon, /datum/hydroponics/plant_mutation/honeydew) reagents_add = list(/datum/reagent/water = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.2) /obj/item/seeds/watermelon/suicide_act(mob/living/user) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 5e5211d00245..72eb6b54e398 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -249,11 +249,14 @@ myseed.forceMove(src) update_appearance() - if((world.time > (lastcycle + cycledelay) && waterlevel > 10 && reagents.total_volume > 2 && pestlevel < 10 && weedlevel < 10) || bio_boosted) + if((world.time > (lastcycle + cycledelay) && waterlevel > 10 && (reagents.total_volume > 2 || self_sustaining) && pestlevel < 10 && weedlevel < 10) || bio_boosted) lastcycle = world.time if(myseed && plant_status != HYDROTRAY_PLANT_DEAD) // Advance age - age++ + var/growth_mult = (1.01 ** -myseed.maturation) + //Checks if a self sustaining tray is fully grown and fully "functional" (corpse flowers require a specific age to produce miasma) + if(!(age > max(myseed.maturation, myseed.production) && (growth >= myseed.harvest_age * growth_mult) && self_sustaining)) + age++ needs_update = TRUE growth += 3 @@ -270,9 +273,9 @@ apply_chemicals(lastuser?.resolve()) // Nutrients deplete slowly if(bio_boosted) - adjust_plant_nutriments((reagents.total_volume * ((nutriment_drain_precent * 0.2) * 0.01))) + adjust_plant_nutriments(max(reagents.total_volume * ((nutriment_drain_precent * 0.2) * 0.01), 0.05)) else - adjust_plant_nutriments((reagents.total_volume * (nutriment_drain_precent * 0.01))) + adjust_plant_nutriments(max(reagents.total_volume * (nutriment_drain_precent * 0.01), 0.05)) /** * Photosynthesis @@ -367,7 +370,6 @@ if(age > (myseed.lifespan - repeated_harvest)) adjust_plant_health(-rand(1,5) / rating) - var/growth_mult = (1.01 ** -myseed.maturation) // Harvest code if(growth >= myseed.harvest_age * growth_mult) //if(myseed.harvest_age < age * max(myseed.production * 0.044, 0.5) && (myseed.harvest_age) < (age - lastproduce) * max(myseed.production * 0.044, 0.5) && (!harvest && !dead)) diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 2b828f2bb35b..575fbf91827a 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -394,7 +394,7 @@ our_plant.investigate_log("zapped [key_name(target)] at [AREACOORD(target)]. Last touched by: [our_plant.fingerprintslast].", INVESTIGATE_BOTANY) var/mob/living/carbon/target_carbon = target var/obj/item/seeds/our_seed = our_plant.get_plant_seed() - var/power = our_seed.potency * rate + var/power = min(our_seed.potency, 100) * rate if(prob(power)) target_carbon.electrocute_act(round(power), our_plant, 1, SHOCK_NOGLOVES) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index ab0280e7fecd..47fa445a4bcc 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -294,6 +294,9 @@ if(prob(10) && has_viable_mutations()) t_prod = create_valid_mutation(output_loc) else + if(!product) + t_amount++ + continue t_prod = new product(output_loc, src) if(parent.myseed.plantname != initial(parent.myseed.plantname)) t_prod.name = parent.myseed.plantname diff --git a/code/modules/industrial_lift/elevator/elevator_indicator.dm b/code/modules/industrial_lift/elevator/elevator_indicator.dm index 87ff496e3a44..77de8f5fed1e 100644 --- a/code/modules/industrial_lift/elevator/elevator_indicator.dm +++ b/code/modules/industrial_lift/elevator/elevator_indicator.dm @@ -19,10 +19,10 @@ light_color = LIGHT_COLOR_DARK_BLUE luminosity = 1 - maptext_x = 17 - maptext_y = 21 - maptext_width = 4 - maptext_height = 8 + maptext_x = 18 + maptext_y = 20 + maptext_width = 8 + maptext_height = 16 /// What specific_lift_id do we link with? var/linked_elevator_id @@ -150,7 +150,7 @@ return set_light(l_on = TRUE) - maptext = {"
[current_lift_floor]
"} + maptext = "
[current_lift_floor]
" /obj/machinery/lift_indicator/update_overlays() . = ..() diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 357461303b92..fb11b23befea 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -6,7 +6,7 @@ return TRUE if(result_bitflags & COMPONENT_OBJ_DISALLOW) // override all other checks return FALSE - if(HAS_TRAIT(accessor, TRAIT_ALWAYS_NO_ACCESS)) + if(!QDELETED(accessor) && HAS_TRAIT(accessor, TRAIT_ALWAYS_NO_ACCESS)) return FALSE //check if it doesn't require any access at all if(check_access(null)) diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 787db0725a75..d5a7b6bca106 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -48,6 +48,10 @@ voice_of_god_power = 1.4 //Command staff has authority +/datum/job/chief_engineer/after_spawn(mob/living/spawned, client/player_client) + . = ..() + spawned.add_mob_memory(/datum/memory/key/message_server_key, decrypt_key = GLOB.preset_station_message_server_key) + /datum/job/chief_engineer/get_captaincy_announcement(mob/living/captain) return "Due to staffing shortages, newly promoted Acting Captain [captain.real_name] on deck!" diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm index 0254830501af..4ed70576a12f 100644 --- a/code/modules/jobs/job_types/prisoner.dm +++ b/code/modules/jobs/job_types/prisoner.dm @@ -45,6 +45,7 @@ var/datum/crime/past_crime = new(crime.name, crime.desc, "Central Command", "Indefinite.") target_record.crimes += past_crime to_chat(crewmember, span_warning("You are imprisoned for \"[crime_name]\".")) + crewmember.add_mob_memory(/datum/memory/key/permabrig_crimes, crimes = crime_name) /datum/outfit/job/prisoner name = "Prisoner" @@ -69,7 +70,6 @@ if(!crime_name) return var/datum/prisoner_crime/crime = GLOB.prisoner_crimes[crime_name] - var/list/limbs_to_tat = new_prisoner.bodyparts.Copy() for(var/i in 1 to crime.tattoos) if(!length(SSpersistence.prison_tattoos_to_use) || visualsOnly) diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index b7a8691668e2..200742195922 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -3,13 +3,12 @@ description = "Coordinate cargo technicians and shaft miners, assist with \ economical purchasing." department_head = list(JOB_HEAD_OF_PERSONNEL) - head_announce = list(RADIO_CHANNEL_SUPPLY) + // head_announce = list(RADIO_CHANNEL_SUPPLY) // Monkestation Edit- QMs are not heads. No head announcement for non-heads. faction = FACTION_STATION total_positions = 1 spawn_positions = 1 - supervisors = "the head of personnel" minimal_player_age = 7 - supervisors = SUPERVISOR_CAPTAIN + supervisors = SUPERVISOR_HOP //Monkestation Edit - QMs are not command exp_requirements = 120 exp_required_type_department = EXP_TYPE_SUPPLY exp_granted_type = EXP_TYPE_CREW @@ -40,10 +39,10 @@ name = "Quartermaster" jobtype = /datum/job/quartermaster id_trim = /datum/id_trim/job/quartermaster - id = /obj/item/card/id/advanced/silver + id = /obj/item/card/id/advanced // Monkestation Edit - QM is not a head uniform = /obj/item/clothing/under/rank/cargo/qm - belt = /obj/item/modular_computer/pda/heads/quartermaster - ears = /obj/item/radio/headset/heads/qm + belt = /obj/item/modular_computer/pda/quartermaster //Monkestation Edit - QM is not a head, re-defined the PDA to the non-head typepath. + ears = /obj/item/radio/headset/headset_cargo //Monkestation Edit - QM is not a head, changed headset to standard cargo headset. glasses = /obj/item/clothing/glasses/sunglasses shoes = /obj/item/clothing/shoes/sneakers/brown l_hand = /obj/item/clipboard diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm index 2cbc2f288d00..5d4cc75b9b8b 100644 --- a/code/modules/jobs/job_types/scientist.dm +++ b/code/modules/jobs/job_types/scientist.dm @@ -30,7 +30,6 @@ mail_goodies = list( /obj/item/raw_anomaly_core/random = 10, /obj/item/disk/design_disk/bepis = 2, - /obj/item/camera_bug = 1 ) rpg_title = "Thaumaturgist" job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index 3b516fd995ca..75518b8c291c 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -46,7 +46,7 @@ id_trim = /datum/id_trim/job/virologist uniform = /obj/item/clothing/under/rank/medical/virologist backpack_contents = list( - /obj/item/extrapolator = 1, +// /obj/item/extrapolator = 1, //monkestation edit - extrapolator is useless with pathology. /obj/item/storage/box/vials = 1, ) suit = /obj/item/clothing/suit/toggle/labcoat/virologist diff --git a/code/modules/library/admin_only.dm b/code/modules/library/admin_only.dm new file mode 100644 index 000000000000..3e10617d9fe9 --- /dev/null +++ b/code/modules/library/admin_only.dm @@ -0,0 +1,367 @@ +#define BOOK_ADMIN_DELETE "deleted" +#define BOOK_ADMIN_RESTORE "undeleted" +#define BOOK_ADMIN_REPORT "reported" + +/obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker + interface_type = "LibraryAdmin" + /// When a user clicks view, do we display the raw text, or process it with markdown + var/view_raw = FALSE + /// If we should show deleted entries or not + var/show_deleted = TRUE + /// The current ckey we're looking for + var/ckey = "" + /// List mapping requested book ids to a list of their edit logs + var/list/book_history = list() + + +/obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker/can_db_request() + if(sending_request) + return FALSE + return TRUE + +/obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker/hash_search_info() + . = ..() + return "[.]-[ckey]-[show_deleted]" + +/obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker/update_page_contents() + if(sending_request) //Final defense against nerds spamming db requests + return + sending_request = TRUE + search_page = clamp(search_page, 0, page_count) + var/datum/db_query/query_library_list_books = SSdbcore.NewQuery({" + SELECT id, author, title, category, ckey, deleted + FROM [format_table_name("library")] + [show_deleted ? "" : "WHERE deleted IS NULL"] + [show_deleted ? "WHERE" : "AND"] author LIKE CONCAT('%',:author,'%') + AND title LIKE CONCAT('%',:title,'%') + AND (:category = 'Any' OR category = :category) + [book_id ? "AND id LIKE CONCAT('%', :book_id, '%')" : ""] + AND ckey LIKE CONCAT('%',:ckey,'%') + ORDER BY id DESC + LIMIT :skip, :take + "}, list("author" = author, "title" = title, "book_id" = book_id, "category" = category, "ckey" = ckey, "skip" = BOOKS_PER_PAGE * search_page, "take" = BOOKS_PER_PAGE)) + + var/query_succeeded = query_library_list_books.Execute() + sending_request = FALSE + page_content.Cut() + if(!query_succeeded) + qdel(query_library_list_books) + return + while(query_library_list_books.NextRow()) + page_content += list(list( + "id" = query_library_list_books.item[1], + "author" = html_decode(query_library_list_books.item[2]), + "title" = html_decode(query_library_list_books.item[3]), + "category" = query_library_list_books.item[4], + "author_ckey" = query_library_list_books.item[5], + "deleted" = query_library_list_books.item[6], + )) + qdel(query_library_list_books) + +/obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker/update_page_count() + var/bookcount = 0 + var/datum/db_query/query_library_count_books = SSdbcore.NewQuery({" + SELECT COUNT(id) FROM [format_table_name("library")] + [show_deleted ? "" : "WHERE deleted IS NULL"] + [show_deleted ? "WHERE" : "AND"] author LIKE CONCAT('%',:author,'%') + AND title LIKE CONCAT('%',:title,'%') + AND (:category = 'Any' OR category = :category) + [book_id ? "AND id LIKE CONCAT('%', :book_id, '%')" : ""] + AND ckey LIKE CONCAT('%',:ckey,'%') + "}, list("author" = author, "title" = title, "book_id" = book_id, "category" = category, "ckey" = ckey)) + + if(!query_library_count_books.warn_execute()) + qdel(query_library_count_books) + return + if(query_library_count_books.NextRow()) + bookcount = text2num(query_library_count_books.item[1]) + qdel(query_library_count_books) + + page_count = round(max(bookcount - 1, 0) / BOOKS_PER_PAGE) //This is just floor() + search_page = clamp(search_page, 0, page_count) + +/obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker/ui_status(mob/user) + if(!check_rights_for(user.client, R_BAN)) + return UI_CLOSE + if(!SSdbcore.Connect()) + can_connect = FALSE + return UI_CLOSE + return UI_INTERACTIVE + +/obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker/ui_act(action, params, datum/tgui/ui) + . = ..() + if(.) + // We'll always trigger a search attempt if the parent does something, this ensures the ui is v fast to update + INVOKE_ASYNC(src, PROC_REF(update_db_info)) + return + switch(action) + if("set_search_ckey") + ckey = params["ckey"] + INVOKE_ASYNC(src, PROC_REF(update_db_info)) + return TRUE + if("refresh") + last_search_hash = "" + INVOKE_ASYNC(src, PROC_REF(update_db_info)) + return TRUE + if("hide_book") + var/reason = params["delete_reason"] + var/id = params["book_id"] + var/client/actor = ui.user?.client + if(!actor) + return + INVOKE_ASYNC(src, PROC_REF(hide_book), id, reason, actor) + return TRUE + if("unhide_book") + var/reason = params["free_reason"] + var/id = params["book_id"] + var/client/actor = ui.user?.client + if(!actor) + return + INVOKE_ASYNC(src, PROC_REF(unhide_book), id, reason, actor) + return TRUE + if("get_history") + var/id = params["book_id"] + book_history["[id]"] = get_book_history(id) + return TRUE + if("view_book") + var/id = params["book_id"] + view_book(id, ui.user) + return TRUE + if("toggle_raw") + view_raw = !view_raw + return TRUE + if("toggle_deleted") + show_deleted = !show_deleted + INVOKE_ASYNC(src, PROC_REF(update_db_info)) + return TRUE + +/obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker/ui_data(mob/user) + . = ..() + .["view_raw"] = view_raw + .["show_deleted"] = show_deleted + var/list/histories = list() + for(var/id as anything in book_history) + var/list/insert = list() + for(var/datum/book_history_entry/entry in book_history[id]) + insert += list(entry.serialize()) + histories[id] = insert + .["history"] = histories + +/obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker/proc/view_book(id, mob/show_to) + if (!SSdbcore.Connect()) + can_connect = FALSE + message_admins("Failed to establish database connection.") + return + + var/datum/db_query/query_library_view = SSdbcore.NewQuery( + "SELECT * FROM [format_table_name("library")] WHERE id=:id", + list("id" = id) + ) + if(!query_library_view.Execute()) + qdel(query_library_view) + return + + while(query_library_view.NextRow()) + var/datum/admin_book_viewer/viewer = new() + viewer.set_owner(src) + viewer.id = query_library_view.item[1] + viewer.author = query_library_view.item[2] + viewer.title = query_library_view.item[3] + viewer.content = query_library_view.item[4] + viewer.category = query_library_view.item[5] + viewer.author_ckey = query_library_view.item[6] + viewer.creation_time = query_library_view.item[7] + viewer.deleted = query_library_view.item[8] + viewer.creation_round = query_library_view.item[9] + viewer.history = get_book_history(id) + viewer.ui_interact(show_to) + break + qdel(query_library_view) + +/obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker/proc/get_book_history(id) + var/datum/db_query/query_book_history = SSdbcore.NewQuery({" + SELECT id, book, reason, ckey, datetime, action, INET_NTOA(ip_addr) + FROM [format_table_name("library_action")] WHERE book=:id + "}, + list("id" = id) + ) + if(!query_book_history.Execute()) + qdel(query_book_history) + return list() + + var/list/full_history = list() + while(query_book_history.NextRow()) + var/datum/book_history_entry/history = new() + history.id = query_book_history.item[1] + history.book = query_book_history.item[2] + history.reason = query_book_history.item[3] + history.ckey = query_book_history.item[4] + history.datetime = query_book_history.item[5] + history.action = query_book_history.item[6] + history.ip_addr = query_book_history.item[7] + full_history += history + qdel(query_book_history) + return full_history + +/obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker/proc/hide_book(id, reason, client/admin) + if(!SSdbcore.Connect()) + can_connect = FALSE + to_chat(admin, span_danger("Failed to establish database connection.")) + return + if(!check_rights_for(admin, R_BAN)) + log_admin_private("[admin.ckey] tried to hide a book without the required perms") + message_admins("[admin.ckey] tried to hide a book without the required perms") + return + + var/datum/db_query/query_hide_book = SSdbcore.NewQuery({" + UPDATE [format_table_name("library")] + SET deleted = 1 + WHERE id = :id + "}, list("id" = id)) + if(!query_hide_book.warn_execute()) + qdel(query_hide_book) + return + qdel(query_hide_book) + + + var/datum/db_query/query_update_log = SSdbcore.NewQuery({" + INSERT INTO [format_table_name("library_action")] (book, reason, ckey, datetime, action, ip_addr) + VALUES (:book, :reason, :ckey, Now(), :action, INET_ATON(:ip_addr)) + "}, list("book" = id, "reason" = reason, "ckey" = admin.ckey, "action" = BOOK_ADMIN_DELETE, "ip_addr" = admin.address)) + if(!query_update_log.warn_execute()) + qdel(query_update_log) + return + qdel(query_update_log) + + var/log_reason = "([admin.ckey]) hid book #[id][reason ? ": \"[reason]\"" : ""]" + log_admin_private(log_reason) + library_updated() + update_db_info() + +/obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker/proc/unhide_book(id, reason, client/admin) + if(!SSdbcore.Connect()) + can_connect = FALSE + to_chat(admin, span_danger("Failed to establish database connection.")) + return + if(!check_rights_for(admin, R_BAN)) + log_admin_private("[admin.ckey] tried to unhide a book without the required perms") + message_admins("[admin.ckey] tried to unhide a book without the required perms") + return + + var/datum/db_query/query_unhide_book = SSdbcore.NewQuery({" + UPDATE [format_table_name("library")] + SET deleted = NULL + WHERE id = :id + "}, list("id" = id)) + + if(!query_unhide_book.warn_execute()) + qdel(query_unhide_book) + return + qdel(query_unhide_book) + + var/datum/db_query/query_update_log = SSdbcore.NewQuery({" + INSERT INTO [format_table_name("library_action")] (book, reason, ckey, datetime, action, ip_addr) + VALUES (:book, :reason, :ckey, Now(), :action, INET_ATON(:ip_addr)) + "}, list("book" = id, "reason" = reason, "ckey" = admin.ckey, "action" = BOOK_ADMIN_RESTORE, "ip_addr" = admin.address)) + if(!query_update_log.warn_execute()) + qdel(query_update_log) + return + qdel(query_update_log) + + log_admin_private("([admin.ckey]) unhid book #[id]") + library_updated() + update_db_info() + +/// This mostly exists to document the form of the library_action table, since it doesn't do that good a job on its own +/datum/book_history_entry + /// The id of this logged action + var/id + /// The book id this log applies to + var/book + /// The reason this action was enacted + var/reason + /// The admin who performed the action + var/ckey + /// The time of the action being performed + var/datetime + /// The action that occured (BOOK_ADMIN_DELETE, BOOK_ADMIN_RESTORE, and legacy BOOK_ADMIN_REPORT) + var/action + /// The ip address of the admin who performed the action + var/ip_addr + +/datum/book_history_entry/proc/serialize() + var/list/data = list() + data["id"] = id + data["book"] = book + data["reason"] = reason + data["ckey"] = ckey + data["datetime"] = datetime + data["action"] = action + data["address"] = ip_addr + return data + +/// Weaps around a book's sql data, feeds it into a ui that allows us to at base view the contents of the book +/datum/admin_book_viewer + /// Weakref to the /obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker that spawned us + var/datum/weakref/owner_ref + /// If we're displaying raw data or rendered markdown + var/view_raw = FALSE + /// The book id. Incremental, goes up over time + var/id + /// The display name for the book, taken from the player's character + var/author + /// Title of the book + var/title + /// The full text of the book, stored raw + var/content + /// Category the book falls into, see SSlibrary.search_categories + var/category + /// The ckey of the user who triggered the upload request + var/author_ckey + /// The time of day at which the book was uploaded + var/creation_time + /// Boolean, flips to true to "hide" a book from public viewing. Defaults to null + var/deleted + /// The round id the book was uploaded in + var/creation_round + /// Represents the full admin record of this book, as of the view request. Datumized to make it easier to deal with. + var/list/datum/book_history_entry/history + +/datum/admin_book_viewer/proc/set_owner(obj/machinery/computer/libraryconsole/admin_only_do_not_map_in_you_fucker/owner) + owner_ref = WEAKREF(owner) + view_raw = owner.view_raw + +/datum/admin_book_viewer/ui_interact(mob/user, datum/tgui/ui) + . = ..() + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AdminBookViewer") + ui.set_autoupdate(FALSE) // Nothing is changing here brother + ui.open() + +/datum/admin_book_viewer/ui_status(mob/user) + if(!check_rights_for(user.client, R_BAN)) + return UI_CLOSE + return UI_INTERACTIVE + +/datum/admin_book_viewer/ui_data(mob/user) + var/list/data = list() + data["view_raw"] = view_raw + data["id"] = id + data["author"] = author + data["title"] = title + data["content"] = content + data["category"] = category + data["author_ckey"] = author_ckey + data["creation_time"] = creation_time + data["deleted"] = deleted + data["creation_round"] = creation_round + data["history"] = list() + for(var/datum/book_history_entry/entry as anything in history) + data["history"] += list(entry.serialize()) + + return data + +#undef BOOK_ADMIN_DELETE +#undef BOOK_ADMIN_RESTORE +#undef BOOK_ADMIN_REPORT diff --git a/code/modules/library/barcode_scanner.dm b/code/modules/library/barcode_scanner.dm index 414a6b4301bd..ca20f3626639 100644 --- a/code/modules/library/barcode_scanner.dm +++ b/code/modules/library/barcode_scanner.dm @@ -6,33 +6,22 @@ throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_TINY - /// A weakref to our associated computer - Modes 1 to 3 use this + ///Weakref to the library computer we are connected to. var/datum/weakref/computer_ref - /// Currently scanned book - var/datum/book_info/book_data - /// 0 - Scan only, 1 - Scan and Set Buffer, 2 - Scan and Attempt to Check In, 3 - Scan and Attempt to Add to Inventory - var/mode = 0 + ///The current scanning mode (BARCODE_SCANNER_CHECKIN|BARCODE_SCANNER_INVENTORY) + var/scan_mode = BARCODE_SCANNER_CHECKIN /obj/item/barcodescanner/attack_self(mob/user) - mode += 1 - if(mode > 3) - mode = 0 - to_chat(user, "[src] Status Display:") - var/modedesc - switch(mode) - if(0) - modedesc = "Scan book to local buffer." - if(1) - modedesc = "Scan book to local buffer and set associated computer buffer to match." - if(2) - modedesc = "Scan book to local buffer, attempt to check in scanned book." - if(3) - modedesc = "Scan book to local buffer, attempt to add book to general inventory." - else - modedesc = "ERROR" - to_chat(user, " - Mode [mode] : [modedesc]") - if(computer_ref?.resolve()) - to_chat(user, "Computer has been associated with this unit.") - else - to_chat(user, "No associated computer found. Only local scans will function properly.") - to_chat(user, "\n") + . = ..() + if(.) + return + if(!computer_ref?.resolve()) + user.balloon_alert(user, "not connected to computer!") + return + switch(scan_mode) + if(BARCODE_SCANNER_CHECKIN) + scan_mode = BARCODE_SCANNER_INVENTORY + user.balloon_alert(user, "inventory adding mode") + if(BARCODE_SCANNER_INVENTORY) + scan_mode = BARCODE_SCANNER_CHECKIN + user.balloon_alert(user, "check-in mode") diff --git a/code/modules/library/book.dm b/code/modules/library/book.dm index 23a5ecd4656e..e789df8021ff 100644 --- a/code/modules/library/book.dm +++ b/code/modules/library/book.dm @@ -44,11 +44,9 @@ /datum/book_info/proc/set_content_using_paper(obj/item/paper/paper) // Just the paper's raw data. var/raw_content = "" - for(var/datum/paper_input/text_input as anything in paper.raw_text_inputs) - raw_content += text_input.raw_text + raw_content += text_input.to_raw_html() - // Content from paper is never trusted. It it raw, unsanitised, unparsed user input. content = trim(html_encode(raw_content), MAX_PAPER_LENGTH) /datum/book_info/proc/get_content(default="N/A") @@ -112,19 +110,29 @@ AddElement(/datum/element/falling_hazard, damage = 5, wound_bonus = 0, hardhat_safety = TRUE, crushes = FALSE, impact_sound = drop_sound) -/obj/item/book/proc/on_read(mob/living/user) - if(book_data?.content) - user << browse("Penned by [book_data.author].
" + "[book_data.content]", "window=book[window_size != null ? ";size=[window_size]" : ""]") +/obj/item/book/ui_static_data(mob/user) + var/list/data = list() + data["author"] = book_data.get_author() + data["title"] = book_data.get_title() + data["content"] = book_data.get_content() + return data - LAZYINITLIST(user.mind?.book_titles_read) - var/has_not_read_book = isnull(user.mind?.book_titles_read[starting_title]) +/obj/item/book/ui_interact(mob/living/user, datum/tgui/ui) + if(!length(book_data.get_content())) + balloon_alert(user, "this book is blank!") + return - if(has_not_read_book) // any new books give bonus mood + if(istype(user) && !isnull(user.mind)) + LAZYINITLIST(user.mind.book_titles_read) + var/has_not_read_book = !(starting_title in user.mind.book_titles_read) + if(has_not_read_book) user.add_mood_event("book_nerd", /datum/mood_event/book_nerd) - user.mind?.book_titles_read[starting_title] = TRUE - onclose(user, "book") - else - to_chat(user, span_notice("This book is completely blank!")) + user.mind.book_titles_read[starting_title] = TRUE + + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MarkdownViewer", name) + ui.open() /// Generates a random icon state for the book /obj/item/book/proc/gen_random_icon_state() @@ -134,14 +142,16 @@ if(user.is_blind()) to_chat(user, span_warning("You are blind and can't read anything!")) return + if(!user.can_read(src)) return + user.visible_message(span_notice("[user] opens a book titled \"[book_data.title]\" and begins reading intently.")) - on_read(user) + ui_interact(user) -/obj/item/book/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/pen)) - if(!user.can_perform_action(src) || !user.can_write(I)) +/obj/item/book/attackby(obj/item/attacking_item, mob/user, params) + if(istype(attacking_item, /obj/item/pen)) + if(!user.can_perform_action(src) || !user.can_write(attacking_item)) return if(user.is_blind()) to_chat(user, span_warning("As you are trying to write on the book, you suddenly feel very stupid!")) @@ -153,12 +163,12 @@ var/choice = tgui_input_list(usr, "What would you like to change?", "Book Alteration", list("Title", "Contents", "Author", "Cancel")) if(isnull(choice)) return - if(!user.can_perform_action(src) || !user.can_write(I)) + if(!user.can_perform_action(src) || !user.can_write(attacking_item)) return switch(choice) if("Title") var/newtitle = reject_bad_text(tgui_input_text(user, "Write a new title", "Book Title", max_length = 30)) - if(!user.can_perform_action(src) || !user.can_write(I)) + if(!user.can_perform_action(src) || !user.can_write(attacking_item)) return if (length_char(newtitle) > 30) to_chat(user, span_warning("That title won't fit on the cover!")) @@ -170,7 +180,7 @@ book_data.set_title(html_decode(newtitle)) //Don't want to double encode here if("Contents") var/content = tgui_input_text(user, "Write your book's contents (HTML NOT allowed)", "Book Contents", multiline = TRUE) - if(!user.can_perform_action(src) || !user.can_write(I)) + if(!user.can_perform_action(src) || !user.can_write(attacking_item)) return if(!content) to_chat(user, span_warning("The content is invalid.")) @@ -178,30 +188,22 @@ book_data.set_content(html_decode(content)) if("Author") var/author = tgui_input_text(user, "Write the author's name", "Author Name") - if(!user.can_perform_action(src) || !user.can_write(I)) + if(!user.can_perform_action(src) || !user.can_write(attacking_item)) return if(!author) to_chat(user, span_warning("The name is invalid.")) return book_data.set_author(html_decode(author)) //Setting this encodes, don't want to double up - else - return - else if(istype(I, /obj/item/barcodescanner)) - var/obj/item/barcodescanner/scanner = I + else if(istype(attacking_item, /obj/item/barcodescanner)) + var/obj/item/barcodescanner/scanner = attacking_item var/obj/machinery/computer/libraryconsole/bookmanagement/computer = scanner.computer_ref?.resolve() if(!computer) - to_chat(user, span_alert("[scanner]'s screen flashes: 'No associated computer found!'")) - return ..() - - scanner.book_data = book_data.return_copy() - switch(scanner.mode) - if(0) - to_chat(user, span_notice("[scanner]'s screen flashes: 'Book stored in buffer.'")) - if(1) - computer.buffer_book = book_data.return_copy() - to_chat(user, span_notice("[scanner]'s screen flashes: 'Book stored in buffer. Book title stored in associated computer buffer.'")) - if(2) + user.balloon_alert(user, "not connected to computer!") + return + + switch(scanner.scan_mode) + if(BARCODE_SCANNER_CHECKIN) var/list/checkouts = computer.checkouts for(var/checkout_ref in checkouts) var/datum/borrowbook/maybe_ours = checkouts[checkout_ref] @@ -209,17 +211,18 @@ continue checkouts -= checkout_ref computer.checkout_update() - to_chat(user, span_notice("[scanner]'s screen flashes: 'Book stored in buffer. Book has been checked in.'")) + user.balloon_alert(user, "book checked in") return - to_chat(user, span_notice("[scanner]'s screen flashes: 'Book stored in buffer. No active check-out record found for current title.'")) - if(3) + user.balloon_alert(user, "book not checked out!") + return + if(BARCODE_SCANNER_INVENTORY) var/datum/book_info/our_copy = book_data.return_copy() computer.inventory[ref(our_copy)] = our_copy computer.inventory_update() - to_chat(user, span_notice("[scanner]'s screen flashes: 'Book stored in buffer. Title added to general inventory.'")) + user.balloon_alert(user, "book added to inventory") - else if((istype(I, /obj/item/knife) || I.tool_behaviour == TOOL_WIRECUTTER) && !(flags_1 & HOLOGRAM_1)) + else if((istype(attacking_item, /obj/item/knife) || attacking_item.tool_behaviour == TOOL_WIRECUTTER) && !(flags_1 & HOLOGRAM_1)) to_chat(user, span_notice("You begin to carve out [book_data.title]...")) if(do_after(user, 30, target = src)) to_chat(user, span_notice("You carve out the pages from [book_data.title]! You didn't want to read it anyway.")) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 6c346d67a7b5..2b42f615b495 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -9,15 +9,12 @@ * Book Binder */ -#define DEFAULT_UPLOAD_CATAGORY "Fiction" -#define DEFAULT_SEARCH_CATAGORY "Any" - -///How many books should we load per page? -#define BOOKS_PER_PAGE 18 -///How many checkout records should we load per page? -#define CHECKOUTS_PER_PAGE 17 -///How many inventory items should we load per page? -#define INVENTORY_PER_PAGE 19 +GLOBAL_VAR_INIT(library_table_modified, 0) + +/// Increments every time WE update the library db table, causes all existing consoles to repull when they next check +/proc/library_updated() + GLOB.library_table_modified = (GLOB.library_table_modified + 1) % (SHORT_REAL_LIMIT - 1) + /* * Library Public Computer */ @@ -28,8 +25,9 @@ icon_keyboard = null circuit = /obj/item/circuitboard/computer/libraryconsole desc = "Checked out books MUST be returned on time." - // This fixes consoles to be ON the tables, rather than their keyboards floating a bit - pixel_y = 8 + anchored_tabletop_offset = 8 + ///The current book id we're searching for + var/book_id = null ///The current title we're searching for var/title = "" ///The category we're searching for @@ -74,6 +72,7 @@ data["category"] = category data["author"] = author data["title"] = title + data["book_id"] = book_id data["page_count"] = page_count + 1 //Increase these by one so it looks like we're not indexing at 0 data["our_page"] = search_page + 1 data["pages"] = page_content @@ -86,6 +85,12 @@ if(.) return switch(action) + if("set_search_id") + var/newid = text2num(params["id"]) + if(newid != book_id) + params_changed = TRUE + book_id = newid + return TRUE if("set_search_title") var/newtitle = params["title"] if(newtitle != title) @@ -185,7 +190,7 @@ return TRUE /obj/machinery/computer/libraryconsole/proc/hash_search_info() - return "[title]-[author]-[category]-[search_page]-[page_count]" + return "[GLOB.library_table_modified]-[book_id]-[title]-[author]-[category]-[search_page]-[page_count]" /obj/machinery/computer/libraryconsole/proc/update_page_contents() if(sending_request) //Final defense against nerds spamming db requests @@ -199,9 +204,10 @@ AND author LIKE CONCAT('%',:author,'%') AND title LIKE CONCAT('%',:title,'%') AND (:category = 'Any' OR category = :category) + [book_id ? "AND id LIKE CONCAT('%', :book_id, '%')" : ""] ORDER BY id DESC LIMIT :skip, :take - "}, list("author" = author, "title" = title, "category" = category, "skip" = BOOKS_PER_PAGE * search_page, "take" = BOOKS_PER_PAGE)) + "}, list("author" = author, "title" = title, "book_id" = book_id, "category" = category, "skip" = BOOKS_PER_PAGE * search_page, "take" = BOOKS_PER_PAGE)) var/query_succeeded = query_library_list_books.Execute() sending_request = FALSE @@ -226,7 +232,8 @@ AND author LIKE CONCAT('%',:author,'%') AND title LIKE CONCAT('%',:title,'%') AND (:category = 'Any' OR category = :category) - "}, list("author" = author, "title" = title, "category" = category)) + [book_id ? "AND id LIKE CONCAT('%', :book_id, '%')" : ""] + "}, list("author" = author, "title" = title, "book_id" = book_id, "category" = category)) if(!query_library_count_books.warn_execute()) qdel(query_library_count_books) @@ -286,8 +293,6 @@ var/screen_state = LIBRARY_INVENTORY ///Should we show the buttons required for changing screens? var/show_dropdown = TRUE - ///The name of the book being checked out - var/datum/book_info/buffer_book ///List of checked out books, /datum/borrowbook var/list/checkouts = list() ///The current max amount of checkout pages allowed @@ -302,8 +307,6 @@ var/inventory_page = 0 ///Should we load our inventory from the bookselves in our area? var/dynamic_inv_load = FALSE - ///Toggled if some bit of code wants to override hashing and allow for page updates - var/ignore_hash = FALSE ///Book scanner that will be used when uploading books to the Archive var/datum/weakref/scanner ///Our cooldown on using the printer @@ -316,6 +319,25 @@ if(mapload) dynamic_inv_load = TRUE //Only load in stuff if we were placed during mapload +/obj/machinery/computer/libraryconsole/bookmanagement/ui_static_data(mob/user) + var/list/data = list() + data["inventory"] = list() + var/inventory_len = length(inventory) + if(inventory_len) + for(var/id in ((INVENTORY_PER_PAGE * inventory_page) + 1) to min(INVENTORY_PER_PAGE * (inventory_page + 1), inventory_len)) + var/book_ref = inventory[id] + var/datum/book_info/info = inventory[book_ref] + data["inventory"] += list(list( + "id" = id, + "ref" = book_ref, + "title" = info.get_title(), + "author" = info.get_author(), + )) + data["has_inventory"] = !!inventory_len + data["inventory_page"] = inventory_page + 1 + data["inventory_page_count"] = inventory_page_count + 1 + return data + /obj/machinery/computer/libraryconsole/bookmanagement/ui_data(mob/user) var/list/data = list() data["can_db_request"] = can_db_request() @@ -327,23 +349,6 @@ load_nearby_books() switch(screen_state) - if(LIBRARY_INVENTORY) - data["inventory"] = list() - var/inventory_len = length(inventory) - if(inventory_len) - for(var/id in ((INVENTORY_PER_PAGE * inventory_page) + 1) to min(INVENTORY_PER_PAGE * (inventory_page + 1), inventory_len)) - var/book_ref = inventory[id] - var/datum/book_info/info = inventory[book_ref] - data["inventory"] += list(list( - "id" = id, - "ref" = book_ref, - "title" = info.get_title(), - "author" = info.get_author(), - )) - data["has_inventory"] = !!inventory_len - data["inventory_page"] = inventory_page + 1 - data["inventory_page_count"] = inventory_page_count + 1 - if(LIBRARY_CHECKOUT) data["checkouts"] = list() var/checkout_len = length(checkouts) @@ -360,9 +365,8 @@ "overdue" = (timedue <= 0), "due_in_minutes" = timedue, "title" = loan.book_data.get_title(), - "author" = loan.book_data.get_author() + "author" = loan.book_data.get_author(), )) - data["checking_out"] = buffer_book?.get_title() data["has_checkout"] = !!checkout_len data["checkout_page"] = checkout_page + 1 data["checkout_page_count"] = checkout_page_count + 1 @@ -443,14 +447,22 @@ inventory_update() return TRUE if("checkout") + var/list/available = list() + for(var/id in inventory) + var/datum/book_info/book_infos = inventory[id] + available[book_infos.title] = book_infos + var/book_name = params["book_name"] + if(QDELETED(src) || !book_name) + return + var/datum/book_info/book_info = available[book_name] + if(!istype(book_info)) + return var/datum/borrowbook/loan = new /datum/borrowbook - var/datum/book_info/book_data = buffer_book?.return_copy() || new /datum/book_info - book_data.set_title(params["book_name"]) var/loan_to = copytext(sanitize(params["loaned_to"]), 1, MAX_NAME_LEN) var/checkoutperiod = max(params["checkout_time"], 1) - loan.book_data = book_data.return_copy() + loan.book_data = book_info.return_copy() loan.loanedto = loan_to loan.checkout = world.time loan.duedate = world.time + (checkoutperiod MINUTES) @@ -531,38 +543,17 @@ set_screen_state(MIN_LIBRARY) return TRUE -/obj/machinery/computer/libraryconsole/bookmanagement/attackby(obj/item/W, mob/user, params) - if(!istype(W, /obj/item/barcodescanner)) +/obj/machinery/computer/libraryconsole/bookmanagement/attackby(obj/item/weapon, mob/user, params) + if(!istype(weapon, /obj/item/barcodescanner)) return ..() - var/obj/item/barcodescanner/scanner = W + var/obj/item/barcodescanner/scanner = weapon + if(scanner.computer_ref?.resolve() == src) + balloon_alert(user, "already connected!") + return scanner.computer_ref = WEAKREF(src) - to_chat(user, span_notice("[scanner]'s associated machine has been set to [src].")) + balloon_alert(user, "scanner connected") audible_message(span_hear("[src] lets out a low, short blip.")) - if(!scanner.book_data) - return - - var/datum/book_info/scanner_book = scanner.book_data.return_copy() - switch(scanner.mode) - if(1) - buffer_book = scanner_book - to_chat(user, span_notice("[scanner]'s screen flashes: 'Book title stored in computer buffer.'")) - if(2) - for(var/checkout_ref in checkouts) - var/datum/borrowbook/maybe_ours = checkouts[checkout_ref] - if(!scanner_book.compare(maybe_ours.book_data)) - continue - checkouts -= checkout_ref - checkout_update() - to_chat(user, span_notice("[scanner]'s screen flashes: 'Book has been checked in.'")) - return - - to_chat(user, span_notice("[scanner]'s screen flashes: 'No active check-out record found for current title.'")) - if(3) - inventory[ref(scanner_book)] = scanner_book - inventory_update() - to_chat(user, span_notice("[scanner]'s screen flashes: 'Title added to general inventory.'")) - /obj/machinery/computer/libraryconsole/bookmanagement/emag_act(mob/user, obj/item/card/emag/emag_card) if(!density || obj_flags & EMAGGED) return FALSE @@ -570,14 +561,6 @@ balloon_alert(user, "forbidden knowledge unlocked") return TRUE -/obj/machinery/computer/libraryconsole/bookmanagement/has_anything_changed() - if(..()) - return TRUE - if(!ignore_hash) - return FALSE - ignore_hash = FALSE - return TRUE - /obj/machinery/computer/libraryconsole/bookmanagement/proc/set_screen_state(new_state) screen_state = clamp(new_state, MIN_LIBRARY, MAX_LIBRARY) @@ -634,8 +617,8 @@ return usr.log_message(msg, LOG_GAME) qdel(query_library_upload) + library_updated() say("Upload Complete. Uploaded title will be available for printing in a moment") - ignore_hash = TRUE update_db_info() /// Call this proc to attempt a print. It will return false if the print failed, true otherwise, longside some ux @@ -778,8 +761,13 @@ icon_state = "binder" desc = "Only intended for binding paper products." density = TRUE + + /// Are we currently binding a book? var/busy = FALSE + /// Name of the author for the book, set by scanning your ID. + var/scanned_name + /obj/machinery/bookbinder/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) @@ -788,17 +776,32 @@ /obj/machinery/bookbinder/attackby(obj/hitby, mob/user, params) if(istype(hitby, /obj/item/paper)) prebind_book(user, hitby) - return + return TRUE + + if(isidcard(hitby)) + var/obj/item/card/id/idcard = hitby + scanned_name = idcard.registered_name + balloon_alert(user, "scanned") + return TRUE + return ..() /obj/machinery/bookbinder/proc/prebind_book(mob/user, obj/item/paper/draw_from) if(machine_stat) return + if(busy) to_chat(user, span_warning("The book binder is busy. Please wait for completion of previous operation.")) return + + if(!scanned_name) + scanned_name = "unknown author" + say("No ID detected. Please scan your ID if you would like to be credited for this book. Otherwise please enter your paper again.") + return + if(!user.transferItemToLoc(draw_from, src)) return + user.visible_message(span_notice("[user] loads some paper into [src]."), span_notice("You load some paper into [src].")) audible_message(span_hear("[src] begins to hum as it warms up its printing drums.")) busy = TRUE @@ -810,21 +813,21 @@ busy = FALSE if(!draw_from) //What the fuck did you do return + if(machine_stat) draw_from.forceMove(drop_location()) return + visible_message(span_notice("[src] whirs as it prints and binds a new book.")) var/obj/item/book/bound_book = new(loc) bound_book.book_data.set_content_using_paper(draw_from) + bound_book.book_data.set_author(scanned_name, trusted = FALSE) bound_book.name = "Print Job #" + "[rand(100, 999)]" bound_book.gen_random_icon_state() + scanned_name = null + qdel(draw_from) -#undef BOOKS_PER_PAGE -#undef CHECKOUTS_PER_PAGE -#undef DEFAULT_SEARCH_CATAGORY -#undef DEFAULT_UPLOAD_CATAGORY -#undef INVENTORY_PER_PAGE #undef LIBRARY_ARCHIVE #undef LIBRARY_CHECKOUT #undef LIBRARY_INVENTORY diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 3000c4b97148..571adde8b212 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -1,7 +1,6 @@ // The proc you should always use to set the light of this atom. // Nonesensical value for l_color default, so we can detect if it gets set to null. -#define NONSENSICAL_VALUE -99999 /atom/proc/set_light(l_outer_range, l_inner_range, l_power, l_falloff_curve = LIGHTING_DEFAULT_FALLOFF_CURVE, l_color = NONSENSICAL_VALUE, l_on) if(!isnum(l_power) && !isnull(l_power)) return @@ -31,8 +30,6 @@ update_light() -#undef NONSENSICAL_VALUE - /// Will update the light (duh). /// Creates or destroys it if needed, makes it update values, makes sure it's got the correct source turf... /atom/proc/update_light() diff --git a/code/modules/logging/categories/log_category_monke.dm b/code/modules/logging/categories/log_category_monke.dm index cad1619ce6d8..d137d9a7a373 100644 --- a/code/modules/logging/categories/log_category_monke.dm +++ b/code/modules/logging/categories/log_category_monke.dm @@ -43,3 +43,7 @@ config_flag = /datum/config_entry/flag/log_antag_rep /datum/config_entry/flag/log_antag_rep + +/datum/log_category/storyteller + category = LOG_CATEGORY_STORYTELLER + config_flag = /datum/config_entry/flag/log_storyteller diff --git a/code/modules/logging/log_holder.dm b/code/modules/logging/log_holder.dm index c9b94b40c4e5..37f2ca4cae60 100644 --- a/code/modules/logging/log_holder.dm +++ b/code/modules/logging/log_holder.dm @@ -339,7 +339,7 @@ GENERAL_PROTECT_DATUM(/datum/log_holder) var/datum/data = data_list[key] if(isnull(data)) - // do nothing - nulls are allowed + pass() // nulls are allowed else if(islist(data)) data = recursive_jsonify(data, semvers) diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm index e17542f3a1fb..730739a9a4f8 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm @@ -142,9 +142,14 @@ open_sound = 'sound/effects/shovel_dig.ogg' close_sound = 'sound/effects/shovel_dig.ogg' cutting_tool = /obj/item/shovel + can_install_electronics = FALSE + elevation = 4 //It's a small mound. + elevation_open = 0 + + /// will this grave give you nightmares when opened var/lead_tomb = FALSE + /// was this grave opened for the first time var/first_open = FALSE - can_install_electronics = FALSE /obj/structure/closet/crate/grave/filled/PopulateContents() //GRAVEROBBING IS NOW A FEATURE ..() diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm index e21b73659f4f..25490e6562ad 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm @@ -335,9 +335,6 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) /turf/closed/indestructible/hoteldoor/attack_larva(mob/user, list/modifiers) promptExit(user) -/turf/closed/indestructible/hoteldoor/attack_slime(mob/user, list/modifiers) - promptExit(user) - /turf/closed/indestructible/hoteldoor/attack_robot(mob/user) if(get_dist(get_turf(src), get_turf(user)) <= 1) promptExit(user) diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 14751f3986c2..3d1065149d63 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -110,6 +110,7 @@ layer = DOOR_HELPER_LAYER late = TRUE +/* replaced in monkestation\code\modules\mapping\mapping_helpers.dm /obj/effect/mapping_helpers/airlock/Initialize(mapload) . = ..() if(!mapload) @@ -121,6 +122,7 @@ log_mapping("[src] failed to find an airlock at [AREACOORD(src)]") else payload(airlock) +*/ /obj/effect/mapping_helpers/airlock/LateInitialize() . = ..() @@ -651,8 +653,15 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) name = "Dead Body placer" late = TRUE icon_state = "deadbodyplacer" + ///if TRUE, was spawned out of mapload. var/admin_spawned - var/bodycount = 2 //number of bodies to spawn + ///number of bodies to spawn + var/bodycount = 3 + /// These species IDs will be barred from spawning if morgue_cadaver_disable_nonhumans is disabled (In the future, we can also dehardcode this) + var/list/blacklisted_from_rng_placement = list( + SPECIES_ETHEREAL, // they revive on death which is bad juju + SPECIES_HUMAN, // already have a 50% chance of being selected + ) /obj/effect/mapping_helpers/dead_body_placer/Initialize(mapload) . = ..() @@ -661,23 +670,23 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) admin_spawned = TRUE /obj/effect/mapping_helpers/dead_body_placer/LateInitialize() - var/area/a = get_area(src) - var/list/trays = list() - for (var/i in a.contents) - if (istype(i, /obj/structure/bodycontainer/morgue)) - if(admin_spawned) - var/obj/structure/bodycontainer/morgue/early_morgue_tray = i - if(early_morgue_tray.connected.loc != early_morgue_tray) - continue - trays += i - if(!trays.len) + var/area/morgue_area = get_area(src) + var/list/obj/structure/bodycontainer/morgue/trays = list() + for(var/turf/area_turf as anything in morgue_area.get_contained_turfs()) + var/obj/structure/bodycontainer/morgue/morgue_tray = locate() in area_turf + if(isnull(morgue_tray) || !morgue_tray.beeper || morgue_tray.connected.loc != morgue_tray) + continue + trays += morgue_tray + + var/numtrays = length(trays) + if(numtrays == 0) if(admin_spawned) message_admins("[src] spawned at [ADMIN_VERBOSEJMP(src)] failed to find a closed morgue to spawn a body!") else log_mapping("[src] at [x],[y] could not find any morgues.") return - var/reuse_trays = (trays.len < bodycount) //are we going to spawn more trays than bodies? + var/reuse_trays = (numtrays < bodycount) //are we going to spawn more trays than bodies? var/use_species = !(CONFIG_GET(flag/morgue_cadaver_disable_nonhumans)) var/species_probability = CONFIG_GET(number/morgue_cadaver_other_species_probability) @@ -686,35 +695,39 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) if(use_species) var/list/temp_list = get_selectable_species() usable_races = temp_list.Copy() - usable_races -= SPECIES_ETHEREAL //they revive on death which is bad juju - LAZYREMOVE(usable_races, SPECIES_HUMAN) - if(!usable_races) + LAZYREMOVE(usable_races, blacklisted_from_rng_placement) + if(!LAZYLEN(usable_races)) notice("morgue_cadaver_disable_nonhumans. There are no valid roundstart nonhuman races enabled. Defaulting to humans only!") if(override_species) warning("morgue_cadaver_override_species BEING OVERRIDEN since morgue_cadaver_disable_nonhumans is disabled.") else if(override_species) - usable_races += override_species + LAZYADD(usable_races, override_species) - for (var/i = 1 to bodycount) + var/guaranteed_human_spawned = FALSE + for (var/i in 1 to bodycount) var/obj/structure/bodycontainer/morgue/morgue_tray = reuse_trays ? pick(trays) : pick_n_take(trays) var/obj/structure/closet/body_bag/body_bag = new(morgue_tray.loc) - var/mob/living/carbon/human/new_human = new /mob/living/carbon/human(morgue_tray.loc, 1) + var/mob/living/carbon/human/new_human = new(morgue_tray.loc) var/species_to_pick - if(LAZYLEN(usable_races)) - if(!species_probability) - species_probability = 50 - stack_trace("WARNING: morgue_cadaver_other_species_probability CONFIG SET TO 0% WHEN SPAWNING. DEFAULTING TO [species_probability]%.") - if(prob(species_probability)) - species_to_pick = pick(usable_races) - var/datum/species/new_human_species = GLOB.species_list[species_to_pick] - if(new_human_species) - new_human.set_species(new_human_species) - new_human_species = new_human.dna.species - new_human_species.randomize_features(new_human) - new_human.fully_replace_character_name(new_human.real_name, new_human_species.random_name(new_human.gender, TRUE, TRUE)) - else - stack_trace("failed to spawn cadaver with species ID [species_to_pick]") //if it's invalid they'll just be a human, so no need to worry too much aside from yelling at the server owner lol. + + if(guaranteed_human_spawned && use_species) + if(LAZYLEN(usable_races)) + if(!isnum(species_probability)) + species_probability = 50 + stack_trace("WARNING: morgue_cadaver_other_species_probability CONFIG SET TO 0% WHEN SPAWNING. DEFAULTING TO [species_probability]%.") + if(prob(species_probability)) + species_to_pick = pick(usable_races) + var/datum/species/new_human_species = GLOB.species_list[species_to_pick] + if(new_human_species) + new_human.set_species(new_human_species) + new_human_species = new_human.dna.species + new_human_species.randomize_features(new_human) + new_human.fully_replace_character_name(new_human.real_name, new_human_species.random_name(new_human.gender, TRUE, TRUE)) + else + stack_trace("failed to spawn cadaver with species ID [species_to_pick]") //if it's invalid they'll just be a human, so no need to worry too much aside from yelling at the server owner lol. + else + guaranteed_human_spawned = TRUE body_bag.insert(new_human, TRUE) body_bag.close() @@ -722,18 +735,16 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) body_bag.forceMove(morgue_tray) new_human.death() //here lies the mans, rip in pepperoni. - for (var/part in new_human.organs) //randomly remove organs from each body, set those we keep to be in stasis + for (var/obj/item/organ/internal/part in new_human.organs) //randomly remove organs from each body, set those we keep to be in stasis if (prob(40)) qdel(part) else - var/obj/item/organ/O = part - O.organ_flags |= ORGAN_FROZEN + part.organ_flags |= ORGAN_FROZEN morgue_tray.update_appearance() qdel(src) - //On Ian's birthday, the hop's office is decorated. /obj/effect/mapping_helpers/ianbirthday name = "Ian's Bday Helper" diff --git a/code/modules/meteors/meteor_spawning.dm b/code/modules/meteors/meteor_spawning.dm index eac365bc2a83..97c359d03bfb 100644 --- a/code/modules/meteors/meteor_spawning.dm +++ b/code/modules/meteors/meteor_spawning.dm @@ -109,7 +109,7 @@ new_changeling.log_message("was spawned as a midround space changeling by an event.", LOG_GAME) var/datum/antagonist/changeling/changeling_datum = locate() in player_mind.antag_datums - changeling_datum.give_power(/datum/action/changeling/suit/organic_space_suit) + changeling_datum.give_power(/datum/action/changeling/void_adaption) changeling_datum.give_power(/datum/action/changeling/weapon/arm_blade) new_changeling.equipOutfit(/datum/outfit/changeling_space) diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index d0abc0a045b3..65b80f0196d0 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -127,6 +127,7 @@ /obj/item/spear, /obj/item/tank/internals, ) + resistance_flags = FIRE_PROOF armor_type = /datum/armor/cloak_goliath hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath body_parts_covered = CHEST|GROIN|ARMS @@ -169,6 +170,7 @@ clothing_flags = SNUG_FIT flags_inv = HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR transparent_protection = HIDEMASK + resistance_flags = FIRE_PROOF /datum/armor/cloakhood_goliath melee = 35 diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index beaa8b5c8808..f42d572cb6cd 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -101,6 +101,7 @@ desc = "A stable hole in the universe made by a wormhole jaunter. Turbulent doesn't even begin to describe how rough passage through one of these is, but at least it will always get you somewhere near a beacon." mech_sized = TRUE //save your ripley innate_accuracy_penalty = 6 + light_on = FALSE /obj/effect/portal/jaunt_tunnel/teleport(atom/movable/M) . = ..() diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index 4f93909881ca..677f00133a30 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -32,110 +32,133 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) beacon = chosen_beacon to_chat(user, span_notice("You link the extraction pack to the beacon system.")) -/obj/item/extraction_pack/afterattack(atom/movable/A, mob/living/carbon/human/user, flag, params) +/obj/item/extraction_pack/afterattack(atom/movable/thing, mob/living/carbon/human/user, proximity_flag, params) . = ..() . |= AFTERATTACK_PROCESSED_ITEM - if(!beacon) - to_chat(user, span_warning("[src] is not linked to a beacon, and cannot be used!")) - return - if(!(beacon in GLOB.total_extraction_beacons)) + + if(QDELETED(beacon)) + balloon_alert(user, "not linked") beacon = null - to_chat(user, span_warning("The connected beacon has been destroyed!")) return + if(!can_use_indoors) - var/area/area = get_area(A) + var/area/area = get_area(thing) if(!area.outdoors) - to_chat(user, span_warning("[src] can only be used on things that are outdoors!")) + balloon_alert(user, "not outdoors") return - if(!flag) + + if(!proximity_flag || !istype(thing)) return - if(!istype(A)) + + if(!safe_for_living_creatures && check_for_living_mobs(thing)) + to_chat(user, span_warning("[src] is not safe for use with living creatures, they wouldn't survive the trip back!")) + balloon_alert(user, "not safe!") return + + if(!isturf(thing.loc)) // no extracting stuff inside other stuff + return + if(thing.anchored || (thing.move_resist > max_force_fulton)) + return + + balloon_alert_to_viewers("attaching...") + playsound(thing, 'sound/items/zip.ogg', vol = 50, vary = TRUE) + if(isliving(thing)) + var/mob/living/creature = thing + if(creature.mind) + to_chat(thing, span_userdanger("You are being extracted! Stand still to proceed.")) + + if(!do_after(user, 5 SECONDS, target = thing)) + return + + balloon_alert_to_viewers("extracting!") + if(loc == user) + user.back?.atom_storage?.attempt_insert(src, user) + uses_left-- + + if(uses_left <= 0) + user.transferItemToLoc(src, thing, TRUE) + + var/mutable_appearance/balloon + var/mutable_appearance/balloon2 + var/mutable_appearance/balloon3 + + if(isliving(thing)) + var/mob/living/creature = thing + creature.Paralyze(32 SECONDS) // Keep them from moving during the duration of the extraction + if(creature.buckled) + creature.buckled.unbuckle_mob(creature, TRUE) // Unbuckle them to prevent anchoring problems else - if(!safe_for_living_creatures && check_for_living_mobs(A)) - to_chat(user, span_warning("[src] is not safe for use with living creatures, they wouldn't survive the trip back!")) - return - if(!isturf(A.loc)) // no extracting stuff inside other stuff - return - if(A.anchored || (A.move_resist > max_force_fulton)) - return - to_chat(user, span_notice("You start attaching the pack to [A]...")) - if(do_after(user,50,target=A)) - to_chat(user, span_notice("You attach the pack to [A] and activate it.")) - if(loc == user && istype(user.back, /obj/item/storage/backpack)) - var/obj/item/storage/backpack/B = user.back - B.atom_storage?.attempt_insert(src, user) - uses_left-- - if(uses_left <= 0) - user.transferItemToLoc(src, A, TRUE) - var/mutable_appearance/balloon - var/mutable_appearance/balloon2 - var/mutable_appearance/balloon3 - if(isliving(A)) - var/mob/living/M = A - M.Paralyze(320) // Keep them from moving during the duration of the extraction - if(M.buckled) - M.buckled.unbuckle_mob(M, TRUE) // Unbuckle them to prevent anchoring problems - else - A.set_anchored(TRUE) - A.set_density(FALSE) - var/obj/effect/extraction_holder/holder_obj = new(A.loc) - holder_obj.appearance = A.appearance - A.forceMove(holder_obj) - balloon2 = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_expand") - balloon2.pixel_y = 10 - balloon2.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM - holder_obj.add_overlay(balloon2) - sleep(0.4 SECONDS) - balloon = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_balloon") - balloon.pixel_y = 10 - balloon.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM - holder_obj.cut_overlay(balloon2) - holder_obj.add_overlay(balloon) - playsound(holder_obj.loc, 'sound/items/fultext_deploy.ogg', 50, TRUE, -3) - animate(holder_obj, pixel_z = 10, time = 20) - sleep(2 SECONDS) - animate(holder_obj, pixel_z = 15, time = 10) - sleep(1 SECONDS) - animate(holder_obj, pixel_z = 10, time = 10) - sleep(1 SECONDS) - animate(holder_obj, pixel_z = 15, time = 10) - sleep(1 SECONDS) - animate(holder_obj, pixel_z = 10, time = 10) - sleep(1 SECONDS) - playsound(holder_obj.loc, 'sound/items/fultext_launch.ogg', 50, TRUE, -3) - animate(holder_obj, pixel_z = 1000, time = 30) - if(ishuman(A)) - var/mob/living/carbon/human/L = A - L.SetUnconscious(0) - L.remove_status_effect(/datum/status_effect/drowsiness) - L.SetSleeping(0) - sleep(3 SECONDS) - var/list/flooring_near_beacon = list() - for(var/turf/open/floor in orange(1, beacon)) - flooring_near_beacon += floor - holder_obj.forceMove(pick(flooring_near_beacon)) - animate(holder_obj, pixel_z = 10, time = 50) - sleep(5 SECONDS) - animate(holder_obj, pixel_z = 15, time = 10) - sleep(1 SECONDS) - animate(holder_obj, pixel_z = 10, time = 10) - sleep(1 SECONDS) - balloon3 = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_retract") - balloon3.pixel_y = 10 - balloon3.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM - holder_obj.cut_overlay(balloon) - holder_obj.add_overlay(balloon3) - sleep(0.4 SECONDS) - holder_obj.cut_overlay(balloon3) - A.set_anchored(FALSE) // An item has to be unanchored to be extracted in the first place. - A.set_density(initial(A.density)) - animate(holder_obj, pixel_z = 0, time = 5) - sleep(0.5 SECONDS) - A.forceMove(holder_obj.loc) - qdel(holder_obj) - if(uses_left <= 0) - qdel(src) + thing.set_anchored(TRUE) + thing.set_density(FALSE) + + var/obj/effect/extraction_holder/holder_obj = new(get_turf(thing)) + holder_obj.appearance = thing.appearance + thing.forceMove(holder_obj) + balloon2 = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_expand") + balloon2.pixel_y = 10 + balloon2.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM + holder_obj.add_overlay(balloon2) + + sleep(0.4 SECONDS) + + balloon = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_balloon") + balloon.pixel_y = 10 + balloon.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM + holder_obj.cut_overlay(balloon2) + holder_obj.add_overlay(balloon) + playsound(holder_obj.loc, 'sound/items/fultext_deploy.ogg', vol = 50, vary = TRUE, extrarange = -3) + + animate(holder_obj, pixel_z = 10, time = 2 SECONDS, flags = ANIMATION_RELATIVE) + animate(pixel_z = 5, time = 1 SECONDS, flags = ANIMATION_RELATIVE) + animate(pixel_z = -5, time = 1 SECONDS, flags = ANIMATION_RELATIVE) + animate(pixel_z = 5, time = 1 SECONDS, flags = ANIMATION_RELATIVE) + animate(pixel_z = -5, time = 1 SECONDS, flags = ANIMATION_RELATIVE) + sleep(6 SECONDS) + + playsound(holder_obj.loc, 'sound/items/fultext_launch.ogg', vol = 50, vary = TRUE, extrarange = -3) + animate(holder_obj, pixel_z = 1000, time = 3 SECONDS, flags = ANIMATION_RELATIVE) + + if(ishuman(thing)) + var/mob/living/carbon/human/creature = thing + creature.SetUnconscious(0) + creature.remove_status_effect(/datum/status_effect/drowsiness) + creature.SetSleeping(0) + + sleep(3 SECONDS) + + var/turf/flooring_near_beacon = list() + var/turf/beacon_turf = get_turf(beacon) + for(var/turf/floor as anything in RANGE_TURFS(1, beacon_turf)) + if(!floor.is_blocked_turf()) + flooring_near_beacon += floor + + if(!length(flooring_near_beacon)) + flooring_near_beacon += beacon_turf + + holder_obj.forceMove(pick(flooring_near_beacon)) + + animate(holder_obj, pixel_z = -990, time = 5 SECONDS, flags = ANIMATION_RELATIVE) + animate(pixel_z = 5, time = 1 SECONDS, flags = ANIMATION_RELATIVE) + animate(pixel_z = -5, time = 1 SECONDS, flags = ANIMATION_RELATIVE) + sleep(7 SECONDS) + + balloon3 = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_retract") + balloon3.pixel_y = 10 + balloon3.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM + holder_obj.cut_overlay(balloon) + holder_obj.add_overlay(balloon3) + sleep(0.4 SECONDS) + + holder_obj.cut_overlay(balloon3) + thing.set_anchored(FALSE) // An item has to be unanchored to be extracted in the first place. + thing.set_density(initial(thing.density)) + animate(holder_obj, pixel_z = -10, time = 0.5 SECONDS, flags = ANIMATION_RELATIVE) + sleep(0.5 SECONDS) + + thing.forceMove(holder_obj.loc) + qdel(holder_obj) + if(uses_left <= 0) + qdel(src) /obj/item/fulton_core diff --git a/code/modules/mining/lavaland/megafauna_loot.dm b/code/modules/mining/lavaland/megafauna_loot.dm index 0f07260b0561..89cad07bf573 100644 --- a/code/modules/mining/lavaland/megafauna_loot.dm +++ b/code/modules/mining/lavaland/megafauna_loot.dm @@ -422,7 +422,15 @@ using = TRUE balloon_alert(user, "you hold the scythe up...") ADD_TRAIT(src, TRAIT_NODROP, type) - var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you want to play as [user.real_name]'s soulscythe?", ROLE_PAI, FALSE, 100, POLL_IGNORE_POSSESSED_BLADE) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + "Do you want to play as [user.real_name]'s soulscythe?", + role = ROLE_PAI, + check_jobban = ROLE_PAI, + poll_time = 10 SECONDS, + ignore_category = POLL_IGNORE_POSSESSED_BLADE, + pic_source = src, + role_name_text = "soul scythe" + ) if(LAZYLEN(candidates)) var/mob/dead/observer/picked_ghost = pick(candidates) soul.ckey = picked_ghost.ckey diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index 585fe6f38eb0..5cf3e7572966 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -106,22 +106,25 @@ return var/failText = span_warning("The snake seems unsatisfied with your incomplete oath and returns to its previous place on the rod, returning to its dormant, wooden state. You must stand still while completing your oath!") to_chat(itemUser, span_notice("The wooden snake that was carved into the rod seems to suddenly come alive and begins to slither down your arm! The compulsion to help others grows abnormally strong...")) - if(do_after(itemUser, 40, target = itemUser)) + //The "iscarbon" is to prevent telekinetic grabs using the rod. + //If we don't do this, we create a memory leak if someone uses telekinetic grab on the rod and binds it. + //For consistency (and the safety - we want to prevent this at all costs), we do this on each step. + if(do_after(itemUser, 40, target = itemUser) && iscarbon(src.loc)) itemUser.say("I swear to fulfill, to the best of my ability and judgment, this covenant:", forced = "hippocratic oath") else to_chat(itemUser, failText) return - if(do_after(itemUser, 20, target = itemUser)) + if(do_after(itemUser, 20, target = itemUser) && iscarbon(src.loc)) itemUser.say("I will apply, for the benefit of the sick, all measures that are required, avoiding those twin traps of overtreatment and therapeutic nihilism.", forced = "hippocratic oath") else to_chat(itemUser, failText) return - if(do_after(itemUser, 30, target = itemUser)) + if(do_after(itemUser, 30, target = itemUser) && iscarbon(src.loc)) itemUser.say("I will remember that I remain a member of society, with special obligations to all my fellow human beings, those sound of mind and body as well as the infirm.", forced = "hippocratic oath") else to_chat(itemUser, failText) return - if(do_after(itemUser, 30, target = itemUser)) + if(do_after(itemUser, 30, target = itemUser) && iscarbon(src.loc)) itemUser.say("If I do not violate this oath, may I enjoy life and art, respected while I live and remembered with affection thereafter. May I always act so as to preserve the finest traditions of my calling and may I long experience the joy of healing those who seek my help.", forced = "hippocratic oath") else to_chat(itemUser, failText) diff --git a/code/modules/mob/dead/new_player/login.dm b/code/modules/mob/dead/new_player/login.dm index 6b60c51f61bd..669d7005e424 100644 --- a/code/modules/mob/dead/new_player/login.dm +++ b/code/modules/mob/dead/new_player/login.dm @@ -72,5 +72,4 @@ to_chat(src, "Please set up your character and select \"Ready\". The game will start [tl > 0 ? "in about [DisplayTimeText(tl)]" : "soon"].") - spawn(4 SECONDS) - client.playtitlemusic() + addtimer(CALLBACK(client, TYPE_PROC_REF(/client, playtitlemusic)), 4 SECONDS, TIMER_DELETE_ME) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 5448a3a98134..5706baa595bd 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -257,6 +257,9 @@ if((job.job_flags & JOB_ASSIGN_QUIRKS) && humanc && CONFIG_GET(flag/roundstart_traits)) SSquirks.AssignQuirks(humanc, humanc.client) + var/area/station/arrivals = GLOB.areas_by_type[/area/station/hallway/secondary/entry] + if(humanc && arrivals && !arrivals.power_environ) //arrivals depowered + humanc.put_in_hands(new /obj/item/crowbar/large/emergency(get_turf(humanc))) //if hands full then just drops on the floor log_manifest(character.mind.key,character.mind,character,latejoin = TRUE) if(humanc) diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm index 887075483843..90b147e0aff1 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -1571,11 +1571,12 @@ /datum/sprite_accessory/socks/bee_knee name = "Knee-high (Bee)" icon_state = "bee_knee" - +/* +MONKESTATION EDIT /datum/sprite_accessory/socks/black_knee name = "Knee-high (Black)" icon_state = "black_knee" - +*/ /datum/sprite_accessory/socks/commie_knee name = "Knee-High (Commie)" icon_state = "commie_knee" @@ -1608,13 +1609,17 @@ name = "Knee-high (White)" icon_state = "white_knee" + /datum/sprite_accessory/socks/fishnet_knee name = "Knee-high (Fishnet)" icon_state = "fishnet_knee" +/* +MONKESTATION EDIT /datum/sprite_accessory/socks/black_norm name = "Normal (Black)" icon_state = "black_norm" +*/ /datum/sprite_accessory/socks/white_norm name = "Normal (White)" @@ -1623,11 +1628,12 @@ /datum/sprite_accessory/socks/pantyhose name = "Pantyhose" icon_state = "pantyhose" - +/* +MONKESTATION EDIT /datum/sprite_accessory/socks/black_short name = "Short (Black)" icon_state = "black_short" - +*/ /datum/sprite_accessory/socks/white_short name = "Short (White)" icon_state = "white_short" @@ -1675,11 +1681,11 @@ /datum/sprite_accessory/socks/bee_thigh name = "Thigh-high (Bee)" icon_state = "bee_thigh" - +/* /datum/sprite_accessory/socks/black_thigh name = "Thigh-high (Black)" icon_state = "black_thigh" - +*/ /datum/sprite_accessory/socks/commie_thigh name = "Thigh-high (Commie)" icon_state = "commie_thigh" @@ -2024,6 +2030,21 @@ center = TRUE dimension_y = 32 +/datum/sprite_accessory/wings/slime + name = "Slime" + icon_state = "slime" + dimension_x = 96 + center = TRUE + dimension_y = 32 + locked = TRUE + +/datum/sprite_accessory/wings_open/slime + name = "Slime" + icon_state = "slime" + dimension_x = 96 + center = TRUE + dimension_y = 32 + /datum/sprite_accessory/frills icon = 'icons/mob/species/lizard/lizard_misc.dmi' diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 4be39d9adcf6..1bbb63c9525f 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -171,10 +171,10 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) mind.current.med_hud_set_status() GLOB.ghost_images_default -= ghostimage_default - QDEL_NULL(ghostimage_default) + ghostimage_default = null GLOB.ghost_images_simple -= ghostimage_simple - QDEL_NULL(ghostimage_simple) + ghostimage_simple = null updateallghostimages() diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index c0beb9bc71d5..80e97cb3c729 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -46,20 +46,28 @@ /datum/emote/help/run_emote(mob/user, params, type_override, intentional) . = ..() var/list/keys = list() - var/list/message = list("Available emotes, you can use them with say \"*emote\": ") + var/list/message = list("Available emotes, you can use them with say [span_bold("\"*emote\"")]: \n") + message += span_smallnoticeital("Note - emotes highlighted in blue play a sound \n\n") for(var/key in GLOB.emote_list) - for(var/datum/emote/P in GLOB.emote_list[key]) - if(P.key in keys) + for(var/datum/emote/emote_action in GLOB.emote_list[key]) + if(emote_action.key in keys) continue - if(P.can_run_emote(user, status_check = FALSE , intentional = TRUE)) - keys += P.key + if(emote_action.can_run_emote(user, status_check = FALSE , intentional = TRUE)) + keys += emote_action.key keys = sort_list(keys) + + // the span formatting will mess up sorting so need to do it afterwards + for(var/i in 1 to keys.len) + for(var/datum/emote/emote_action in GLOB.emote_list[keys[i]]) + if(emote_action.get_sound(user) && emote_action.should_play_sound(user, intentional = TRUE)) + keys[i] = span_boldnotice(keys[i]) + message += keys.Join(", ") message += "." message = message.Join("") - to_chat(user, message) + to_chat(user, examine_block(message)) /datum/emote/flip key = "flip" diff --git a/code/modules/mob/living/basic/basic.dm b/code/modules/mob/living/basic/basic.dm index 73f919b75e84..6b4c3c577e5e 100644 --- a/code/modules/mob/living/basic/basic.dm +++ b/code/modules/mob/living/basic/basic.dm @@ -119,13 +119,23 @@ if(speak_emote) speak_emote = string_list(speak_emote) - if(unsuitable_atmos_damage != 0) - //String assoc list returns a cached list, so this is like a static list to pass into the element below. - habitable_atmos = string_assoc_list(habitable_atmos) - AddElement(/datum/element/atmos_requirements, habitable_atmos, unsuitable_atmos_damage) + apply_atmos_requirements() + apply_temperature_requirements() + +/// Ensures this mob can take atmospheric damage if it's supposed to +/mob/living/basic/proc/apply_atmos_requirements() + if(unsuitable_atmos_damage == 0) + return + //String assoc list returns a cached list, so this is like a static list to pass into the element below. + habitable_atmos = string_assoc_list(habitable_atmos) + AddElement(/datum/element/atmos_requirements, habitable_atmos, unsuitable_atmos_damage) + +/// Ensures this mob can take temperature damage if it's supposed to +/mob/living/basic/proc/apply_temperature_requirements() + if(unsuitable_cold_damage == 0 && unsuitable_heat_damage == 0) + return + AddElement(/datum/element/basic_body_temp_sensitive, minimum_survivable_temperature, maximum_survivable_temperature, unsuitable_cold_damage, unsuitable_heat_damage) - if(unsuitable_cold_damage != 0 && unsuitable_heat_damage != 0) - AddElement(/datum/element/basic_body_temp_sensitive, minimum_survivable_temperature, maximum_survivable_temperature, unsuitable_cold_damage, unsuitable_heat_damage) /mob/living/basic/Life(seconds_per_tick = SSMOBS_DT, times_fired) . = ..() @@ -214,10 +224,24 @@ //monkestation edit /mob/living/basic/vv_edit_var(vname, vval) + switch(vname) + if(NAMEOF(src, habitable_atmos), NAMEOF(src, unsuitable_atmos_damage)) + RemoveElement(/datum/element/atmos_requirements, habitable_atmos, unsuitable_atmos_damage) + . = TRUE + if(NAMEOF(src, minimum_survivable_temperature), NAMEOF(src, maximum_survivable_temperature), NAMEOF(src, unsuitable_cold_damage), NAMEOF(src, unsuitable_heat_damage)) + RemoveElement(/datum/element/basic_body_temp_sensitive, minimum_survivable_temperature, maximum_survivable_temperature, unsuitable_cold_damage, unsuitable_heat_damage) + . = TRUE + . = ..() - if(vname == NAMEOF(src, speed)) - datum_flags |= DF_VAR_EDITED - set_varspeed(vval) + + switch(vname) + if(NAMEOF(src, habitable_atmos), NAMEOF(src, unsuitable_atmos_damage)) + apply_atmos_requirements() + if(NAMEOF(src, minimum_survivable_temperature), NAMEOF(src, maximum_survivable_temperature), NAMEOF(src, unsuitable_cold_damage), NAMEOF(src, unsuitable_heat_damage)) + apply_temperature_requirements() + if(NAMEOF(src, speed)) + datum_flags |= DF_VAR_EDITED + set_varspeed(vval) /mob/living/basic/proc/set_varspeed(var_value) speed = var_value diff --git a/code/modules/mob/living/basic/basic_defense.dm b/code/modules/mob/living/basic/basic_defense.dm index 444780e14885..27ff06b8bd41 100644 --- a/code/modules/mob/living/basic/basic_defense.dm +++ b/code/modules/mob/living/basic/basic_defense.dm @@ -28,6 +28,7 @@ span_notice("[user] [response_help_continuous] you."), null, null, user) to_chat(user, span_notice("You [response_help_simple] [src].")) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + SEND_SIGNAL(src, COMSIG_EMOTION_STORE, user, EMOTION_HAPPY, "[response_help_continuous] me.") else if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to hurt [src]!")) @@ -102,13 +103,6 @@ var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) return attack_threshold_check(damage, user.melee_damage_type) -/mob/living/basic/attack_slime(mob/living/simple_animal/slime/M, list/modifiers) - if(..()) //successful slime attack - var/damage = rand(15, 25) - if(M.is_adult) - damage = rand(20, 35) - return attack_threshold_check(damage) - /mob/living/basic/attack_drone(mob/living/basic/drone/attacking_drone) if(attacking_drone.istate & ISTATE_HARM) //No kicking dogs even as a rogue drone. Use a weapon. return diff --git a/code/modules/mob/living/basic/guardian/guardian.dm b/code/modules/mob/living/basic/guardian/guardian.dm index 854489fccce6..895a31eb2ecb 100644 --- a/code/modules/mob/living/basic/guardian/guardian.dm +++ b/code/modules/mob/living/basic/guardian/guardian.dm @@ -136,7 +136,7 @@ /mob/living/basic/guardian/proc/guardian_recolour() if (isnull(client)) return - var/chosen_guardian_colour = input(src, "What would you like your colour to be?", "Choose Your Colour", "#ffffff") as color|null + var/chosen_guardian_colour = tgui_color_picker(src, "What would you like your colour to be?", "Choose Your Colour", "#ffffff") if (isnull(chosen_guardian_colour)) //redo proc until we get a color to_chat(src, span_warning("Invalid colour, please try again.")) return guardian_recolour() diff --git a/code/modules/mob/living/basic/guardian/guardian_creator.dm b/code/modules/mob/living/basic/guardian/guardian_creator.dm index 20a1cf4f4c72..f7bf6f7dc12a 100644 --- a/code/modules/mob/living/basic/guardian/guardian_creator.dm +++ b/code/modules/mob/living/basic/guardian/guardian_creator.dm @@ -93,18 +93,21 @@ GLOBAL_LIST_INIT(guardian_radial_images, setup_guardian_radial()) used = TRUE to_chat(user, use_message) var/guardian_type_name = random ? "Random" : capitalize(initial(guardian_path.creator_name)) - var/list/mob/dead/observer/candidates = poll_ghost_candidates( + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( "Do you want to play as [user.real_name]'s [guardian_type_name] [mob_name]?", - jobban_type = ROLE_PAI, + check_jobban = ROLE_PAI, poll_time = 10 SECONDS, ignore_category = POLL_IGNORE_HOLOPARASITE, + pic_source = guardian_path, + role_name_text = "guardian spirit" ) if(LAZYLEN(candidates)) var/mob/dead/observer/candidate = pick(candidates) spawn_guardian(user, candidate, guardian_path) + used = TRUE + SEND_SIGNAL(src, COMSIG_TRAITOR_ITEM_USED(type)) else to_chat(user, failure_message) - used = FALSE /// Actually create our guy /obj/item/guardian_creator/proc/spawn_guardian(mob/living/user, mob/dead/candidate, guardian_path) diff --git a/code/modules/mob/living/basic/guardian/guardian_verbs.dm b/code/modules/mob/living/basic/guardian/guardian_verbs.dm index 02d1fd1ed3ab..abf536503b2a 100644 --- a/code/modules/mob/living/basic/guardian/guardian_verbs.dm +++ b/code/modules/mob/living/basic/guardian/guardian_verbs.dm @@ -166,7 +166,15 @@ return FALSE to_chat(owner, span_holoparasite("You attempt to reset [span_bold(chosen_guardian.real_name)]'s personality...")) - var/list/mob/dead/observer/ghost_candidates = poll_ghost_candidates("Do you want to play as [owner.real_name]'s [chosen_guardian.theme.name]?", ROLE_PAI, FALSE, 100) + var/list/mob/dead/observer/ghost_candidates = SSpolling.poll_ghost_candidates_for_mob( + "Do you want to play as [owner.real_name]'s [chosen_guardian.theme.name]?", + check_jobban = ROLE_PAI, + poll_time = 10 SECONDS, + target_mob = src, + ignore_category = POLL_IGNORE_HOLOPARASITE, + pic_source = src, + role_name_text = chosen_guardian.theme.name + ) if (!LAZYLEN(ghost_candidates)) to_chat(owner, span_holoparasite("Your attempt to reset the personality of \ [span_bold(chosen_guardian.real_name)] appears to have failed... \ diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm index d075bedd0af8..16805a3a02a0 100644 --- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm @@ -13,7 +13,7 @@ mob_biotypes = MOB_ORGANIC|MOB_BEAST basic_mob_flags = DEL_ON_DEATH speak_emote = list("warbles", "quavers") - faction = list(FACTION_MINING, FACTION_ASHWALKER) + faction = list(FACTION_ASHWALKER) response_help_continuous = "pets" response_help_simple = "pet" response_disarm_continuous = "gently pushes aside" @@ -32,6 +32,7 @@ /mob/living/basic/mining/gutlunch/Initialize(mapload) . = ..() + GLOB.gutlunch_count++ RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) if(greyscale_config) set_greyscale(colors = list(pick(possible_colors))) @@ -46,6 +47,10 @@ breed_timer = 3 MINUTES,\ ) +/mob/living/basic/mining/gutlunch/Destroy() + GLOB.gutlunch_count-- + return ..() + /mob/living/basic/mining/gutlunch/proc/pre_attack(mob/living/puncher, atom/target) SIGNAL_HANDLER @@ -109,7 +114,7 @@ /datum/pet_command/idle, /datum/pet_command/free, /datum/pet_command/point_targeting/attack, - /datum/pet_command/point_targeting/breed, + /datum/pet_command/point_targeting/breed/gutlunch, /datum/pet_command/follow, /datum/pet_command/point_targeting/fetch, /datum/pet_command/mine_walls, diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm index 57893b294ce3..faf7a58b65fa 100644 --- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm @@ -1,3 +1,4 @@ +#define MAXIMUM_GUTLUNCH_POP 20 /datum/ai_controller/basic_controller/gutlunch ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk @@ -13,11 +14,16 @@ planning_subtrees = list( /datum/ai_planning_subtree/target_retaliate/check_faction, /datum/ai_planning_subtree/pet_planning, - /datum/ai_planning_subtree/make_babies, /datum/ai_planning_subtree/basic_melee_attack_subtree, /datum/ai_planning_subtree/befriend_ashwalkers, + /datum/ai_planning_subtree/make_babies/gutlunch, ) +/datum/ai_planning_subtree/make_babies/gutlunch/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(GLOB.gutlunch_count >= MAXIMUM_GUTLUNCH_POP) + return + return ..() + ///find ashwalkers and add them to the list of masters /datum/ai_planning_subtree/befriend_ashwalkers @@ -117,3 +123,14 @@ controller.queue_behavior(/datum/ai_behavior/mine_wall, BB_CURRENT_PET_TARGET) return SUBTREE_RETURN_FINISH_PLANNING controller.queue_behavior(/datum/ai_behavior/find_mineral_wall, BB_CURRENT_PET_TARGET) + +//pet commands +/datum/pet_command/point_targeting/breed/gutlunch + +/datum/pet_command/point_targeting/breed/gutlunch/set_command_target(mob/living/parent, atom/target) + if(GLOB.gutlunch_count >= MAXIMUM_GUTLUNCH_POP) + parent.balloon_alert_to_viewers("can't reproduce anymore!") + return + return ..() + +#undef MAXIMUM_GUTLUNCH_POP diff --git a/code/modules/mob/living/basic/pets/parrot/poly.dm b/code/modules/mob/living/basic/pets/parrot/poly.dm index 9deaff7a10b6..d5490389c434 100644 --- a/code/modules/mob/living/basic/pets/parrot/poly.dm +++ b/code/modules/mob/living/basic/pets/parrot/poly.dm @@ -187,6 +187,7 @@ butcher_results = list(/obj/item/ectoplasm = 1) ai_controller = /datum/ai_controller/basic_controller/parrot/ghost speech_probability_rate = 1 + resistance_flags = parent_type::resistance_flags | SHUTTLE_CRUSH_PROOF /mob/living/basic/parrot/poly/ghost/Initialize(mapload) // block anything and everything that could possibly happen with writing memory for ghosts diff --git a/code/modules/mob/living/basic/space_fauna/revenant/revenant_items.dm b/code/modules/mob/living/basic/space_fauna/revenant/revenant_items.dm index a9e17a9b305f..ea153b03c063 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/revenant_items.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/revenant_items.dm @@ -86,7 +86,7 @@ /// Handles giving the revenant a new client to control it /obj/item/ectoplasm/revenant/proc/get_new_user() message_admins("The new revenant's old client either could not be found or is in a new, living mob - grabbing a random candidate instead...") - var/list/candidates = poll_candidates_for_mob("Do you want to be [revenant.name] (reforming)?", ROLE_REVENANT, ROLE_REVENANT, 5 SECONDS, revenant) + var/list/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to be [revenant.name] (reforming)?", check_jobban = ROLE_REVENANT, role = ROLE_REVENANT, poll_time = 5 SECONDS, target_mob = revenant, pic_source = revenant) if(!LAZYLEN(candidates)) message_admins("No candidates were found for the new revenant.") diff --git a/code/modules/mob/living/basic/space_fauna/slugcat/slugcat.dm b/code/modules/mob/living/basic/space_fauna/slugcat/slugcat.dm new file mode 100644 index 000000000000..b2b0e69f0b33 --- /dev/null +++ b/code/modules/mob/living/basic/space_fauna/slugcat/slugcat.dm @@ -0,0 +1,70 @@ +/* +* +*Slugcats, a new vent critter. +* +*/ + +/mob/living/basic/slugcat + name = "slugcat" + desc = "A biologically engineered entity to clean pipes and relay information. It looks upon you with large, inquisitive eyes." + icon = 'icons/mob/simple/slugcats.dmi' + icon_state = "scug" + icon_living = "scug" + icon_dead = "scug_dead" + speak_emote = list("mews") + butcher_results = list(/obj/item/food/meat/slab = 2) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "shoos" + response_disarm_simple = "shoo" + response_harm_continuous = "swats" + response_harm_simple = "swat" + + gold_core_spawnable = FRIENDLY_SPAWN + + health = 80 + maxHealth = 80 + melee_damage_lower = 5 + melee_damage_upper = 5 + obj_damage = 0 + environment_smash = ENVIRONMENT_SMASH_NONE + + attack_verb_continuous = "claws" + attack_verb_simple = "claw" + attack_sound = 'sound/weapons/pierce.ogg' + + ai_controller = /datum/ai_controller/basic_controller/slugcat + + ///What fate (food) a slugcat? + var/static/list/edibles = list( + /mob/living/basic/mouse, + /obj/item/food/deadmouse, + /mob/living/basic/bat + ) + +/mob/living/basic/slugcat/Initialize(mapload) + . = ..() + AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_CLAW) + AddElement(/datum/element/ai_retaliate) + AddElement(/datum/element/dextrous) + ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + + AddElement(/datum/element/basic_eating, heal_amt = 2, food_types = edibles) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, edibles) + + +/datum/ai_controller/basic_controller/slugcat + + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + + ai_traits = STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/find_food, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) diff --git a/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm index 9497d8dd284d..1f41a95af858 100644 --- a/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm +++ b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm @@ -100,7 +100,7 @@ /// Select scale colour with the colour picker /mob/living/basic/space_dragon/proc/select_colour() - chosen_colour = input(src, "What colour would you like to be?" ,"Colour Selection", COLOR_WHITE) as color|null + chosen_colour = tgui_color_picker(src, "What colour would you like to be?", "Colour Selection", COLOR_WHITE) if(!chosen_colour) // Redo proc until we get a color to_chat(src, span_warning("Not a valid colour, please try again.")) select_colour() diff --git a/code/modules/mob/living/basic/vermin/mouse.dm b/code/modules/mob/living/basic/vermin/mouse.dm index 959318e010a7..76e4e2e06f66 100644 --- a/code/modules/mob/living/basic/vermin/mouse.dm +++ b/code/modules/mob/living/basic/vermin/mouse.dm @@ -58,6 +58,7 @@ ) AddElement(/datum/element/connect_loc, loc_connections) make_tameable() + AddComponent(/datum/component/swarming, 16, 16) //max_x, max_y /mob/living/basic/mouse/proc/make_tameable() if (tame) diff --git a/code/modules/mob/living/basic/vermin/space_bat.dm b/code/modules/mob/living/basic/vermin/space_bat.dm index dc3c1b85aede..24718c8481ac 100644 --- a/code/modules/mob/living/basic/vermin/space_bat.dm +++ b/code/modules/mob/living/basic/vermin/space_bat.dm @@ -37,7 +37,7 @@ . = ..() AddElement(/datum/element/simple_flying) AddElement(/datum/element/ai_retaliate) - add_traits(list(TRAIT_SPACEWALK, TRAIT_VENTCRAWLER_ALWAYS), INNATE_TRAIT) + add_traits(list(TRAIT_SPACEWALK, TRAIT_VENTCRAWLER_ALWAYS, TRAIT_NO_MIRROR_REFLECTION), INNATE_TRAIT) ///Controller for space bats, has nothing unique, just retaliation. /datum/ai_controller/basic_controller/space_bat diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 2afd66ff58fb..373398934a8b 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -98,7 +98,7 @@ //Blood loss still happens in locker, floor stays clean if(isturf(loc) && prob(sqrt(amt)*BLOOD_DRIP_RATE_MOD)) - add_splatter_floor(loc, (amt >= 10)) + add_splatter_floor(loc, (amt <= 10)) /mob/living/carbon/human/bleed(amt) amt *= physiology.bleed_mod diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 0de10eda4c9d..3dc3d08d3994 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -22,9 +22,6 @@ laws.set_laws_config() /obj/item/mmi/Destroy() - if(iscyborg(loc)) - var/mob/living/silicon/robot/borg = loc - borg.mmi = null set_mecha(null) QDEL_NULL(brainmob) QDEL_NULL(brain) diff --git a/code/modules/mob/living/carbon/alien/adult/adult_update_icons.dm b/code/modules/mob/living/carbon/alien/adult/adult_update_icons.dm index 5a4fd7c20ff2..bbfd68f8186b 100644 --- a/code/modules/mob/living/carbon/alien/adult/adult_update_icons.dm +++ b/code/modules/mob/living/carbon/alien/adult/adult_update_icons.dm @@ -52,7 +52,7 @@ // update_icons() //Handled in update_transform(), leaving this here as a reminder update_transform() -/mob/living/carbon/alien/adult/perform_update_transform() //The old method of updating lying/standing was update_icons(). Aliens still expect that. +/mob/living/carbon/alien/adult/update_transform() //The old method of updating lying/standing was update_icons(). Aliens still expect that. . = ..() update_icons() diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 9b9aaba93e49..bf38e94bb96a 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -95,11 +95,13 @@ 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(client) + var/list/image/to_remove + for(var/image/client_image as anything in client.images) var/searchfor = "infected" - if(findtext(I.icon_state, searchfor, 1, length(searchfor) + 1)) - qdel(I) + if(findtext(client_image.icon_state, searchfor, 1, length(searchfor) + 1)) + to_remove += client_image + client.images -= to_remove return /mob/living/carbon/alien/canBeHandcuffed() diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index 3d12474ad1c2..c7c65f4d684c 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -86,15 +86,6 @@ In all, this is a lot like the monkey code. /N if(STAMINA) stamina.adjust(-damage) -/mob/living/carbon/alien/attack_slime(mob/living/simple_animal/slime/M, list/modifiers) - if(..()) //successful slime attack - var/damage = rand(5, 35) - if(M.is_adult) - damage = rand(10, 40) - adjustBruteLoss(damage) - log_combat(M, src, "attacked") - updatehealth() - /mob/living/carbon/alien/ex_act(severity, target, origin) if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) return FALSE 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 8e2c75647c53..185e7df2f0b0 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 @@ -21,7 +21,7 @@ else icon_state = "larva[state]" -/mob/living/carbon/alien/larva/perform_update_transform() //All this is handled in update_icons() +/mob/living/carbon/alien/larva/update_transform() //All this is handled in update_icons() . = ..() update_icons() diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 50ae9ac45ae2..363fa866d805 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -91,12 +91,20 @@ bursting = TRUE - var/list/candidates = poll_ghost_candidates("Do you want to play as an alien larva that will burst out of [owner.real_name]?", ROLE_ALIEN, ROLE_ALIEN, 100, POLL_IGNORE_ALIEN_LARVA) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + "Do you want to play as an alien larva that will burst out of [owner.real_name]?", + role = ROLE_ALIEN, + check_jobban = ROLE_ALIEN, + poll_time = 10 SECONDS, + ignore_category = POLL_IGNORE_ALIEN_LARVA, + pic_source = /mob/living/carbon/alien/larva, + role_name_text = "alien larva" + ) if(QDELETED(src) || QDELETED(owner)) return - if(!candidates.len || !owner) + if(!length(candidates) || !owner) bursting = FALSE stage = 5 // If no ghosts sign up for the Larva, let's regress our growth by one minute, we will try again! addtimer(CALLBACK(src, PROC_REF(advance_embryo_stage)), growth_time) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b61bd33abf2f..c4ee24df9a9e 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -223,16 +223,7 @@ buckled.user_unbuckle_mob(src,src) /mob/living/carbon/resist_fire() - adjust_fire_stacks(-5) - Paralyze(60, ignore_canstun = TRUE) - spin(32,2) - visible_message(span_danger("[src] rolls on the floor, trying to put [p_them()]self out!"), \ - span_notice("You stop, drop, and roll!")) - sleep(3 SECONDS) - if(fire_stacks <= 0 && !QDELETED(src)) - visible_message(span_danger("[src] successfully extinguishes [p_them()]self!"), \ - span_notice("You extinguish yourself.")) - return + return !!apply_status_effect(/datum/status_effect/stop_drop_roll) /mob/living/carbon/resist_restraints() var/obj/item/I = null @@ -1008,6 +999,9 @@ /proc/cmp_organ_slot_asc(slot_a, slot_b) return GLOB.organ_process_order.Find(slot_a) - GLOB.organ_process_order.Find(slot_b) +/mob/living/carbon/proc/get_footprint_sprite() + return FOOTPRINT_SPRITE_PAWS + /mob/living/carbon/vv_get_dropdown() . = ..() VV_DROPDOWN_OPTION("", "---------") diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 523c269e4346..d9b7d8caf4f5 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -179,7 +179,7 @@ if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_HAND, user, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN) . = TRUE - + if(length(diseases) && isliving(user)) var/mob/living/living = user var/block = living.check_contact_sterility(BODY_ZONE_EVERYTHING) @@ -196,7 +196,7 @@ if(length(contact) && !block) for(var/datum/disease/advanced/V as anything in contact) infect_disease(V, notes="(Skin Contact - (Bump), coming from [living])") - + for(var/datum/surgery/operations as anything in surgeries) if((user.istate & ISTATE_HARM)) @@ -226,7 +226,7 @@ var/datum/disease/D = thing if(D.spread_flags & DISEASE_SPREAD_CONTACT_SKIN) ContactContractDisease(D) - */ + */ if(!(user.istate & ISTATE_HARM)) help_shake_act(user) return FALSE @@ -239,28 +239,6 @@ try_contact_infect(D, note="Monkey Bite Infected") return TRUE - -/mob/living/carbon/attack_slime(mob/living/simple_animal/slime/M, list/modifiers) - if(..()) //successful slime attack - if(M.powerlevel > 0) - var/stunprob = M.powerlevel * 7 + 10 // 17 at level 1, 80 at level 10 - if(prob(stunprob)) - M.powerlevel -= 3 - if(M.powerlevel < 0) - M.powerlevel = 0 - - visible_message(span_danger("The [M.name] shocks [src]!"), \ - span_userdanger("The [M.name] shocks you!")) - - do_sparks(5, TRUE, src) - var/power = M.powerlevel + rand(0,3) - Paralyze(power * 2 SECONDS) - set_stutter_if_lower(power * 2 SECONDS) - if (prob(stunprob) && M.powerlevel >= 8) - adjustFireLoss(M.powerlevel * rand(6,10)) - updatehealth() - return 1 - /mob/living/carbon/proc/dismembering_strike(mob/living/attacker, dam_zone) if(!attacker.limb_destroyer) return dam_zone @@ -459,6 +437,30 @@ null, span_hear("You hear the rustling of clothes."), DEFAULT_MESSAGE_RANGE, list(helper, src)) to_chat(helper, span_notice("You shake [src] trying to pick [p_them()] up!")) to_chat(src, span_notice("[helper] shakes you to get you up!")) + //Monkestation addition start: this is a port of #77651 which was closed, so I'm putting this as an addition + else if(helper.zone_selected == BODY_ZONE_PRECISE_MOUTH) //Boops + if(HAS_TRAIT(src, TRAIT_BADTOUCH) && prob(75)) + helper.visible_message(span_notice("[src] matrix dodges [helper]'s boop, holy shit!"), \ + null, span_hear("You hear a strange noise, like someone fighting for their life!"), DEFAULT_MESSAGE_RANGE, list(helper, src)) + to_chat(helper, span_notice("[src] matrix dodges your boop, holy shit!")) + to_chat(src, span_notice("[helper] tried to boop you but you avoid it with a matrix dodge, holy shit!")) + else if(istype(get_item_by_slot(ITEM_SLOT_MASK), /obj/item/clothing/mask/gas/clown_hat)) + playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE) + helper.visible_message(span_notice("[helper] honks [src]'s nose"), \ + null, span_hear("You hear a honk!"), DEFAULT_MESSAGE_RANGE, list(helper, src)) + to_chat(helper, span_notice("You honk [src]'s nose.")) + to_chat(src, span_notice("[helper] honks your clown nose, honk! ")) + else if(src.dna.species.bodytype & BODYTYPE_SNOUTED) + helper.visible_message(span_notice("[helper] boops [src]'s snout."), \ + null, span_hear("You hear a soft patter."), DEFAULT_MESSAGE_RANGE, list(helper, src)) + to_chat(helper, span_notice("You boop [src] on the snout.")) + to_chat(src, span_notice("[helper] boops you on the snout.")) + else + helper.visible_message(span_notice("[helper] boops [src]'s nose."), \ + null, span_hear("You hear a soft patter."), DEFAULT_MESSAGE_RANGE, list(helper, src)) + to_chat(helper, span_notice("You boop [src] on the nose.")) + to_chat(src, span_notice("[helper] boops you on the nose.")) + //Monkestation addition end else if(check_zone(helper.zone_selected) == BODY_ZONE_HEAD && get_bodypart(BODY_ZONE_HEAD)) //Headpats! helper.visible_message(span_notice("[helper] gives [src] a pat on the head to make [p_them()] feel better!"), \ null, span_hear("You hear a soft patter."), DEFAULT_MESSAGE_RANGE, list(helper, src)) diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 84dc1029808b..1274e321d8d0 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -11,8 +11,8 @@ usable_hands = 0 //Populated on init through list/bodyparts mobility_flags = MOBILITY_FLAGS_CARBON_DEFAULT blocks_emissive = EMISSIVE_BLOCK_NONE - ///List of [/obj/item/organ/internal] in the mob. They don't go in the contents for some reason I don't want to know. - var/list/obj/item/organ/internal/organs = list() + ///List of [/obj/item/organ]s in the mob. They don't go in the contents for some reason I don't want to know. + var/list/obj/item/organ/organs = list() ///Same as [above][/mob/living/carbon/var/organs], but stores "slot ID" - "organ" pairs for easy access. var/list/organs_slot = list() ///How many dream images we have left to send @@ -61,7 +61,7 @@ var/gib_type = /obj/effect/decal/cleanable/blood/gibs - var/rotate_on_lying = 1 + rotate_on_lying = TRUE /// Gets filled up in [/datum/species/proc/replace_body]. /// Will either contain a list of typepaths if nothing has been created yet, diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm index dc5c474d3968..84c5c42f289d 100644 --- a/code/modules/mob/living/carbon/carbon_update_icons.dm +++ b/code/modules/mob/living/carbon/carbon_update_icons.dm @@ -32,32 +32,6 @@ if(slot_flags & (ITEM_SLOT_LPOCKET|ITEM_SLOT_RPOCKET)) update_pockets() -//IMPORTANT: Multiple animate() calls do not stack well, so try to do them all at once if you can. -/mob/living/carbon/perform_update_transform() - var/matrix/ntransform = matrix(transform) //aka transform.Copy() - var/final_pixel_y = pixel_y - var/final_dir = dir - var/changed = 0 - if(lying_angle != lying_prev && rotate_on_lying) - changed++ - ntransform.TurnTo(lying_prev , lying_angle) - if(!lying_angle) //Lying to standing - final_pixel_y = base_pixel_y - else //if(lying != 0) - if(lying_prev == 0) //Standing to lying - pixel_y = base_pixel_y - final_pixel_y = base_pixel_y + PIXEL_Y_OFFSET_LYING - if(dir & (EAST|WEST)) //Facing east or west - final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass - if(resize != RESIZE_DEFAULT_SIZE) - changed++ - ntransform.Scale(resize) - resize = RESIZE_DEFAULT_SIZE - - if(changed) - SEND_SIGNAL(src, COMSIG_PAUSE_FLOATING_ANIM, 0.3 SECONDS) - animate(src, transform = ntransform, time = (lying_prev == 0 || lying_angle == 0) ? 2 : 0, pixel_y = final_pixel_y, dir = final_dir, easing = (EASE_IN|EASE_OUT)) - /mob/living/carbon var/list/overlays_standing[TOTAL_LAYERS] diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index 76d0d6dc87fa..796ec95734ff 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -42,6 +42,7 @@ /datum/emote/living/carbon/blink/blink_r key = "blink_r" + name = "blink (Rapid)" message = "blinks rapidly." /datum/emote/living/carbon/clap diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index c800d411a420..df8ea16dd62e 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -324,9 +324,9 @@ GLOBAL_LIST_EMPTY(features_by_species) * Arguments: * * gender - The gender that the name should adhere to. Use MALE for male names, use anything else for female names. * * unique - If true, ensures that this new name is not a duplicate of anyone else's name currently on the station. - * * lastname - Does this species' naming system adhere to the last name system? Set to false if it doesn't. + * * last_name - Do we use a given last name or pick a random new one? */ -/datum/species/proc/random_name(gender,unique,lastname) +/datum/species/proc/random_name(gender, unique, last_name) if(unique) return random_unique_name(gender) @@ -336,8 +336,8 @@ GLOBAL_LIST_EMPTY(features_by_species) else randname = pick(GLOB.first_names_female) - if(lastname) - randname += " [lastname]" + if(last_name) + randname += " [last_name]" else randname += " [pick(GLOB.last_names)]" @@ -537,8 +537,13 @@ GLOBAL_LIST_EMPTY(features_by_species) INVOKE_ASYNC(src, PROC_REF(worn_items_fit_body_check), C, TRUE) + //Assigns exotic blood type if the species has one if(exotic_bloodtype && C.dna.blood_type != exotic_bloodtype) C.dna.blood_type = exotic_bloodtype + //Otherwise, check if the previous species had an exotic bloodtype and we do not have one and assign a random blood type + //(why the fuck is blood type not tied to a fucking DNA block?) + else if(old_species.exotic_bloodtype && !exotic_bloodtype) + C.dna.blood_type = random_blood_type() if(ishuman(C)) var/mob/living/carbon/human/human = C @@ -785,8 +790,18 @@ GLOBAL_LIST_EMPTY(features_by_species) if(species_human.socks && species_human.num_legs >= 2 && !(src.bodytype & BODYTYPE_DIGITIGRADE)) var/datum/sprite_accessory/socks/socks = GLOB.socks_list[species_human.socks] + //MONKESTATION EDITS FOR COLOURABLE SOCKS + var/mutable_appearance/socks_overlay if(socks) - standing += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER) + if(species_human.dna.species.sexes && species_human.physique == FEMALE && species_human.get_bodypart(BODY_ZONE_CHEST)?.is_dimorphic) + socks_overlay = wear_female_version(socks.icon_state, socks.icon, BODY_LAYER, FEMALE_UNIFORM_FULL) + else + socks_overlay = mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER) + if(!socks.use_static) + socks_overlay.color = species_human.socks_color + socks_overlay.pixel_y += height_offset + standing += socks_overlay + //MONKESTATION EDITS END if(standing.len) species_human.overlays_standing[BODY_LAYER] = standing diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 1a12bd9a4f60..8eddad2a9111 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -20,13 +20,30 @@ key = "dap" key_third_person = "daps" message = "sadly can't find anybody to give daps to, and daps themself. Shameful." - message_param = "give daps to %t." + message_param = "gives daps to %t." hands_use_check = TRUE /datum/emote/living/carbon/human/eyebrow key = "eyebrow" message = "raises an eyebrow." +/datum/emote/living/carbon/human/glasses + key = "glasses" + key_third_person = "glasses" + message = "pushes up their glasses." + emote_type = EMOTE_VISIBLE + +/datum/emote/living/carbon/human/glasses/can_run_emote(mob/user, status_check = TRUE, intentional) + var/obj/eyes_slot = user.get_item_by_slot(ITEM_SLOT_EYES) + if(istype(eyes_slot, /obj/item/clothing/glasses/regular) || istype(eyes_slot, /obj/item/clothing/glasses/sunglasses)) + return ..() + return FALSE + +/datum/emote/living/carbon/human/glasses/run_emote(mob/user, params, type_override, intentional) + . = ..() + var/image/emote_animation = image('icons/mob/species/human/emote_visuals.dmi', user, "glasses") + flick_overlay_global(emote_animation, GLOB.clients, 1.6 SECONDS) + /datum/emote/living/carbon/human/grumble key = "grumble" key_third_person = "grumbles" @@ -153,28 +170,25 @@ monkestation edit end */ /datum/emote/living/carbon/human/wing/run_emote(mob/user, params, type_override, intentional) . = ..() - if(.) - var/mob/living/carbon/human/H = user - var/obj/item/organ/external/wings/functional/wings = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS) - if(wings && findtext(select_message_type(user,intentional), "open")) - wings.open_wings() - else - wings.close_wings() + if(!.) + return + var/obj/item/organ/external/wings/functional/wings = user.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS) + if(isnull(wings)) + CRASH("[type] ran on a mob that has no wings!") + if(wings.wings_open) + wings.close_wings() + else + wings.open_wings() /datum/emote/living/carbon/human/wing/select_message_type(mob/user, intentional) - . = ..() - var/mob/living/carbon/human/H = user - if(H.dna.species.mutant_bodyparts["wings"]) - . = "opens " + message - else - . = "closes " + message + var/obj/item/organ/external/wings/functional/wings = user.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS) + var/emote_verb = wings.wings_open ? "closes" : "opens" + return "[emote_verb] [message]" /datum/emote/living/carbon/human/wing/can_run_emote(mob/user, status_check = TRUE, intentional) - if(!..()) + if(!istype(user.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS), /obj/item/organ/external/wings/functional)) return FALSE - var/mob/living/carbon/human/H = user - if(H.dna && H.dna.species && (H.dna.features["wings"] != "None")) - return TRUE + return ..() /datum/emote/living/carbon/human/clear_throat key = "clear" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index f0f402d9228d..abdc8f1dc400 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -22,18 +22,23 @@ if(obscure_examine) return list("You're struggling to make out any details...") + //Monkestation Addition: Species + if(dna?.species?.name) + . += "[t_He] [t_is] \a [dna.species.name]."//name should be what others see you as imo, id should be used for your true species (for species that disguise) + var/obscured = check_obscured_slots() //uniform if(w_uniform && !(obscured & ITEM_SLOT_ICLOTHING) && !(w_uniform.item_flags & EXAMINE_SKIP)) //accessory - var/accessory_msg + var/accessory_message = "" if(istype(w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/U = w_uniform - if(U.attached_accessory) - accessory_msg += " with [icon2html(U.attached_accessory, user)] \a [U.attached_accessory]" + var/obj/item/clothing/under/undershirt = w_uniform + var/list/accessories = undershirt.list_accessories_with_icon(user) + if(length(accessories)) + accessory_message = " with [english_list(accessories)] attached" - . += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg]." + . += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_message]." //head if(head && !(obscured & ITEM_SLOT_HEAD) && !(head.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head." diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 797d34e56bca..c4a7aa290892 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -24,7 +24,7 @@ RegisterSignal(src, COMSIG_COMPONENT_CLEAN_FACE_ACT, PROC_REF(clean_face)) AddComponent(/datum/component/personal_crafting) AddElement(/datum/element/footstep, FOOTSTEP_MOB_HUMAN, 1, -6) - AddComponent(/datum/component/bloodysoles/feet) + AddComponent(/datum/component/bloodysoles/feet, FOOTPRINT_SPRITE_SHOES) AddElement(/datum/element/ridable, /datum/component/riding/creature/human) AddElement(/datum/element/strippable, GLOB.strippable_human_items, TYPE_PROC_REF(/mob/living/carbon/human/, should_strip)) var/static/list/loc_connections = list( @@ -332,7 +332,7 @@ var/obj/item/bodypart/the_part = isbodypart(target_zone) ? target_zone : get_bodypart(check_zone(target_zone)) //keep these synced // Loop through the clothing covering this bodypart and see if there's any thiccmaterials if(!(injection_flags & INJECT_CHECK_PENETRATE_THICK)) - for(var/obj/item/clothing/iter_clothing in clothingonpart(the_part)) + for(var/obj/item/clothing/iter_clothing in get_clothing_on_part(the_part)) if(iter_clothing.clothing_flags & THICKMATERIAL) . = FALSE break @@ -345,6 +345,12 @@ var/obj/item/bodypart/the_part = isbodypart(target_zone) ? target_zone : get_bodypart(check_zone(target_zone)) //keep these synced to_chat(user, span_alert("There is no exposed flesh or thin material on [p_their()] [the_part.name].")) +/mob/living/carbon/human/get_footprint_sprite() + var/obj/item/bodypart/leg/L = get_bodypart(BODY_ZONE_R_LEG) || get_bodypart(BODY_ZONE_L_LEG) + return shoes?.footprint_sprite || L?.footprint_sprite + +#define CHECK_PERMIT(item) (item && item.item_flags & NEEDS_PERMIT) + /mob/living/carbon/human/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) if(judgement_criteria & JUDGE_EMAGGED) return 10 //Everyone is a criminal! @@ -911,7 +917,7 @@ if(diff < 0) //Taking damage, not healing return diff * physiology.stamina_mod return diff - + /mob/living/carbon/human/adjust_nutrition(change) //Honestly FUCK the oldcoders for putting nutrition on /mob someone else can move it up because holy hell I'd have to fix SO many typechecks if(HAS_TRAIT(src, TRAIT_NOHUNGER)) return FALSE diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 4d5068bf0bc8..494e4b9dc724 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -6,21 +6,21 @@ if(isbodypart(def_zone)) var/obj/item/bodypart/bp = def_zone if(bp) - return checkarmor(def_zone, type) + return check_armor(def_zone, type) var/obj/item/bodypart/affecting = get_bodypart(check_zone(def_zone)) if(affecting) - return checkarmor(affecting, type) - //If a specific bodypart is targeted, check how that bodypart is protected and return the value. + return check_armor(affecting, type) + //If a specific bodypart is targetted, check how that bodypart is protected and return the value. //If you don't specify a bodypart, it checks ALL your bodyparts for protection, and averages out the values for(var/X in bodyparts) var/obj/item/bodypart/BP = X - armorval += checkarmor(BP, type) + armorval += check_armor(BP, type) organnum++ return (armorval/max(organnum, 1)) -/mob/living/carbon/human/proc/checkarmor(obj/item/bodypart/def_zone, damage_type) +/mob/living/carbon/human/proc/check_armor(obj/item/bodypart/def_zone, damage_type) if(!damage_type) return 0 var/protection = 100 @@ -32,7 +32,7 @@ return 100 - protection ///Get all the clothing on a specific body part -/mob/living/carbon/human/proc/clothingonpart(obj/item/bodypart/def_zone) +/mob/living/carbon/human/proc/get_clothing_on_part(obj/item/bodypart/def_zone) var/list/covering_part = list() var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, back, gloves, shoes, belt, s_store, glasses, ears, wear_id, wear_neck) //Everything but pockets. Pockets are l_store and r_store. (if pockets were allowed, putting something armored, gloves or hats for example, would double up on the armor) for(var/bp in body_parts) @@ -340,31 +340,6 @@ var/attack_direction = get_dir(user, src) apply_damage(damage, user.melee_damage_type, affecting, armor, wound_bonus = user.wound_bonus, bare_wound_bonus = user.bare_wound_bonus, sharpness = user.sharpness, attack_direction = attack_direction) - -/mob/living/carbon/human/attack_slime(mob/living/simple_animal/slime/M, list/modifiers) - . = ..() - if(!.) // slime attack failed - return - var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) - if(!damage) - return - var/wound_mod = -45 // 25^1.4=90, 90-45=45 - if(M.is_adult) - damage += rand(5, 10) - wound_mod = -90 // 35^1.4=145, 145-90=55 - - if(check_shields(M, damage, "the [M.name]")) - return FALSE - - var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) - if(!dam_zone) //Dismemberment successful - return TRUE - - var/obj/item/bodypart/affecting = get_bodypart(get_random_valid_zone(dam_zone)) - var/armor_block = run_armor_check(affecting, MELEE) - apply_damage(damage, BRUTE, affecting, armor_block, wound_bonus=wound_mod) - - /mob/living/carbon/human/ex_act(severity, target, origin) if(HAS_TRAIT(src, TRAIT_BOMBIMMUNE)) return diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 80fd5ade9649..56b7aab3de90 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -68,7 +68,7 @@ var/static/list/can_ride_typecache = typecacheof(list( /mob/living/basic/parrot, /mob/living/carbon/human, - /mob/living/simple_animal/slime, + /mob/living/basic/slime, )) var/lastpuke = 0 var/account_id diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index ccd30def5fce..14b1318cc47e 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -247,6 +247,7 @@ destination.underwear_color = underwear_color destination.undershirt = undershirt destination.socks = socks + destination.socks_color = socks_color //MONKESTATION EDIT destination.jumpsuit_style = jumpsuit_style 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 2e8f56db51eb..ad321d93f1b5 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -761,6 +761,7 @@ generate/load female uniform sprites matching all previously decided variables female_uniform = NO_FEMALE_UNIFORM, override_state = null, override_file = null, + use_height_offset = TRUE, ) //Find a valid icon_state from variables+arguments @@ -789,7 +790,7 @@ generate/load female uniform sprites matching all previously decided variables //eg: ammo counters, primed grenade flashes, etc. var/list/worn_overlays = worn_overlays(standing, isinhands, file2use) if(worn_overlays?.len) - if(!isinhands && default_layer && ishuman(loc)) + if(!isinhands && default_layer && ishuman(loc) && use_height_offset) var/mob/living/carbon/human/human_loc = loc if(human_loc.get_mob_height() != HUMAN_HEIGHT_MEDIUM) var/string_form_layer = num2text(default_layer) diff --git a/code/modules/mob/living/carbon/human/init_signals.dm b/code/modules/mob/living/carbon/human/init_signals.dm index 308ade654cfe..618154cd2e05 100644 --- a/code/modules/mob/living/carbon/human/init_signals.dm +++ b/code/modules/mob/living/carbon/human/init_signals.dm @@ -24,13 +24,11 @@ /mob/living/carbon/human/proc/on_gain_giant_trait(datum/source) SIGNAL_HANDLER - src.resize = 1.25 - src.update_transform() + src.update_transform(1.25) src.visible_message(span_danger("[src] suddenly grows!"), span_notice("Everything around you seems to shrink..")) /mob/living/carbon/human/proc/on_lose_giant_trait(datum/source) SIGNAL_HANDLER //We're leaving the size traits permanent until someone wants to separate the mutation from customization aspects - //src.resize = 0.8 - //src.update_transform() + //src.update_transform(0.8) //src.visible_message(span_danger("[src] suddenly shrinks!"), span_notice("Everything around you seems to grow..")) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 2bf465dc8705..d20174543871 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -15,8 +15,9 @@ EYECOLOR, ) inherent_traits = list( + TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_TOXINLOVER, - TRAIT_NOBLOOD, + TRAIT_NOBLOOD ) mutanttongue = /obj/item/organ/internal/tongue/jelly mutantlungs = /obj/item/organ/internal/lungs/slime @@ -36,6 +37,7 @@ inherent_factions = list(FACTION_SLIME) species_language_holder = /datum/language_holder/jelly ass_image = 'icons/ass/assslime.png' + wing_types = list(/obj/item/organ/external/wings/functional/slime) bodypart_overrides = list( BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/jelly, diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index bae471942517..b51adf284ad1 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -9,6 +9,7 @@ MUTCOLORS_SECONDARY, EYECOLOR, LIPS, + HAIR // monke edit: lizards can have hair (it's the future, why not) ) inherent_traits = list( TRAIT_CAN_USE_FLIGHT_POTION, diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm index 518132aed5e4..961aa75ba8ae 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -5,6 +5,7 @@ species_traits = list( LIPS, HAS_MARKINGS, + HAIR // monke edit: moths can have hair (it's the future, why not) ) inherent_traits = list( TRAIT_CAN_USE_FLIGHT_POTION, @@ -22,6 +23,7 @@ mutanteyes = /obj/item/organ/internal/eyes/moth changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT species_language_holder = /datum/language_holder/moth + death_sound = 'sound/voice/moth/moth_death.ogg' wing_types = list(/obj/item/organ/external/wings/functional/moth/megamoth, /obj/item/organ/external/wings/functional/moth/mothra) family_heirlooms = list(/obj/item/flashlight/lantern/heirloom_moth) diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index c753e6b8eb5c..46e772a71fcd 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -14,6 +14,7 @@ TRAIT_RADIMMUNE, TRAIT_RESISTCOLD, TRAIT_NOBLOOD, + TRAIT_NO_DNA_COPY, ) inherent_biotypes = MOB_HUMANOID|MOB_MINERAL diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index 49c8a32db086..3cebd9f52233 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -18,6 +18,8 @@ inherent_traits = list( TRAIT_NOBREATH, TRAIT_NOHUNGER, + TRAIT_NO_MIRROR_REFLECTION, + /*TRAIT_USES_SKINTONES,*/ //monkestation temp removal, we dont have this refactor yet ) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID mutant_bodyparts = list("wings" = "None") diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index 190885e1b48e..d29ae4f804e2 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -13,7 +13,7 @@ return /mob/living/carbon/stamina_stun() - if(HAS_TRAIT(src, TRAIT_BATON_RESISTANCE)) + if(HAS_TRAIT(src, TRAIT_CANT_STAMCRIT)) return //baton resistance can't stam crit but can still be non sprinted if(HAS_TRAIT_FROM(src, TRAIT_INCAPACITATED, STAMINA)) //Already in stamcrit return @@ -31,6 +31,7 @@ ADD_TRAIT(src, TRAIT_IMMOBILIZED, STAMINA) ADD_TRAIT(src, TRAIT_FLOORED, STAMINA) filters += FILTER_STAMINACRIT + SEND_SIGNAL(src, COMSIG_LIVING_STAMINA_STUN) addtimer(CALLBACK(src, PROC_REF(exit_stamina_stun)), STAMINA_STUN_TIME) stamina.pause(STAMINA_STUN_TIME + 2 SECONDS) diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 55b97ff38ed4..71e8210bacc6 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -14,6 +14,7 @@ if(!prev_lying) gib_animation() + ghostize() spill_organs(no_brain, no_organs, no_bodyparts) if(!no_bodyparts) @@ -74,6 +75,9 @@ if(stat == DEAD) return FALSE + if(!gibbed && (death_sound || death_message)) + INVOKE_ASYNC(src, TYPE_PROC_REF(/mob, emote), "deathgasp") + set_stat(DEAD) unset_machine() timeofdeath = world.time @@ -106,7 +110,4 @@ if (client) client.move_delay = initial(client.move_delay) - if(!gibbed && (death_sound || death_message)) - INVOKE_ASYNC(src, TYPE_PROC_REF(/mob, emote), "deathgasp") - return TRUE diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index cdf64049ebdd..3faf2c8cb364 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -119,9 +119,14 @@ message_animal_or_basic = custom_message . = ..() message_animal_or_basic = initial(message_animal_or_basic) - if(. && user.death_sound) - if(!user.can_speak() || user.oxyloss >= 50) - return //stop the sound if oxyloss too high/cant speak + if(!. && !user.can_speak() || user.getOxyLoss() >= 50) + return //stop the sound if oxyloss too high/cant speak + var/mob/living/carbon/carbon_user = user + // For masks that give unique death sounds + if(istype(carbon_user) && isclothing(carbon_user.wear_mask) && carbon_user.wear_mask.unique_death) + playsound(carbon_user, carbon_user.wear_mask.unique_death, 200, TRUE, TRUE) + return + if(user.death_sound) playsound(user, user.death_sound, 200, TRUE, TRUE) /datum/emote/living/drool @@ -153,6 +158,8 @@ var/mob/living/carbon/human/H = user var/open = FALSE var/obj/item/organ/external/wings/functional/wings = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS) + + // open/close functional wings if(istype(wings)) if(wings.wings_open) open = TRUE @@ -161,9 +168,14 @@ wings.open_wings() addtimer(CALLBACK(wings, open ? TYPE_PROC_REF(/obj/item/organ/external/wings/functional, open_wings) : TYPE_PROC_REF(/obj/item/organ/external/wings/functional, close_wings)), wing_time) + // play moth flutter noise if moth wing + if(istype(wings, /obj/item/organ/external/wings/moth)) + playsound(H, 'sound/voice/moth/moth_flutter.ogg', 50, TRUE) + /datum/emote/living/flap/aflap key = "aflap" key_third_person = "aflaps" + name = "flap (Angry)" message = "flaps their wings ANGRILY!" hands_use_check = TRUE wing_time = 10 @@ -376,6 +388,13 @@ monkestation edit end */ message_mime = "acts out an exaggerated silent sigh." emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE +/datum/emote/living/sigh/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + if(!ishuman(user)) + return + var/image/emote_animation = image('icons/mob/species/human/emote_visuals.dmi', user, "sigh") + flick_overlay_global(emote_animation, GLOB.clients, 2.0 SECONDS) + /datum/emote/living/sit key = "sit" key_third_person = "sits" @@ -477,7 +496,7 @@ monkestation edit end */ /datum/emote/living/tremble key = "tremble" key_third_person = "trembles" - message = "trembles in fear!" + message = "trembles!" #define TREMBLE_LOOP_DURATION (4.4 SECONDS) /datum/emote/living/tremble/run_emote(mob/living/user, params, type_override, intentional) @@ -508,6 +527,7 @@ monkestation edit end */ /datum/emote/living/twitch_s key = "twitch_s" + name = "twitch (Slight)" message = "twitches." /datum/emote/living/twitch_s/run_emote(mob/living/user, params, type_override, intentional) @@ -532,6 +552,7 @@ monkestation edit end */ /datum/emote/living/wsmile key = "wsmile" key_third_person = "wsmiles" + name = "smile (Weak)" message = "smiles weakly." /// The base chance for your yawn to propagate to someone else if they're on the same tile as you diff --git a/code/modules/mob/living/init_signals.dm b/code/modules/mob/living/init_signals.dm index fae78c27fc86..be431ccf31f8 100644 --- a/code/modules/mob/living/init_signals.dm +++ b/code/modules/mob/living/init_signals.dm @@ -6,6 +6,14 @@ RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_DEATHCOMA), PROC_REF(on_deathcoma_trait_gain)) RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_DEATHCOMA), PROC_REF(on_deathcoma_trait_loss)) + RegisterSignals(src, list( + SIGNAL_ADDTRAIT(TRAIT_FAKEDEATH), + SIGNAL_REMOVETRAIT(TRAIT_FAKEDEATH), + + SIGNAL_ADDTRAIT(TRAIT_DEFIB_BLACKLISTED), + SIGNAL_REMOVETRAIT(TRAIT_DEFIB_BLACKLISTED), + ), PROC_REF(update_medhud_on_signal)) + RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_IMMOBILIZED), PROC_REF(on_immobilized_trait_gain)) RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_IMMOBILIZED), PROC_REF(on_immobilized_trait_loss)) @@ -67,7 +75,6 @@ if(stat <= UNCONSCIOUS) update_stat() - /// Called when [TRAIT_DEATHCOMA] is added to the mob. /mob/living/proc/on_deathcoma_trait_gain(datum/source) SIGNAL_HANDLER @@ -78,6 +85,11 @@ SIGNAL_HANDLER REMOVE_TRAIT(src, TRAIT_KNOCKEDOUT, TRAIT_DEATHCOMA) +/// Updates medhud when recieving relevant signals. +/mob/living/proc/update_medhud_on_signal(datum/source) + SIGNAL_HANDLER + med_hud_set_health() + med_hud_set_status() /// Called when [TRAIT_IMMOBILIZED] is added to the mob. /mob/living/proc/on_immobilized_trait_gain(datum/source) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 12650935847b..57b437207346 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1,7 +1,8 @@ /mob/living/Initialize(mapload) . = ..() stamina = new(src) - + if(current_size != RESIZE_DEFAULT_SIZE) + update_transform(current_size) AddElement(/datum/element/movetype_handler) register_init_signals() if(unique_name) @@ -431,19 +432,21 @@ if(GRAB_KILL) offset = GRAB_PIXEL_SHIFT_NECK M.setDir(get_dir(M, src)) + var/target_pixel_x = M.base_pixel_x + M.body_position_pixel_x_offset + var/target_pixel_y = M.base_pixel_y + M.body_position_pixel_y_offset switch(M.dir) if(NORTH) - animate(M, pixel_x = M.base_pixel_x, pixel_y = M.base_pixel_y + offset, 3) + animate(M, pixel_x = target_pixel_x, pixel_y = target_pixel_y + offset, 3) if(SOUTH) - animate(M, pixel_x = M.base_pixel_x, pixel_y = M.base_pixel_y - offset, 3) + animate(M, pixel_x = target_pixel_x, pixel_y = target_pixel_y - offset, 3) if(EAST) if(M.lying_angle == 270) //update the dragged dude's direction if we've turned M.set_lying_angle(90) - animate(M, pixel_x = M.base_pixel_x + offset, pixel_y = M.base_pixel_y, 3) + animate(M, pixel_x = target_pixel_x + offset, pixel_y = target_pixel_y, 3) if(WEST) if(M.lying_angle == 90) M.set_lying_angle(270) - animate(M, pixel_x = M.base_pixel_x - offset, pixel_y = M.base_pixel_y, 3) + animate(M, pixel_x = target_pixel_x - offset, pixel_y = target_pixel_y, 3) /mob/living/proc/reset_pull_offsets(mob/living/M, override) if(!override && M.buckled) @@ -671,8 +674,8 @@ return if(resting || body_position == STANDING_UP || HAS_TRAIT(src, TRAIT_FLOORED)) return - set_lying_angle(0) set_body_position(STANDING_UP) + set_lying_angle(0) /mob/living/proc/rest_checks_callback() @@ -692,7 +695,8 @@ add_traits(list(TRAIT_UI_BLOCKED, TRAIT_PULL_BLOCKED, TRAIT_UNDENSE), LYING_DOWN_TRAIT) if(HAS_TRAIT(src, TRAIT_FLOORED) && !(dir & (NORTH|SOUTH))) setDir(pick(NORTH, SOUTH)) // We are and look helpless. - body_position_pixel_y_offset = PIXEL_Y_OFFSET_LYING + if(rotate_on_lying) + body_position_pixel_y_offset = PIXEL_Y_OFFSET_LYING playsound(loc, 'goon/sounds/body_thud.ogg', ishuman(src) ? 40 : 15, 1, 0.3, mixer_channel = CHANNEL_MOB_SOUNDS) @@ -702,7 +706,13 @@ layer = initial(layer) remove_traits(list(TRAIT_UI_BLOCKED, TRAIT_PULL_BLOCKED, TRAIT_UNDENSE), LYING_DOWN_TRAIT) // Make sure it doesn't go out of the southern bounds of the tile when standing. - body_position_pixel_y_offset = (resize-1) * world.icon_size/2 + body_position_pixel_y_offset = get_pixel_y_offset_standing(current_size) + +/// Returns what the body_position_pixel_y_offset should be if the current size were `value` +/mob/living/proc/get_pixel_y_offset_standing(value) + var/icon/living_icon = icon(icon) + var/height = living_icon.Height() + return (value-1) * height * 0.5 /mob/living/proc/update_density() if(HAS_TRAIT(src, TRAIT_UNDENSE)) @@ -1168,7 +1178,7 @@ buckled.user_unbuckle_mob(src,src) /mob/living/proc/resist_fire() - return + return FALSE /mob/living/proc/resist_restraints() return @@ -1244,12 +1254,8 @@ loc_temp = ((1 - occupied_space.contents_thermal_insulation) * loc_temp) + (occupied_space.contents_thermal_insulation * bodytemperature) return loc_temp -/mob/living/cancel_camera() - ..() - cameraFollow = null - /// Checks if this mob can be actively tracked by cameras / AI. -/// Can optionally be passed a user, which is the mob tracking. +/// Can optionally be passed a user, which is the mob who is tracking src. /mob/living/proc/can_track(mob/living/user) //basic fast checks go first. When overriding this proc, I recommend calling ..() at the end. if(SEND_SIGNAL(src, COMSIG_LIVING_CAN_TRACK, user) & COMPONENT_CANT_TRACK) @@ -1268,7 +1274,7 @@ if(invisibility || alpha == 0)//cloaked return FALSE // Now, are they viewable by a camera? (This is last because it's the most intensive check) - if(!near_camera(src)) + if(!GLOB.cameranet.checkCameraVis(src)) return FALSE return TRUE @@ -1376,8 +1382,7 @@ // Disconnect AI's in shells if(Robot.connected_ai) Robot.connected_ai.disconnect_shell() - if(Robot.mmi) - qdel(Robot.mmi) + QDEL_NULL(Robot.mmi) Robot.notify_ai(AI_NOTIFICATION_NEW_BORG) else for(var/obj/item/item in src) @@ -1427,7 +1432,7 @@ created_robot.clear_zeroth_law(announce = FALSE) if(WABBAJACK_SLIME) - new_mob = new /mob/living/simple_animal/slime/random(loc) + new_mob = new /mob/living/basic/slime/random(loc) if(WABBAJACK_XENO) var/picked_xeno_type @@ -1857,6 +1862,11 @@ GLOBAL_LIST_EMPTY(fire_appearances) if(NAMEOF(src, body_position)) set_body_position(var_value) . = TRUE + if(NAMEOF(src, current_size)) + if(var_value == 0) //prevents divisions of and by zero. + return FALSE + update_transform(var_value/current_size) + . = TRUE if(!isnull(.)) datum_flags |= DF_VAR_EDITED @@ -1867,8 +1877,6 @@ GLOBAL_LIST_EMPTY(fire_appearances) switch(var_name) if(NAMEOF(src, maxHealth)) updatehealth() - if(NAMEOF(src, resize)) - update_transform() if(NAMEOF(src, lighting_cutoff)) sync_lighting_plane_cutoff() @@ -2331,8 +2339,8 @@ GLOBAL_LIST_EMPTY(fire_appearances) /// Proc to append behavior to the condition of being floored. Called when the condition starts. /mob/living/proc/on_floored_start() if(body_position == STANDING_UP) //force them on the ground - set_lying_angle(pick(90, 270)) set_body_position(LYING_DOWN) + set_lying_angle(pick(90, 270)) on_fall() @@ -2582,7 +2590,15 @@ GLOBAL_LIST_EMPTY(fire_appearances) if(isnull(guardian_client)) return else if(guardian_client == "Poll Ghosts") - var/list/candidates = poll_ghost_candidates("Do you want to play as an admin created Guardian Spirit of [real_name]?", ROLE_PAI, FALSE, 100, POLL_IGNORE_HOLOPARASITE) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob( + "Do you want to play as an admin created Guardian Spirit of [real_name]?", + check_jobban = ROLE_PAI, + poll_time = 10 SECONDS, + target_mob = src, + ignore_category = POLL_IGNORE_HOLOPARASITE, + pic_source = /mob/living/basic/guardian, + role_name_text = "guardian spirit" + ) if(LAZYLEN(candidates)) var/mob/dead/observer/candidate = pick(candidates) guardian_client = candidate.client @@ -2598,7 +2614,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) if(picked_theme == "Random") picked_theme = null //holopara code handles not having a theme by giving a random one var/picked_name = tgui_input_text(admin, "Name the guardian, leave empty to let player name it.", "Guardian Controller") - var/picked_color = input(admin, "Set the guardian's color, cancel to let player set it.", "Guardian Controller", "#ffffff") as color|null + var/picked_color = tgui_color_picker(admin, "Set the guardian's color, cancel to let player set it.", "Guardian Controller", "#ffffff") if(tgui_alert(admin, "Confirm creation.", "Guardian Controller", list("Yes", "No")) != "Yes") return var/mob/living/basic/guardian/summoned_guardian = new picked_type(src, picked_theme) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index d96ea66e9268..a6481e93ae01 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -261,29 +261,6 @@ user.set_pull_offsets(src, grab_state) return TRUE - -/mob/living/attack_slime(mob/living/simple_animal/slime/M, list/modifiers) - if(!SSticker.HasRoundStarted()) - to_chat(M, "You cannot attack people before the game has started.") - return - - if(M.buckled) - if(M in buckled_mobs) - M.Feedstop() - return // can't attack while eating! - - if(HAS_TRAIT(src, TRAIT_PACIFISM)) - to_chat(M, span_warning("You don't want to hurt anyone!")) - return FALSE - - if (stat != DEAD) - log_combat(M, src, "attacked") - M.do_attack_animation(src) - visible_message(span_danger("\The [M.name] glomps [src]!"), \ - span_userdanger("\The [M.name] glomps you!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, M) - to_chat(M, span_danger("You glomp [src]!")) - return TRUE - /mob/living/attack_animal(mob/living/simple_animal/user, list/modifiers) . = ..() user.face_atom(src) @@ -476,7 +453,7 @@ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cult_ending_helper), CULT_VICTORY_MASS_CONVERSION), 120) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(ending_helper)), 270) if(client) - makeNewConstruct(/mob/living/basic/construct/harvester, src, cultoverride = TRUE) + make_new_construct(/mob/living/basic/construct/harvester, src, cultoverride = TRUE) else switch(rand(1, 4)) if(1) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 5b7ee004c039..fc9ffb53cc45 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -5,8 +5,8 @@ hud_type = /datum/hud/living - ///Badminnery resize - var/resize = 1 + ///Tracks the current size of the mob in relation to its original size. Use update_transform(resize) to change it. + var/current_size = RESIZE_DEFAULT_SIZE var/lastattacker = null var/lastattackerckey = null @@ -61,6 +61,8 @@ VAR_PROTECTED/lying_angle = 0 /// Value of lying lying_angle before last change. TODO: Remove the need for this. var/lying_prev = 0 + /// Does the mob rotate when lying + var/rotate_on_lying = FALSE ///Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out. var/last_special = 0 var/timeofdeath = 0 @@ -91,8 +93,6 @@ /// Used by [living/Bump()][/mob/living/proc/Bump] and [living/PushAM()][/mob/living/proc/PushAM] to prevent potential infinite loop. var/now_pushing = null - var/cameraFollow = null - /// Time of death var/tod = null @@ -201,10 +201,12 @@ /// Is this mob allowed to be buckled/unbuckled to/from things? var/can_buckle_to = TRUE - ///The y amount a mob's sprite should be offset due to the current position they're in (e.g. lying down moves your sprite down) - var/body_position_pixel_x_offset = 0 ///The x amount a mob's sprite should be offset due to the current position they're in + var/body_position_pixel_x_offset = 0 + ///The y amount a mob's sprite should be offset due to the current position they're in or size (e.g. lying down moves your sprite down) var/body_position_pixel_y_offset = 0 + ///The height offset of a mob's maptext due to their current size. + var/body_maptext_height_offset = 0 /// FOV view that is applied from either nativeness or traits var/fov_view @@ -224,6 +226,3 @@ var/datum/stamina_container/stamina /// What our current gravity state is. Used to avoid duplicate animates and such var/gravity_state = null - - /// Whether this mob can be mutated into a cybercop via quantum server get_valid_domain_targets(). Specifically dodges megafauna - var/can_be_cybercop = TRUE diff --git a/code/modules/mob/living/living_update_icons.dm b/code/modules/mob/living/living_update_icons.dm index be0d4daab7f2..a9e1a136800b 100644 --- a/code/modules/mob/living/living_update_icons.dm +++ b/code/modules/mob/living/living_update_icons.dm @@ -1,17 +1,66 @@ - -/// Called whenever the mob is to be resized or when lying/standing up for carbons. -/mob/living/update_transform() - perform_update_transform() // carbon mobs do it differently than silicons and simple animals. - SEND_SIGNAL(src, COMSIG_LIVING_POST_UPDATE_TRANSFORM) // ...and we want the signal to be sent last. - -/mob/living/proc/perform_update_transform() +/** + * Called whenever the mob is to be resized or when lying/standing up for carbons. + * IMPORTANT: Multiple animate() calls do not stack well, so try to do them all at once if you can. + */ +/mob/living/proc/update_transform(resize = RESIZE_DEFAULT_SIZE) var/matrix/ntransform = matrix(transform) //aka transform.Copy() + var/final_pixel_y = base_pixel_y + body_position_pixel_y_offset + /** + * pixel x/y/w/z all discard values after the decimal separator. + * That, coupled with the rendered interpolation, may make the + * icons look awfuller than they already are, or not, whatever. + * The solution to this nit is translating the missing decimals. + * also flooring increases the distance from 0 for negative numbers. + */ + var/abs_pixel_y_offset = 0 + var/translate = 0 + if(current_size != RESIZE_DEFAULT_SIZE) + var/standing_offset = get_pixel_y_offset_standing(current_size) + abs_pixel_y_offset = abs(standing_offset) + translate = (abs_pixel_y_offset - round(abs_pixel_y_offset)) * SIGN(standing_offset) + var/final_dir = dir var/changed = FALSE + if(lying_angle != lying_prev && rotate_on_lying) + changed = TRUE + if(lying_angle && lying_prev == 0) + if(translate) + ntransform.Translate(0, -translate) + if(dir & (EAST|WEST)) //Standing to lying and facing east or west + final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass + else if(translate && !lying_angle && lying_prev != 0) + ntransform.Translate(translate * (lying_prev == 270 ? -1 : 1), 0) + ///Done last, as it can mess with the translation. + ntransform.TurnTo(lying_prev, lying_angle) + if(resize != RESIZE_DEFAULT_SIZE) changed = TRUE + var/is_vertical = !lying_angle || !rotate_on_lying + ///scaling also affects translation, so we've to undo the old translate beforehand. + if(translate && is_vertical) + ntransform.Translate(0, -translate) ntransform.Scale(resize) - resize = RESIZE_DEFAULT_SIZE + current_size *= resize + //Update the height of the maptext according to the size of the mob so they don't overlap. + var/old_maptext_offset = body_maptext_height_offset + body_maptext_height_offset = initial(maptext_height) * (current_size - 1) * 0.5 + maptext_height += body_maptext_height_offset - old_maptext_offset + //Update final_pixel_y so our mob doesn't go out of the southern bounds of the tile when standing + if(is_vertical) //But not if the mob has been rotated. + //Make sure the body position y offset is also updated + body_position_pixel_y_offset = get_pixel_y_offset_standing(current_size) + abs_pixel_y_offset = abs(body_position_pixel_y_offset) + var/new_translate = (abs_pixel_y_offset - round(abs_pixel_y_offset)) * SIGN(body_position_pixel_y_offset) + if(new_translate) + ntransform.Translate(0, new_translate) + final_pixel_y = base_pixel_y + body_position_pixel_y_offset + + if(!changed) //Nothing has been changed, nothing has to be done. + return + + SEND_SIGNAL(src, COMSIG_PAUSE_FLOATING_ANIM, 0.3 SECONDS) + //if true, we want to avoid any animation time, it'll tween and not rotate at all otherwise. + var/is_opposite_angle = SIMPLIFY_DEGREES(lying_angle+180) == lying_prev + animate(src, transform = ntransform, time = is_opposite_angle ? 0 : UPDATE_TRANSFORM_ANIMATION_TIME, pixel_y = final_pixel_y, dir = final_dir, easing = (EASE_IN|EASE_OUT)) - if(changed) - animate(src, transform = ntransform, time = 2, easing = EASE_IN|EASE_OUT) + SEND_SIGNAL(src, COMSIG_LIVING_POST_UPDATE_TRANSFORM, resize, lying_angle, is_opposite_angle) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index ce743b409ba8..a887550906bd 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -44,7 +44,6 @@ var/obj/item/multitool/aiMulti ///Weakref to the bot the ai's commanding right now var/datum/weakref/bot_ref - var/tracking = FALSE //this is 1 if the AI is currently tracking somebody, but the track has not yet been completed. var/datum/effect_system/spark_spread/spark_system //So they can initialize sparks whenever //MALFUNCTION @@ -64,7 +63,8 @@ var/camera_light_on = FALSE var/list/obj/machinery/camera/lit_cameras = list() - var/datum/trackable/track = new + ///The internal tool used to track players visible through cameras. + var/datum/trackable/ai_tracking_tool var/last_tablet_note_seen = null var/can_shunt = TRUE @@ -78,8 +78,8 @@ var/mob/camera/ai_eye/eyeobj var/sprint = 10 - var/cooldown = 0 - var/acceleration = 1 + var/last_moved = 0 + var/acceleration = TRUE var/obj/structure/ai_core/deactivated/linked_core //For exosuit control var/mob/living/silicon/robot/deployed_shell = null //For shell control @@ -195,6 +195,10 @@ builtInCamera = new (src) builtInCamera.network = list("ss13") + ai_tracking_tool = new(src) + RegisterSignal(ai_tracking_tool, COMSIG_TRACKABLE_TRACKING_TARGET, PROC_REF(on_track_target)) + RegisterSignal(ai_tracking_tool, COMSIG_TRACKABLE_GLIDE_CHANGED, PROC_REF(tracked_glidesize_changed)) + add_traits(list(TRAIT_PULL_BLOCKED, TRAIT_HANDS_BLOCKED), ROUNDSTART_TRAIT) alert_control = new(src, list(ALARM_ATMOS, ALARM_FIRE, ALARM_POWER, ALARM_CAMERA, ALARM_BURGLAR, ALARM_MOTION), list(z), camera_view = TRUE) @@ -207,7 +211,7 @@ switch(_key) if("`", "0") if(cam_prev) - cameraFollow = null //stop following something, we want to jump away. + ai_tracking_tool.reset_tracking() eyeobj.setLoc(cam_prev) return if("1", "2", "3", "4", "5", "6", "7", "8", "9") @@ -218,7 +222,7 @@ return if(cam_hotkeys[_key]) //if this is false, no hotkey for this slot exists. cam_prev = eyeobj.loc - cameraFollow = null //stop following something, we want to jump away. + ai_tracking_tool.reset_tracking() eyeobj.setLoc(cam_hotkeys[_key]) return return ..() @@ -234,6 +238,7 @@ QDEL_NULL(robot_control) QDEL_NULL(aiMulti) QDEL_NULL(alert_control) + QDEL_NULL(ai_tracking_tool) malfhack = null current = null bot_ref = null @@ -362,6 +367,26 @@ /mob/living/silicon/ai/cancel_camera() view_core() +/mob/living/silicon/ai/verb/ai_camera_track() + set name = "track" + set hidden = TRUE //Don't display it on the verb lists. This verb exists purely so you can type "track Oldman Robustin" and follow his ass + + ai_tracking_tool.track_input(src) + +///Called when an AI finds their tracking target. +/mob/living/silicon/ai/proc/on_track_target(datum/trackable/source, mob/living/target) + SIGNAL_HANDLER + if(eyeobj) + eyeobj.setLoc(get_turf(target)) + else + view_core() + +/// Keeps our rate of gliding in step with the mob we're following +/mob/living/silicon/ai/proc/tracked_glidesize_changed(datum/trackable/source, mob/living/target, new_glide_size) + SIGNAL_HANDLER + if(eyeobj) + eyeobj.glide_size = new_glide_size + /mob/living/silicon/ai/verb/toggle_anchor() set category = "AI Commands" set name = "Toggle Floor Bolts" @@ -480,24 +505,7 @@ else to_chat(src, span_notice("Unable to project to the holopad.")) if(href_list["track"]) - var/string = href_list["track"] - trackable_mobs() - var/list/trackeable = list() - trackeable += track.humans + track.others - var/list/target = list() - for(var/I in trackeable) - var/datum/weakref/to_resolve = trackeable[I] - var/mob/to_track = to_resolve.resolve() - if(!to_track || to_track.name != string) - continue - target += to_track - if(name == string) - target += src - if(length(target)) - cam_prev = get_turf(eyeobj) - ai_actual_track(pick(target)) - else - to_chat(src, "Target is not on or near any active cameras on the station.") + ai_tracking_tool.track_name(src, href_list["track"]) return if (href_list["ai_take_control"]) //Mech domination var/obj/vehicle/sealed/mecha/M = locate(href_list["ai_take_control"]) in GLOB.mechas_list @@ -536,12 +544,12 @@ if(QDELETED(C)) return FALSE - if(!tracking) - cameraFollow = null - if(QDELETED(eyeobj)) view_core() return + + ai_tracking_tool.reset_tracking() + // ok, we're alive, camera is good and in our network... eyeobj.setLoc(get_turf(C)) return TRUE @@ -610,7 +618,7 @@ set category = "AI Commands" set name = "Jump To Network" unset_machine() - cameraFollow = null + ai_tracking_tool.reset_tracking() var/cameralist[0] if(incapacitated()) @@ -1076,7 +1084,6 @@ if(deployed_shell) //Forcibly call back AI in event of things such as damage, EMP or power loss. to_chat(src, span_danger("Your remote connection has been reset!")) deployed_shell.undeploy() - UnregisterSignal(deployed_shell, COMSIG_LIVING_DEATH) diag_hud_set_deployed() /mob/living/silicon/ai/resist() @@ -1121,6 +1128,14 @@ else if(.) REMOVE_TRAIT(src, TRAIT_INCAPACITATED, POWER_LACK_TRAIT) +/mob/living/silicon/ai/proc/show_camera_list() + var/list/cameras = get_camera_list(network) + var/camera = tgui_input_list(src, "Choose which camera you want to view", "Cameras", cameras) + if(isnull(camera)) + return + if(isnull(cameras[camera])) + return + switchCamera(cameras[camera]) /mob/living/silicon/on_handsblocked_start() return // AIs have no hands diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index 2a0f6dab294a..ed0a16a5b445 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -17,9 +17,6 @@ return ..() -/mob/living/silicon/ai/attack_slime(mob/living/simple_animal/slime/user, list/modifiers) - return //immune to slimes - /mob/living/silicon/ai/blob_act(obj/structure/blob/B) if (stat != DEAD) adjustBruteLoss(60) diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm index 244e7e4ec74f..d9a765a55eaa 100644 --- a/code/modules/mob/living/silicon/ai/ai_say.dm +++ b/code/modules/mob/living/silicon/ai/ai_say.dm @@ -47,7 +47,7 @@ else padloc = "(UNKNOWN)" src.log_talk(message, LOG_SAY, tag="HOLOPAD in [padloc]") - ai_holo.say(message, language = language) + ai_holo.say(message, sanitize = FALSE, language = language) else to_chat(src, span_alert("No holopad connected.")) diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index 52546c6109fe..03824857c4ef 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -6,30 +6,28 @@ // Will update all AI status displays with a blue screen of death INVOKE_ASYNC(src, PROC_REF(emote), "bsod") + if(!isnull(deployed_shell)) + disconnect_shell() + . = ..() cut_overlays() //remove portraits - var/old_icon = icon_state - if("[icon_state]_dead" in icon_states(icon)) - icon_state = "[icon_state]_dead" + var/base_icon = icon_state + if(icon_exists(icon, "[base_icon]_dead")) + icon_state = "[base_icon]_dead" else icon_state = "ai_dead" - if("[old_icon]_death_transition" in icon_states(icon)) - flick("[old_icon]_death_transition", src) - cameraFollow = null + if(icon_exists(icon, "[base_icon]_death_transition")) + flick("[base_icon]_death_transition", src) - set_anchored(FALSE) //unbolt floorbolts - status_flags |= CANPUSH //we want it to be pushable when unanchored on death - REMOVE_TRAIT(src, TRAIT_NO_TELEPORT, AI_ANCHOR_TRAIT) //removes the anchor trait, because its not anchored anymore - move_resist = MOVE_FORCE_NORMAL - is_anchored = FALSE + if(is_anchored) + flip_anchored() if(eyeobj) eyeobj.setLoc(get_turf(src)) set_eyeobj_visible(FALSE) - GLOB.shuttle_caller_list -= src SSshuttle.autoEvac() @@ -41,12 +39,7 @@ if(explosive) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(explosion), loc, 3, 6, 12, null, 15), 1 SECONDS) - if(istype(loc, /obj/item/aicard/aitater)) - loc.icon_state = "aitater-404" - else if(istype(loc, /obj/item/aicard/aispook)) - loc.icon_state = "aispook-404" - else if(istype(loc, /obj/item/aicard)) - loc.icon_state = "aicard-404" + SSblackbox.ReportDeath(src) /mob/living/silicon/ai/proc/ShutOffDoomsdayDevice() if(nuking) diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm index 9b72c455995b..a9ad9884045d 100644 --- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm +++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm @@ -165,9 +165,10 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) /// Will check if a mob is on a viewable turf. Returns 1 if it is, otherwise returns 0. /datum/cameranet/proc/checkCameraVis(mob/living/target) var/turf/position = get_turf(target) + if(!position) + return return checkTurfVis(position) - /datum/cameranet/proc/checkTurfVis(turf/position) var/datum/camerachunk/chunk = getCameraChunk(position.x, position.y, position.z) if(chunk) @@ -177,6 +178,16 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) return TRUE return FALSE +/datum/cameranet/proc/getTurfVis(turf/position) + RETURN_TYPE(/datum/camerachunk) + var/datum/camerachunk/chunk = getCameraChunk(position.x, position.y, position.z) + if(!chunk) + return FALSE + if(chunk.changed) + chunk.hasChanged(1) // Update now, no matter if it's visible or not. + if(chunk.visibleTurfs[position]) + return chunk + /obj/effect/overlay/camera_static name = "static" icon = null diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index e5390f9a3f07..0339a118c120 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -93,32 +93,33 @@ // It will also stream the chunk that the new loc is in. /mob/camera/ai_eye/proc/setLoc(destination, force_update = FALSE) - if(ai) - if(!isturf(ai.loc)) - return - destination = get_turf(destination) - if(!force_update && (destination == get_turf(src)) ) - return //we are already here! - if (destination) - abstract_move(destination) - else - moveToNullspace() - if(use_static) - ai.camera_visibility(src) - if(ai.client && !ai.multicam_on) - ai.client.set_eye(src) - update_ai_detect_hud() - update_parallax_contents() - //Holopad - if(istype(ai.current, /obj/machinery/holopad)) - var/obj/machinery/holopad/H = ai.current - if(!H.move_hologram(ai, destination)) - H.clear_holo(ai) - - if(ai.camera_light_on) - ai.light_cameras() - if(ai.master_multicam) - ai.master_multicam.refresh_view() + if(!ai) + return + if(!isturf(ai.loc)) + return + destination = get_turf(destination) + if(!force_update && (destination == get_turf(src))) + return //we are already here! + if (destination) + abstract_move(destination) + else + moveToNullspace() + if(use_static) + ai.camera_visibility(src) + if(ai.client && !ai.multicam_on) + ai.client.set_eye(src) + update_ai_detect_hud() + update_parallax_contents() + //Holopad + if(istype(ai.current, /obj/machinery/holopad)) + var/obj/machinery/holopad/H = ai.current + if(!H.move_hologram(ai, destination)) + H.clear_holo(ai) + + if(ai.camera_light_on) + ai.light_cameras() + if(ai.master_multicam) + ai.master_multicam.refresh_view() /mob/camera/ai_eye/zMove(dir, turf/target, z_move_flags = NONE, recursions_left = 1, list/falling_movs) . = ..() @@ -149,37 +150,48 @@ return ..() /atom/proc/move_camera_by_click() - if(isAI(usr)) - var/mob/living/silicon/ai/AI = usr - if(AI.eyeobj && (AI.multicam_on || (AI.client.eye == AI.eyeobj)) && (AI.eyeobj.z == z)) - AI.cameraFollow = null - if (isturf(loc) || isturf(src)) - AI.eyeobj.setLoc(src) + if(!isAI(usr)) + return + var/mob/living/silicon/ai/AI = usr + if(AI.eyeobj && (AI.multicam_on || (AI.client.eye == AI.eyeobj)) && (AI.eyeobj.z == z)) + AI.ai_tracking_tool.reset_tracking() + if (isturf(loc) || isturf(src)) + AI.eyeobj.setLoc(src) // This will move the AIEye. It will also cause lights near the eye to light up, if toggled. // This is handled in the proc below this one. - -/client/proc/AIMove(n, direct, mob/living/silicon/ai/user) - - var/initial = initial(user.sprint) - var/max_sprint = 50 - - if(user.cooldown && user.cooldown < world.timeofday) // 3 seconds - user.sprint = initial - - for(var/i = 0; i < max(user.sprint, initial); i += 20) - var/turf/step = get_turf(get_step(user.eyeobj, direct)) +#define SPRINT_PER_TICK 0.5 +#define MAX_SPRINT 50 +#define SPRINT_PER_STEP 20 +/mob/living/silicon/ai/proc/AIMove(direction) + if(last_moved && last_moved + 1 < world.timeofday) + // Decay sprint based off how long it took us to input this next move + var/missed_sprint = max((world.timeofday + 1) - last_moved, 0) * SPRINT_PER_TICK + sprint = max(sprint - missed_sprint * 7, initial(sprint)) + + // We move a full step, at least. Can't glide more with our current movement mode, so this is how I have to live + var/step_count = 0 + for(var/i = 0; i < max(sprint, initial(sprint)); i += SPRINT_PER_STEP) + step_count += 1 + var/turf/step = get_turf(get_step(eyeobj, direction)) if(step) - user.eyeobj.setLoc(step) + eyeobj.setLoc(step) + + // I'd like to make this scale with the steps we take, but it like, just can't + // So we're doin this instead + eyeobj.glide_size = world.icon_size - user.cooldown = world.timeofday + 5 - if(user.acceleration) - user.sprint = min(user.sprint + 0.5, max_sprint) + last_moved = world.timeofday + if(acceleration) + sprint = min(sprint + SPRINT_PER_TICK, MAX_SPRINT) else - user.sprint = initial + sprint = initial(sprint) + + ai_tracking_tool.reset_tracking() - if(!user.tracking) - user.cameraFollow = null +#undef SPRINT_PER_STEP +#undef MAX_SPRINT +#undef SPRINT_PER_TICK // Return to the Core. /mob/living/silicon/ai/proc/view_core() @@ -188,7 +200,8 @@ H.clear_holo(src) else current = null - cameraFollow = null + if(ai_tracking_tool) + ai_tracking_tool.reset_tracking() unset_machine() if(isturf(loc) && (QDELETED(eyeobj) || !eyeobj.loc)) @@ -227,7 +240,7 @@ /mob/camera/ai_eye/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, list/message_mods = list(), message_range) . = ..() - if(relay_speech && speaker && ai && !radio_freq && speaker != ai && near_camera(speaker)) + if(relay_speech && speaker && ai && !radio_freq && speaker != ai && GLOB.cameranet.checkCameraVis(speaker)) ai.relay_speech(message, speaker, message_language, raw_message, radio_freq, spans, message_mods) /obj/effect/overlay/ai_detect_hud diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm index bf29bf5f771e..81026bf11b99 100644 --- a/code/modules/mob/living/silicon/robot/death.dm +++ b/code/modules/mob/living/silicon/robot/death.dm @@ -3,9 +3,9 @@ new /obj/effect/temp_visual/gib_animation(loc, "gibbed-r") /mob/living/silicon/robot/dust(just_ash, drop_items, force) - if(mmi) - qdel(mmi) - ..() + // You do not get MMI'd if you are dusted + QDEL_NULL(mmi) + return ..() /mob/living/silicon/robot/spawn_dust() new /obj/effect/decal/remains/robot(loc) @@ -16,7 +16,9 @@ /mob/living/silicon/robot/death(gibbed) if(stat == DEAD) return - if(!gibbed) + if(gibbed) + dump_into_mmi() + else logevent("FATAL -- SYSTEM HALT") modularInterface.shutdown_computer() . = ..() diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm index 76106a375666..f4d9f147b18b 100644 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ b/code/modules/mob/living/silicon/robot/laws.dm @@ -73,7 +73,9 @@ var/datum/computer_file/program/robotact/program = modularInterface.get_robotact() if(program) - program.force_full_update() + var/datum/tgui/active_ui = SStgui.get_open_ui(src, program.computer) + if(active_ui) + active_ui.send_full_update() picturesync() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 3ec455370b5b..8962ff842c99 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -89,18 +89,6 @@ alert_control.listener.RegisterSignal(src, COMSIG_LIVING_DEATH, TYPE_PROC_REF(/datum/alarm_listener, prevent_alarm_changes)) alert_control.listener.RegisterSignal(src, COMSIG_LIVING_REVIVE, TYPE_PROC_REF(/datum/alarm_listener, allow_alarm_changes)) -/mob/living/silicon/robot/model/syndicate/Initialize(mapload) - . = ..() - laws = new /datum/ai_laws/syndicate_override() - addtimer(CALLBACK(src, PROC_REF(show_playstyle)), 5) - -/mob/living/silicon/robot/model/syndicate/create_modularInterface() - if(!modularInterface) - modularInterface = new /obj/item/modular_computer/pda/silicon/cyborg/syndicate(src) - modularInterface.saved_identification = real_name - modularInterface.saved_job = "Cyborg" - return ..() - /mob/living/silicon/robot/set_suicide(suicide_state) . = ..() if(mmi) @@ -128,30 +116,12 @@ //If there's an MMI in the robot, have it ejected when the mob goes away. --NEO /mob/living/silicon/robot/Destroy() - var/atom/T = drop_location()//To hopefully prevent run time errors. - if(mmi && mind)//Safety for when a cyborg gets dust()ed. Or there is no MMI inside. - if(T) - mmi.forceMove(T) - if(mmi.brainmob) - if(mmi.brainmob.stat == DEAD) - mmi.brainmob.set_stat(CONSCIOUS) - mind.transfer_to(mmi.brainmob) - mmi.update_appearance() - else - to_chat(src, span_boldannounce("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("Borg MMI lacked a brainmob") - mmi = null - if(modularInterface) - QDEL_NULL(modularInterface) if(connected_ai) set_connected_ai(null) if(shell) GLOB.available_ai_shells -= src - else - if(T && istype(radio) && istype(radio.keyslot)) - radio.keyslot.forceMove(T) - radio.keyslot = null + + QDEL_NULL(modularInterface) QDEL_NULL(wires) QDEL_NULL(model) QDEL_NULL(eye_lights) @@ -162,7 +132,8 @@ QDEL_NULL(spark_system) QDEL_NULL(alert_control) QDEL_LIST(upgrades) - cell = null + QDEL_NULL(cell) + QDEL_NULL(robot_suit) return ..() /mob/living/silicon/robot/Topic(href, href_list) @@ -309,8 +280,9 @@ /mob/living/silicon/robot/proc/after_tip_over(mob/user) - if(hat) + if(hat && !HAS_TRAIT(hat, TRAIT_NODROP)) hat.forceMove(drop_location()) + unbuckle_all_mobs() ///For any special cases for robots after being righted. @@ -530,52 +502,62 @@ lampButton?.update_appearance() update_icons() -/mob/living/silicon/robot/proc/deconstruct() +/mob/living/silicon/robot/proc/cyborg_deconstruct() SEND_SIGNAL(src, COMSIG_BORG_SAFE_DECONSTRUCT) if(shell) undeploy() - var/turf/T = get_turf(src) + var/turf/drop_to = drop_location() if (robot_suit) - robot_suit.forceMove(T) - robot_suit.l_leg.forceMove(T) - robot_suit.l_leg = null - robot_suit.r_leg.forceMove(T) - robot_suit.r_leg = null - new /obj/item/stack/cable_coil(T, robot_suit.chest.wired) - robot_suit.chest.forceMove(T) - robot_suit.chest.wired = FALSE - robot_suit.chest = null - robot_suit.l_arm.forceMove(T) - robot_suit.l_arm = null - robot_suit.r_arm.forceMove(T) - robot_suit.r_arm = null - robot_suit.head.forceMove(T) - robot_suit.head.flash1.forceMove(T) - robot_suit.head.flash1.burn_out() - robot_suit.head.flash1 = null - robot_suit.head.flash2.forceMove(T) - robot_suit.head.flash2.burn_out() - robot_suit.head.flash2 = null - robot_suit.head = null - robot_suit.update_appearance() + robot_suit.drop_all_parts(drop_to) + else - new /obj/item/robot_suit(T) - new /obj/item/bodypart/leg/left/robot(T) - new /obj/item/bodypart/leg/right/robot(T) - new /obj/item/stack/cable_coil(T, 1) - new /obj/item/bodypart/chest/robot(T) - new /obj/item/bodypart/arm/left/robot(T) - new /obj/item/bodypart/arm/right/robot(T) - new /obj/item/bodypart/head/robot(T) - var/b - for(b=0, b != 2, b++) - var/obj/item/assembly/flash/handheld/F = new /obj/item/assembly/flash/handheld(T) - F.burn_out() - if (cell) //Sanity check. - cell.forceMove(T) - cell = null + new /obj/item/robot_suit(drop_to) + new /obj/item/bodypart/leg/left/robot(drop_to) + new /obj/item/bodypart/leg/right/robot(drop_to) + new /obj/item/stack/cable_coil(drop_to, 1) + new /obj/item/bodypart/chest/robot(drop_to) + new /obj/item/bodypart/arm/left/robot(drop_to) + new /obj/item/bodypart/arm/right/robot(drop_to) + new /obj/item/bodypart/head/robot(drop_to) + for(var/i in 1 to 2) + var/obj/item/assembly/flash/handheld/borgeye = new(drop_to) + borgeye.burn_out() + + cell?.forceMove(drop_to) // Cell can be null, if removed beforehand + radio?.keyslot?.forceMove(drop_to) + radio?.keyslot = null + + dump_into_mmi(drop_to) + qdel(src) + +/// Dumps the current occupant of the cyborg into an MMI at the passed location +/// Returns the borg's MMI on success +/mob/living/silicon/robot/proc/dump_into_mmi(atom/at_location = drop_location()) + if(isnull(mmi)) + return + + var/obj/item/mmi/removing = mmi + mmi.forceMove(at_location) // Nulls it out via exited + + if(isnull(mind)) // no one to transfer, just leave the MMI. + return mmi + + if(removing.brainmob) + if(removing.brainmob.stat == DEAD) + removing.brainmob.set_stat(CONSCIOUS) + mind.transfer_to(removing.brainmob) + removing.update_appearance() + + else + to_chat(src, span_boldannounce("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("Borg MMI lacked a brainmob") + + return mmi + /mob/living/silicon/robot/proc/notify_ai(notifytype, oldname, newname) if(!connected_ai) return @@ -730,9 +712,8 @@ hud_used.update_robot_modules_display() if (hasExpanded) - resize = 0.5 hasExpanded = FALSE - update_transform() + update_transform(0.5) logevent("Chassis model has been reset.") log_silicon("CYBORG: [key_name(src)] has reset their cyborg model.") model.transform_to(/obj/item/robot_model) @@ -746,9 +727,6 @@ return TRUE -/mob/living/silicon/robot/model/syndicate/ResetModel() - return - /mob/living/silicon/robot/proc/has_model() if(!model || model.type == /obj/item/robot_model) . = FALSE @@ -781,11 +759,17 @@ *Drones and pAIs might do this, after all. */ /mob/living/silicon/robot/Exited(atom/movable/gone, direction) - if(hat && hat == gone) + . = ..() + if(hat == gone) hat = null if(!QDELETED(src)) //Don't update icons if we are deleted. update_icons() - return ..() + + if(gone == cell) + cell = null + + if(gone == mmi) + mmi = null ///Use this to add upgrades to robots. It'll register signals for when the upgrade is moved or deleted, if not single use. /mob/living/silicon/robot/proc/add_to_upgrades(obj/item/borg/upgrade/new_upgrade, mob/user) @@ -899,15 +883,16 @@ /datum/action/innate/undeployment/Trigger(trigger_flags) if(!..()) return FALSE - var/mob/living/silicon/robot/R = owner + var/mob/living/silicon/robot/shell_to_disconnect = owner - R.undeploy() + shell_to_disconnect.undeploy() return TRUE /mob/living/silicon/robot/proc/undeploy() if(!deployed || !mind || !mainframe) return + mainframe.UnregisterSignal(src, COMSIG_LIVING_DEATH) mainframe.redeploy_action.Grant(mainframe) mainframe.redeploy_action.last_used_shell = src mind.transfer_to(mainframe) diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 88cb1f2f0164..680fc7885b69 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -205,24 +205,6 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real ..() return -/mob/living/silicon/robot/attack_slime(mob/living/simple_animal/slime/M, list/modifiers) - if(..()) //successful slime shock - flash_act() - var/stunprob = M.powerlevel * 7 + 10 - if(prob(stunprob) && M.powerlevel >= 8) - adjustBruteLoss(M.powerlevel * rand(6,10)) - - var/damage = rand(1, 3) - - if(M.is_adult) - damage = rand(20, 40) - else - damage = rand(5, 35) - damage = round(damage / 2) // borgs receive half damage - adjustBruteLoss(damage) - - return - /mob/living/silicon/robot/attack_hand(mob/living/carbon/human/user, list/modifiers) add_fingerprint(user) if(!opened) @@ -234,7 +216,6 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real cell.add_fingerprint(user) user.put_in_active_hand(cell) to_chat(user, span_notice("You remove \the [cell].")) - cell = null update_icons() diag_hud_set_borgcell() @@ -306,9 +287,9 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real spark_system.start() return to_chat(user, span_notice("You start to unfasten [src]'s securing bolts...")) - if(tool.use_tool(src, user, 50, volume=50) && !cell) + if(tool.use_tool(src, user, 5 SECONDS, volume = 50) && !cell) user.visible_message(span_notice("[user] deconstructs [src]!"), span_notice("You unfasten the securing bolts, and [src] falls to pieces!")) - deconstruct() + cyborg_deconstruct() return /mob/living/silicon/robot/fire_act() diff --git a/code/modules/mob/living/silicon/robot/robot_defines.dm b/code/modules/mob/living/silicon/robot/robot_defines.dm index 10b923d762bb..308a7a838c6e 100644 --- a/code/modules/mob/living/silicon/robot/robot_defines.dm +++ b/code/modules/mob/living/silicon/robot/robot_defines.dm @@ -202,10 +202,26 @@ cell = /obj/item/stock_parts/cell/hyper radio = /obj/item/radio/borg/syndicate +/mob/living/silicon/robot/model/syndicate/Initialize(mapload) + laws = new /datum/ai_laws/syndicate_override() + laws.associate(src) + . = ..() + addtimer(CALLBACK(src, PROC_REF(show_playstyle)), 0.5 SECONDS) + +/mob/living/silicon/robot/model/syndicate/create_modularInterface() + if(!modularInterface) + modularInterface = new /obj/item/modular_computer/pda/silicon/cyborg/syndicate(src) + modularInterface.saved_identification = real_name + modularInterface.saved_job = "Cyborg" + return ..() + /mob/living/silicon/robot/model/syndicate/proc/show_playstyle() if(playstyle_string) to_chat(src, playstyle_string) +/mob/living/silicon/robot/model/syndicate/ResetModel() + return + /mob/living/silicon/robot/model/syndicate/medical icon_state = "synd_medical" playstyle_string = "You are a Syndicate medical cyborg!
\ diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index ccdabed241ab..87cd48e346ff 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -283,7 +283,7 @@ var/mob/living/silicon/robot/cyborg = loc if(cyborg.hat) cyborg.hat.forceMove(drop_location()) - cyborg.hat = null + cyborg.cut_overlays() cyborg.setDir(SOUTH) do_transform_delay() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 438fcc669f39..e4c1b704b0c7 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -103,13 +103,6 @@ modularInterface.saved_job = "Cyborg" return ..() -/mob/living/silicon/robot/model/syndicate/create_modularInterface() - if(!modularInterface) - modularInterface = new /obj/item/modular_computer/pda/silicon/cyborg/syndicate(src) - modularInterface.saved_job = "Cyborg" - return ..() - - /mob/living/silicon/med_hud_set_health() return //we use a different hud @@ -461,7 +454,9 @@ modularInterface.borglog += "[station_time_timestamp()] - [string]" var/datum/computer_file/program/robotact/program = modularInterface.get_robotact() if(program) - program.force_full_update() + var/datum/tgui/active_ui = SStgui.get_open_ui(src, program.computer) + if(active_ui) + active_ui.send_full_update() /// Same as the normal character name replacement, but updates the contents of the modular interface. /mob/living/silicon/fully_replace_character_name(oldname, newname) diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 78322167a80c..a41a726be72d 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -98,13 +98,6 @@ var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) return attack_threshold_check(damage, user.melee_damage_type) -/mob/living/simple_animal/attack_slime(mob/living/simple_animal/slime/user, list/modifiers) - if(..()) //successful slime attack - var/damage = rand(15, 25) - if(user.is_adult) - damage = rand(20, 35) - return attack_threshold_check(damage) - /mob/living/simple_animal/attack_drone(mob/living/basic/drone/user) if(user.istate & ISTATE_HARM) //No kicking dogs even as a rogue drone. Use a weapon. return diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 2d91afb67753..0990edfcc8f9 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -81,8 +81,7 @@ /mob/living/simple_animal/bot/secbot/beepsky/jr/Initialize(mapload) . = ..() - resize = 0.8 - update_transform() + update_transform(0.8) /mob/living/simple_animal/bot/secbot/pingsky name = "Officer Pingsky" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm index e4cbd54dc4dc..3b96af253e6d 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm @@ -208,8 +208,9 @@ Warning the icebox version is being overridden in monkestation/code/modules/mob/ COOLDOWN_START(src, scream_cooldown, scream_cooldown_time) SLEEP_CHECK_DEATH(5, src) playsound(loc, 'sound/magic/demon_dies.ogg', 600, FALSE, 10) - animate(src, pixel_z = rand(5, 15), time = 1, loop = 20) - animate(pixel_z = 0, time = 1) + var/pixel_shift = rand(5, 15) + animate(src, pixel_z = pixel_shift, time = 1, loop = 20, flags = ANIMATION_RELATIVE) + animate(pixel_z = -pixel_shift, time = 1, flags = ANIMATION_RELATIVE) for(var/mob/living/dizzy_target in get_hearers_in_view(7, src) - src) dizzy_target.set_dizzy_if_lower(12 SECONDS) to_chat(dizzy_target, span_danger("The wendigo screams loudly!")) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm index c4ab1f1c4172..de95e59dca90 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm @@ -120,7 +120,6 @@ IGNORE_PROC_IF_NOT_TARGET(attack_larva) IGNORE_PROC_IF_NOT_TARGET(attack_animal) -IGNORE_PROC_IF_NOT_TARGET(attack_slime) /mob/living/simple_animal/hostile/asteroid/curseblob/bullet_act(obj/projectile/Proj) if(Proj.firer != set_target) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index 16658a3c3de1..c3c8df961236 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -190,8 +190,16 @@ While using this makes the system rely on OnFire, it still gives options for tim addtimer(CALLBACK(src, PROC_REF(spawn_elite)), 30) return visible_message(span_boldwarning("Something within [src] stirs...")) - var/list/candidates = poll_candidates_for_mob("Do you want to play as a lavaland elite?", ROLE_SENTIENCE, ROLE_SENTIENCE, 5 SECONDS, src, POLL_IGNORE_LAVALAND_ELITE) - if(candidates.len) + var/list/candidates = SSpolling.poll_ghost_candidates_for_mob( + "Do you want to play as a lavaland elite?", + role = ROLE_SENTIENCE, + poll_time = 5 SECONDS, + target_mob = src, + ignore_category = POLL_IGNORE_LAVALAND_ELITE, + pic_source = src, + role_name_text = "lavaland elite" + ) + if(length(candidates)) audible_message(span_boldwarning("The stirring sounds increase in volume!")) elitemind = pick(candidates) elitemind.playsound_local(get_turf(elitemind), 'sound/effects/magic.ogg', 40, 0) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm index b4f171a10ceb..0693daeb6f41 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm @@ -184,15 +184,11 @@ icon_state = "hope" resistance_flags = FIRE_PROOF -/obj/item/clothing/accessory/pandora_hope/on_uniform_equip(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(L?.mind) - L.add_mood_event("hope_lavaland", /datum/mood_event/hope_lavaland) - -/obj/item/clothing/accessory/pandora_hope/on_uniform_dropped(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(L?.mind) - L.clear_mood_event("hope_lavaland") +/obj/item/clothing/accessory/pandora_hope/accessory_equipped(obj/item/clothing/under/clothes, mob/living/user) + user.add_mood_event("hope_lavaland", /datum/mood_event/hope_lavaland) + +/obj/item/clothing/accessory/pandora_hope/accessory_dropped(obj/item/clothing/under/clothes, mob/living/user) + user.clear_mood_event("hope_lavaland") #undef SINGULAR_SHOT #undef MAGIC_BOX diff --git a/code/modules/mob/living/simple_animal/slime/death.dm b/code/modules/mob/living/simple_animal/slime/death.dm deleted file mode 100644 index f957b9264a5f..000000000000 --- a/code/modules/mob/living/simple_animal/slime/death.dm +++ /dev/null @@ -1,31 +0,0 @@ -/mob/living/simple_animal/slime/death(gibbed) - if(stat == DEAD) - return - if(!gibbed) - if(is_adult) - var/mob/living/simple_animal/slime/M = new(drop_location(), colour) - M.rabid = TRUE - M.regenerate_icons() - - is_adult = FALSE - maxHealth = 150 - for(var/datum/action/innate/slime/reproduce/R in actions) - R.Remove(src) - var/datum/action/innate/slime/evolve/E = new - E.Grant(src) - revive(HEAL_ALL) - regenerate_icons() - update_name() - return - - if(buckled) - Feedstop(silent = TRUE) //releases ourselves from the mob we fed on. - - set_stat(DEAD) - cut_overlays() - - return ..(gibbed) - -/mob/living/simple_animal/slime/gib() - death(TRUE) - qdel(src) diff --git a/code/modules/mob/living/simple_animal/slime/emote.dm b/code/modules/mob/living/simple_animal/slime/emote.dm deleted file mode 100644 index 0b70ca3f0ece..000000000000 --- a/code/modules/mob/living/simple_animal/slime/emote.dm +++ /dev/null @@ -1,56 +0,0 @@ -/datum/emote/slime - mob_type_allowed_typecache = /mob/living/simple_animal/slime - mob_type_blacklist_typecache = list() - -/datum/emote/slime/bounce - key = "bounce" - key_third_person = "bounces" - message = "bounces in place." - -/datum/emote/slime/jiggle - key = "jiggle" - key_third_person = "jiggles" - message = "jiggles!" - -/datum/emote/slime/light - key = "light" - key_third_person = "lights" - message = "lights up for a bit, then stops." - -/datum/emote/slime/vibrate - key = "vibrate" - key_third_person = "vibrates" - message = "vibrates!" - -/datum/emote/slime/mood - key = "moodnone" - ///Mood key, will set the slime's emote to this. - var/mood_key - -/datum/emote/slime/mood/run_emote(mob/user, params, type_override, intentional) - . = ..() - if(!.) - return - var/mob/living/simple_animal/slime/slime_user = user - slime_user.current_mood = mood_key - slime_user.regenerate_icons() - -/datum/emote/slime/mood/smile - key = "moodsmile" - mood_key = ":3" - -/datum/emote/slime/mood/cat - key = "moodcat" - mood_key = ":33" - -/datum/emote/slime/mood/pout - key = "moodpout" - mood_key = "pout" - -/datum/emote/slime/mood/sad - key = "moodsad" - mood_key = "sad" - -/datum/emote/slime/mood/angry - key = "moodangry" - mood_key = "angry" diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm deleted file mode 100644 index 150e0a405ecb..000000000000 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ /dev/null @@ -1,615 +0,0 @@ -/mob/living/simple_animal/slime/Life(seconds_per_tick = SSMOBS_DT, times_fired) - if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) - return - . = ..() - if(!.) - return - - // We get some passive bruteloss healing if we're not dead - if(stat != DEAD && SPT_PROB(16, seconds_per_tick)) - adjustBruteLoss(-0.5 * seconds_per_tick) - if(ismob(buckled)) - handle_feeding(seconds_per_tick, times_fired) - if(stat != CONSCIOUS) // Slimes in stasis don't lose nutrition, don't change mood and don't respond to speech - return - handle_nutrition(seconds_per_tick, times_fired) - if(QDELETED(src)) // Stop if the slime split during handle_nutrition() - return - reagents.remove_all(0.5 * REAGENTS_METABOLISM * reagents.reagent_list.len * seconds_per_tick) //Slimes are such snowflakes - handle_targets(seconds_per_tick, times_fired) - if(ckey) - return - handle_mood(seconds_per_tick, times_fired) - handle_speech(seconds_per_tick, times_fired) - - -// Unlike most of the simple animals, slimes support UNCONSCIOUS. This is an ugly hack. -/mob/living/simple_animal/slime/update_stat() - switch(stat) - if(UNCONSCIOUS, HARD_CRIT) - if(health > 0) - return - return ..() - - -/mob/living/simple_animal/slime/proc/AIprocess() // the master AI process - - if(AIproc || stat || client) - return - - var/hungry = 0 - if (nutrition < get_starve_nutrition()) - hungry = 2 - else if (nutrition < get_grow_nutrition() && prob(25) || nutrition < get_hunger_nutrition()) - hungry = 1 - - AIproc = 1 - - while(AIproc && stat != DEAD && (attacked || hungry || rabid || buckled)) - if(!(mobility_flags & MOBILITY_MOVE)) //also covers buckling. Not sure why buckled is in the while condition if we're going to immediately break, honestly - break - - if(!Target || client) - break - - if(Target.health <= -70 || Target.stat == DEAD) - set_target(null) - AIproc = 0 - break - - if(Target) - if(locate(/mob/living/simple_animal/slime) in Target.buckled_mobs) - set_target(null) - AIproc = 0 - break - if(!AIproc) - break - - if(Target in view(1,src)) - if(!CanFeedon(Target)) //If they're not able to be fed upon, ignore them. - if(!Atkcool) - Atkcool = TRUE - addtimer(VARSET_CALLBACK(src, Atkcool, FALSE), 4.5 SECONDS) - - if(Target.Adjacent(src)) - Target.attack_slime(src) - break - if((Target.body_position == STANDING_UP) && prob(80)) - - if(Target.client && Target.health >= 20) - if(!Atkcool) - Atkcool = TRUE - addtimer(VARSET_CALLBACK(src, Atkcool, FALSE), 4.5 SECONDS) - - if(Target.Adjacent(src)) - Target.attack_slime(src) - - else - if(!Atkcool && Target.Adjacent(src)) - Feedon(Target) - - else - if(!Atkcool && Target.Adjacent(src)) - Feedon(Target) - - else if(Target in view(7, src)) - if(!Target.Adjacent(src)) - // Bug of the month candidate: slimes were attempting to move to target only if it was directly next to them, which caused them to target things, but not approach them - step_to(src, Target) - else - set_target(null) - AIproc = 0 - break - - var/sleeptime = cached_multiplicative_slowdown - if(sleeptime <= 0) - sleeptime = 1 - - sleep(sleeptime + 2) // this is about as fast as a player slime can go - - AIproc = 0 - -/mob/living/simple_animal/slime/handle_environment(datum/gas_mixture/environment, seconds_per_tick, times_fired) - var/loc_temp = get_temperature(environment) - var/divisor = 10 /// The divisor controls how fast body temperature changes, lower causes faster changes - - var/temp_delta = loc_temp - bodytemperature - if(abs(temp_delta) > 50) // If the difference is great, reduce the divisor for faster stabilization - divisor = 5 - - if(temp_delta < 0) // It is cold here - if(!on_fire) // Do not reduce body temp when on fire - adjust_bodytemperature(clamp((temp_delta / divisor) * seconds_per_tick, temp_delta, 0)) - else // This is a hot place - adjust_bodytemperature(clamp((temp_delta / divisor) * seconds_per_tick, 0, temp_delta)) - - if(bodytemperature < (T0C + 5)) // start calculating temperature damage etc - if(bodytemperature <= (T0C - 40)) // stun temperature - ADD_TRAIT(src, TRAIT_IMMOBILIZED, SLIME_COLD) - else - REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, SLIME_COLD) - - if(bodytemperature <= (T0C - 50)) // hurt temperature - if(bodytemperature <= 50) // sqrting negative numbers is bad - adjustBruteLoss(100 * seconds_per_tick) - else - adjustBruteLoss(round(sqrt(bodytemperature)) * seconds_per_tick) - else - REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, SLIME_COLD) - - if(stat != DEAD) - var/bz_percentage =0 - if(environment.gases[/datum/gas/bz]) - bz_percentage = environment.gases[/datum/gas/bz][MOLES] / environment.total_moles() - var/stasis = (bz_percentage >= 0.05 && bodytemperature < (T0C + 100)) || force_stasis - - switch(stat) - if(CONSCIOUS) - if(stasis) - to_chat(src, span_danger("Nerve gas in the air has put you in stasis!")) - set_stat(UNCONSCIOUS) - powerlevel = 0 - rabid = FALSE - regenerate_icons() - if(UNCONSCIOUS, HARD_CRIT) - if(!stasis) - to_chat(src, span_notice("You wake up from the stasis.")) - set_stat(CONSCIOUS) - regenerate_icons() - - updatehealth() - -/mob/living/simple_animal/slime/proc/handle_feeding(seconds_per_tick, times_fired) - var/mob/living/prey = buckled - - if(stat) - Feedstop(silent = TRUE) - - // monke start: make slimes feed faster on mindless mobs and monkeys - var/feed_multiplier = 1 - if(QDELETED(prey.mind) && !istype(prey, /mob/living/simple_animal/pet) && !istype(prey, /mob/living/basic/pet)) // pets have an honorary soul in my book - feed_multiplier += 1 - if(ismonkey(prey)) - feed_multiplier += 0.5 - // monke end - - if(prey.stat == DEAD) // our victim died - if(!client) - if(!rabid && !attacked) - var/mob/last_to_hurt = prey.LAssailant?.resolve() - if(last_to_hurt && last_to_hurt != prey) - if(SPT_PROB(30, seconds_per_tick)) - add_friendship(last_to_hurt, 1) - else - to_chat(src, "This subject does not have a strong enough life energy anymore...") - - if(prey.client && ishuman(prey)) - if(SPT_PROB(61, seconds_per_tick)) - rabid = 1 //we go rabid after finishing to feed on a human with a client. - - Feedstop() - return - - if(iscarbon(prey)) - prey.adjustCloneLoss(rand(2, 4) * 0.5 * seconds_per_tick * feed_multiplier) // monke edit: make slimes feed faster on mindless mobs and monkeys - prey.adjustToxLoss(rand(1, 2) * 0.5 * seconds_per_tick * feed_multiplier) // monke edit: make slimes feed faster on mindless mobs and monkeys - - if(SPT_PROB(5, seconds_per_tick) && prey.client) - to_chat(prey, "[pick("You can feel your body becoming weak!", \ - "You feel like you're about to die!", \ - "You feel every part of your body screaming in agony!", \ - "A low, rolling pain passes through your body!", \ - "Your body feels as if it's falling apart!", \ - "You feel extremely weak!", \ - "A sharp, deep pain bathes every inch of your body!")]") - - else if(isanimal_or_basicmob(prey)) - var/mob/living/animal_victim = prey - - var/totaldamage = 0 //total damage done to this unfortunate animal - totaldamage += animal_victim.adjustCloneLoss(rand(2, 4) * 0.5 * seconds_per_tick * feed_multiplier) // monke edit: make slimes feed faster on mindless mobs and monkeys - totaldamage += animal_victim.adjustToxLoss(rand(1, 2) * 0.5 * seconds_per_tick * feed_multiplier) // monke edit: make slimes feed faster on mindless mobs and monkeys - - if(totaldamage <= 0) //if we did no(or negative!) damage to it, stop - Feedstop(0, 0) - return - - else - Feedstop(0, 0) - return - - add_nutrition((rand(7, 15) * 0.5 * seconds_per_tick * CONFIG_GET(number/damage_multiplier)) * feed_multiplier) // monke edit: make slimes feed faster on mindless mobs and monkeys - - //Heal yourself. - adjustBruteLoss(-1.5 * seconds_per_tick * feed_multiplier) // monke edit: make slimes feed faster on mindless mobs and monkeys - -/mob/living/simple_animal/slime/proc/handle_nutrition(seconds_per_tick, times_fired) - - if(docile) //God as my witness, I will never go hungry again - set_nutrition(700) //fuck you for using the base nutrition var - return - - if(SPT_PROB(7.5, seconds_per_tick)) - adjust_nutrition(-0.5 * (1 + is_adult) * seconds_per_tick) - - if(nutrition <= 0) - set_nutrition(0) - if(SPT_PROB(50, seconds_per_tick)) - adjustBruteLoss(rand(0,5)) - - else if (nutrition >= get_grow_nutrition() && amount_grown < SLIME_EVOLUTION_THRESHOLD) - adjust_nutrition(-10 * seconds_per_tick) - amount_grown++ - update_mob_action_buttons() - - if(amount_grown >= SLIME_EVOLUTION_THRESHOLD && !buckled && !Target && !ckey) - if(is_adult && loc.AllowDrop()) - Reproduce() - else - Evolve() - -/mob/living/simple_animal/slime/proc/add_nutrition(nutrition_to_add = 0) - set_nutrition(min((nutrition + nutrition_to_add), get_max_nutrition())) - if(nutrition >= get_grow_nutrition()) - if(powerlevel<10) - if(prob(30-powerlevel*2)) - powerlevel++ - else if(nutrition >= get_hunger_nutrition() + 100) //can't get power levels unless you're a bit above hunger level. - if(powerlevel<5) - if(prob(25-powerlevel*5)) - powerlevel++ - - - - -/mob/living/simple_animal/slime/proc/handle_targets(seconds_per_tick, times_fired) - if(attacked > 50) - attacked = 50 - - if(attacked > 0) - attacked-- - - if(Discipline > 0) - - if(Discipline >= 5 && rabid) - if(SPT_PROB(37, seconds_per_tick)) - rabid = 0 - - if(SPT_PROB(5, seconds_per_tick)) - Discipline-- - - if(!client) - if(!(mobility_flags & MOBILITY_MOVE)) - return - - if(buckled) - return // if it's eating someone already, continue eating! - - if(Target) - --target_patience - if (target_patience <= 0 || SStun > world.time || Discipline || attacked || docile) // Tired of chasing or something draws out attention - target_patience = 0 - set_target(null) - - if(AIproc && SStun > world.time) - return - - var/hungry = 0 // determines if the slime is hungry - - if (nutrition < get_starve_nutrition()) - hungry = 2 - else if (nutrition < get_grow_nutrition() && SPT_PROB(13, seconds_per_tick) || nutrition < get_hunger_nutrition()) - hungry = 1 - - if(hungry == 2 && !client) // if a slime is starving, it starts losing its friends - if(Friends.len > 0 && SPT_PROB(0.5, seconds_per_tick)) - var/mob/nofriend = pick(Friends) - add_friendship(nofriend, -1) - - if(!Target) - if(will_hunt() && hungry || attacked || rabid) // Only add to the list if we need to - var/list/targets = list() - - for(var/mob/living/L in view(7,src)) - - if(isslime(L) || L.stat == DEAD) // Ignore other slimes and dead mobs - continue - - if(L in Friends) // No eating friends! - continue - - var/ally = FALSE - for(var/F in faction) - if(F == FACTION_NEUTRAL) //slimes are neutral so other mobs not target them, but they can target neutral mobs - continue - if(F in L.faction) - ally = TRUE - break - if(ally) - continue - - if(issilicon(L) && (rabid || attacked)) // They can't eat silicons, but they can glomp them in defence - targets += L // Possible target found! - - if(locate(/mob/living/simple_animal/slime) in L.buckled_mobs) // Only one slime can latch on at a time. - continue - - targets += L // Possible target found! - - if(targets.len > 0) - if(attacked || rabid || hungry == 2) - set_target(targets[1]) // I am attacked and am fighting back or so hungry I don't even care - else - for(var/mob/living/carbon/C in targets) - if(!Discipline && SPT_PROB(2.5, seconds_per_tick)) - if(ishuman(C) || isalienadult(C)) - set_target(C) - break - - if(islarva(C) || ismonkey(C)) - set_target(C) - break - - if (Target) - target_patience = rand(5, 7) - if (is_adult) - target_patience += 3 - - if(!Target) // If we have no target, we are wandering or following orders - if (Leader) - if(holding_still) - holding_still = max(holding_still - (0.5 * seconds_per_tick), 0) - else if(!HAS_TRAIT(src, TRAIT_IMMOBILIZED) && isturf(loc)) - step_to(src, Leader) - - else if(hungry) - if (holding_still) - holding_still = max(holding_still - (0.5 * hungry * seconds_per_tick), 0) - else if(!HAS_TRAIT(src, TRAIT_IMMOBILIZED) && isturf(loc) && prob(50)) - step(src, pick(GLOB.cardinals)) - - else - if(holding_still) - holding_still = max(holding_still - (0.5 * seconds_per_tick), 0) - else if (docile && pulledby) - holding_still = 10 - else if(!HAS_TRAIT(src, TRAIT_IMMOBILIZED) && isturf(loc) && prob(33)) - step(src, pick(GLOB.cardinals)) - else if(!AIproc) - INVOKE_ASYNC(src, PROC_REF(AIprocess)) - -/mob/living/simple_animal/slime/handle_automated_movement() - return //slime random movement is currently handled in handle_targets() - -/mob/living/simple_animal/slime/handle_automated_speech() - return //slime random speech is currently handled in handle_speech() - -/mob/living/simple_animal/slime/proc/handle_mood(seconds_per_tick, times_fired) - var/newmood = "" - if (rabid || attacked) - newmood = "angry" - else if (docile) - newmood = ":3" - else if (Target) - newmood = "mischievous" - - if (!newmood) - if (Discipline && SPT_PROB(13, seconds_per_tick)) - newmood = "pout" - else if (SPT_PROB(0.5, seconds_per_tick)) - newmood = pick("sad", ":3", "pout") - - if ((current_mood == "sad" || current_mood == ":3" || current_mood == "pout") && !newmood) - if(SPT_PROB(50, seconds_per_tick)) - newmood = current_mood - - if (newmood != current_mood) // This is so we don't redraw them every time - current_mood = newmood - regenerate_icons() - -/mob/living/simple_animal/slime/proc/handle_speech(seconds_per_tick, times_fired) - //Speech understanding starts here - var/to_say - if (speech_buffer.len > 0) - var/who = speech_buffer[1] // Who said it? - var/phrase = speech_buffer[2] // What did they say? - if ((findtext(phrase, num2text(number)) || findtext(phrase, "slimes"))) // Talking to us - if (findtext(phrase, "hello") || findtext(phrase, "hi")) - to_say = pick("Hello...", "Hi...") - else if (findtext(phrase, "follow")) - if (Leader) - if (Leader == who) // Already following him - to_say = pick("Yes...", "Lead...", "Follow...") - else if (Friends[who] > Friends[Leader]) // VIVA - set_leader(who) - to_say = "Yes... I follow [who]..." - else - to_say = "No... I follow [Leader]..." - else - if (Friends[who] >= SLIME_FRIENDSHIP_FOLLOW) - set_leader(who) - to_say = "I follow..." - else // Not friendly enough - to_say = pick("No...", "I no follow...") - else if (findtext(phrase, "stop")) - if (buckled) // We are asked to stop feeding - if (Friends[who] >= SLIME_FRIENDSHIP_STOPEAT) - Feedstop() - set_target(null) - if (Friends[who] < SLIME_FRIENDSHIP_STOPEAT_NOANGRY) - add_friendship(who, -1) - to_say = "Grrr..." // I'm angry but I do it - else - to_say = "Fine..." - else if (Target) // We are asked to stop chasing - if (Friends[who] >= SLIME_FRIENDSHIP_STOPCHASE) - set_target(null) - if (Friends[who] < SLIME_FRIENDSHIP_STOPCHASE_NOANGRY) - add_friendship(who, -1) - to_say = "Grrr..." // I'm angry but I do it - else - to_say = "Fine..." - else if (Leader) // We are asked to stop following - if (Leader == who) - to_say = "Yes... I stay..." - set_leader(null) - else - if (Friends[who] > Friends[Leader]) - set_leader(null) - to_say = "Yes... I stop..." - else - to_say = "No... keep follow..." - else if (findtext(phrase, "stay")) - if (Leader) - if (Leader == who) - holding_still = Friends[who] * 10 - to_say = "Yes... stay..." - else if (Friends[who] > Friends[Leader]) - holding_still = (Friends[who] - Friends[Leader]) * 10 - to_say = "Yes... stay..." - else - to_say = "No... keep follow..." - else - if (Friends[who] >= SLIME_FRIENDSHIP_STAY) - holding_still = Friends[who] * 10 - to_say = "Yes... stay..." - else - to_say = "No... won't stay..." - else if (findtext(phrase, "attack")) - if (rabid && prob(20)) - set_target(who) - AIprocess() //Wake up the slime's Target AI, needed otherwise this doesn't work - to_say = "ATTACK!?!?" - else if (Friends[who] >= SLIME_FRIENDSHIP_ATTACK) - for (var/mob/living/L in view(7,src)-list(src,who)) - if (findtext(phrase, lowertext(L.name))) - if (isslime(L)) - to_say = "NO... [L] slime friend" - add_friendship(who, -1) //Don't ask a slime to attack its friend - else if(!Friends[L] || Friends[L] < 1) - set_target(L) - AIprocess()//Wake up the slime's Target AI, needed otherwise this doesn't work - to_say = "Ok... I attack [Target]" - else - to_say = "No... like [L] ..." - add_friendship(who, -1) //Don't ask a slime to attack its friend - break - else - to_say = "No... no listen" - - speech_buffer = list() - - //Speech starts here - if (to_say) - say (to_say) - else if(SPT_PROB(0.5, seconds_per_tick)) - emote(pick("bounce","sway","light","vibrate","jiggle")) - else - var/t = 10 - var/slimes_near = 0 - var/dead_slimes = 0 - var/friends_near = list() - for (var/mob/living/L in view(7,src)) - if(isslime(L) && L != src) - ++slimes_near - if (L.stat == DEAD) - ++dead_slimes - if (L in Friends) - t += 20 - friends_near += L - if (nutrition < get_hunger_nutrition()) - t += 10 - if (nutrition < get_starve_nutrition()) - t += 10 - if (SPT_PROB(1, seconds_per_tick) && prob(t)) - var/phrases = list() - if (Target) - phrases += "[Target]... look yummy..." - if (nutrition < get_starve_nutrition()) - phrases += "So... hungry..." - phrases += "Very... hungry..." - phrases += "Need... food..." - phrases += "Must... eat..." - else if (nutrition < get_hunger_nutrition()) - phrases += "Hungry..." - phrases += "Where food?" - phrases += "I want to eat..." - phrases += "Rawr..." - phrases += "Blop..." - phrases += "Blorble..." - if (rabid || attacked) - phrases += "Hrr..." - phrases += "Nhuu..." - phrases += "Unn..." - if (current_mood == ":3") - phrases += "Purr..." - if (attacked) - phrases += "Grrr..." - if (bodytemperature < T0C) - phrases += "Cold..." - if (bodytemperature < T0C - 30) - phrases += "So... cold..." - phrases += "Very... cold..." - if (bodytemperature < T0C - 50) - phrases += "..." - phrases += "C... c..." - if (buckled) - phrases += "Nom..." - phrases += "Yummy..." - if (powerlevel > 3) - phrases += "Bzzz..." - if (powerlevel > 5) - phrases += "Zap..." - if (powerlevel > 8) - phrases += "Zap... Bzz..." - if (current_mood == "sad") - phrases += "Bored..." - if (slimes_near) - phrases += "Slime friend..." - if (slimes_near > 1) - phrases += "Slime friends..." - if (dead_slimes) - phrases += "What happened?" - if (!slimes_near) - phrases += "Lonely..." - for (var/M in friends_near) - phrases += "[M]... friend..." - if (nutrition < get_hunger_nutrition()) - phrases += "[M]... feed me..." - if(!stat) - say (pick(phrases)) - -/mob/living/simple_animal/slime/proc/get_max_nutrition() // Can't go above it - if (is_adult) - return 1200 - else - return 1000 - -/mob/living/simple_animal/slime/proc/get_grow_nutrition() // Above it we grow, below it we can eat - if (is_adult) - return 1000 - else - return 800 - -/mob/living/simple_animal/slime/proc/get_hunger_nutrition() // Below it we will always eat - if (is_adult) - return 600 - else - return 500 - -/mob/living/simple_animal/slime/proc/get_starve_nutrition() // Below it we will eat before everything else - if(is_adult) - return 300 - else - return 200 - -/mob/living/simple_animal/slime/proc/will_hunt(hunger = -1) // Check for being stopped from feeding and chasing - if (docile) - return FALSE - if (hunger == 2 || rabid || attacked) - return TRUE - if (Leader) - return FALSE - if (holding_still) - return FALSE - return TRUE diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm deleted file mode 100644 index 131295e4f284..000000000000 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ /dev/null @@ -1,241 +0,0 @@ -#define SIZE_DOESNT_MATTER -1 -#define BABIES_ONLY 0 -#define ADULTS_ONLY 1 - -#define NO_GROWTH_NEEDED 0 -#define GROWTH_NEEDED 1 - -/datum/action/innate/slime - check_flags = AB_CHECK_CONSCIOUS - button_icon = 'icons/mob/actions/actions_slime.dmi' - background_icon_state = "bg_alien" - overlay_icon_state = "bg_alien_border" - var/needs_growth = NO_GROWTH_NEEDED - -/datum/action/innate/slime/IsAvailable(feedback = FALSE) - . = ..() - if(!.) - return - var/mob/living/simple_animal/slime/S = owner - if(needs_growth == GROWTH_NEEDED) - if(S.amount_grown >= SLIME_EVOLUTION_THRESHOLD) - return TRUE - return FALSE - return TRUE - -/mob/living/simple_animal/slime/verb/Feed() - set category = "Slime" - set desc = "This will let you feed on any valid creature in the surrounding area. This should also be used to halt the feeding process." - - if(stat) - return FALSE - - var/list/choices = list() - for(var/mob/living/nearby_mob in view(1,src)) - if(nearby_mob != src && Adjacent(nearby_mob)) - choices += nearby_mob - - var/choice = tgui_input_list(src, "Who do you wish to feed on?", "Slime Feed", sort_names(choices)) - if(isnull(choice)) - return FALSE - var/mob/living/victim = choice - if(CanFeedon(victim)) - Feedon(victim) - return TRUE - return FALSE - -/datum/action/innate/slime/feed - name = "Feed" - button_icon_state = "slimeeat" - - -/datum/action/innate/slime/feed/Activate() - var/mob/living/simple_animal/slime/S = owner - S.Feed() - -/mob/living/simple_animal/slime/proc/CanFeedon(mob/living/meal, silent = FALSE) - if(!Adjacent(meal)) - return FALSE - - if(buckled) - Feedstop() - return FALSE - - if(issilicon(meal) || meal.mob_biotypes & MOB_ROBOTIC) - return FALSE - - if(isanimal(meal)) - var/mob/living/simple_animal/simple_meal = meal - if(simple_meal.damage_coeff[TOX] <= 0 && simple_meal.damage_coeff[CLONE] <= 0) //The creature wouldn't take any damage, it must be too weird even for us. - if(silent) - return FALSE - to_chat(src, "[pick("This subject is incompatible", \ - "This subject does not have life energy", "This subject is empty", \ - "I am not satisified", "I can not feed from this subject", \ - "I do not feel nourished", "This subject is not food")]!") - return FALSE - else if(isbasicmob(meal)) - var/mob/living/basic/basic_meal = meal - if(basic_meal.damage_coeff[TOX] <= 0 && basic_meal.damage_coeff[CLONE] <= 0) - if (silent) - return FALSE - to_chat(src, "[pick("This subject is incompatible", \ - "This subject does not have life energy", "This subject is empty", \ - "I am not satisified", "I can not feed from this subject", \ - "I do not feel nourished", "This subject is not food")]!") - return FALSE - - if(isslime(meal)) - if(silent) - return FALSE - to_chat(src, span_warning("I can't latch onto another slime...")) - return FALSE - - if(docile) - if(silent) - return FALSE - to_chat(src, span_notice("I'm not hungry anymore...")) - return FALSE - - if(stat) - if(silent) - return FALSE - to_chat(src, span_warning("I must be conscious to do this...")) - return FALSE - - if(meal.stat == DEAD) - if(silent) - return FALSE - to_chat(src, span_warning("This subject does not have a strong enough life energy...")) - return FALSE - - if(locate(/mob/living/simple_animal/slime) in meal.buckled_mobs) - if(silent) - return FALSE - to_chat(src, span_warning("Another slime is already feeding on this subject...")) - return FALSE - return TRUE - -/mob/living/simple_animal/slime/proc/Feedon(mob/living/M) - M.unbuckle_all_mobs(force=1) //Slimes rip other mobs (eg: shoulder parrots) off (Slimes Vs Slimes is already handled in CanFeedon()) - if(M.buckle_mob(src, force=TRUE)) - layer = M.layer+0.01 //appear above the target mob - M.visible_message(span_danger("[name] latches onto [M]!"), \ - span_userdanger("[name] latches onto [M]!")) - else - to_chat(src, span_warning("I have failed to latch onto the subject!")) - -/mob/living/simple_animal/slime/proc/Feedstop(silent = FALSE, living=1) - if(buckled) - if(!living) - to_chat(src, "[pick("This subject is incompatible", \ - "This subject does not have life energy", "This subject is empty", \ - "I am not satisified", "I can not feed from this subject", \ - "I do not feel nourished", "This subject is not food")]!") - if(!silent) - visible_message(span_warning("[src] lets go of [buckled]!"), \ - span_notice("I stopped feeding.")) - layer = initial(layer) - buckled.unbuckle_mob(src,force=TRUE) - -/mob/living/simple_animal/slime/verb/Evolve() - set category = "Slime" - set desc = "This will let you evolve from baby to adult slime." - - if(stat) - to_chat(src, "I must be conscious to do this...") - return - if(!is_adult) - if(amount_grown >= SLIME_EVOLUTION_THRESHOLD) - is_adult = 1 - maxHealth = 200 - amount_grown = 0 - for(var/datum/action/innate/slime/evolve/E in actions) - E.Remove(src) - var/datum/action/innate/slime/reproduce/reproduce_action = new - reproduce_action.Grant(src) - regenerate_icons() - update_name() - else - to_chat(src, "I am not ready to evolve yet...") - else - to_chat(src, "I have already evolved...") - -/datum/action/innate/slime/evolve - name = "Evolve" - button_icon_state = "slimegrow" - needs_growth = GROWTH_NEEDED - -/datum/action/innate/slime/evolve/Activate() - var/mob/living/simple_animal/slime/S = owner - S.Evolve() - -/mob/living/simple_animal/slime/verb/Reproduce() - set category = "Slime" - set desc = "This will make you split into four Slimes." - - if(stat) - to_chat(src, "I must be conscious to do this...") - return - - if(is_adult) - if(amount_grown >= SLIME_EVOLUTION_THRESHOLD) - if(stat) - to_chat(src, "I must be conscious to do this...") - return - - var/list/babies = list() - var/new_nutrition = round(nutrition * 0.9) - var/new_powerlevel = round(powerlevel / 4) - var/datum/component/nanites/original_nanites = GetComponent(/datum/component/nanites) - var/turf/drop_loc = drop_location() - - for(var/i in 1 to 4) - var/child_colour - if(mutation_chance >= 100) - child_colour = "rainbow" - else if(prob(mutation_chance)) - child_colour = slime_mutation[rand(1,4)] - else - child_colour = colour - var/mob/living/simple_animal/slime/M - M = new(drop_loc, child_colour) - if(ckey) - M.set_nutrition(new_nutrition) //Player slimes are more robust at spliting. Once an oversight of poor copypasta, now a feature! - M.powerlevel = new_powerlevel - if(i != 1) - step_away(M,src) - M.set_friends(Friends) - babies += M - M.mutation_chance = clamp(mutation_chance+(rand(5,-5)),0,100) - SSblackbox.record_feedback("tally", "slime_babies_born", 1, M.colour) - if(original_nanites) - M.AddComponent(/datum/component/nanites, original_nanites.nanite_volume*0.25) - SEND_SIGNAL(M, COMSIG_NANITE_SYNC, original_nanites, TRUE, TRUE) //The trues are to copy activation as well - - var/mob/living/simple_animal/slime/new_slime = pick(babies) - new_slime.set_combat_mode(TRUE) - if(src.mind) - src.mind.transfer_to(new_slime) - else - new_slime.key = src.key - qdel(src) - else - to_chat(src, "I am not ready to reproduce yet...") - else - to_chat(src, "I am not old enough to reproduce yet...") - -/datum/action/innate/slime/reproduce - name = "Reproduce" - button_icon_state = "slimesplit" - needs_growth = GROWTH_NEEDED - -/datum/action/innate/slime/reproduce/Activate() - var/mob/living/simple_animal/slime/S = owner - S.Reproduce() - -#undef SIZE_DOESNT_MATTER -#undef BABIES_ONLY -#undef ADULTS_ONLY -#undef NO_GROWTH_NEEDED -#undef GROWTH_NEEDED diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm deleted file mode 100644 index 01aa8f37e7e3..000000000000 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ /dev/null @@ -1,580 +0,0 @@ -#define SLIME_CARES_ABOUT(to_check) (to_check && (to_check == Target || to_check == Leader || (to_check in Friends))) -/mob/living/simple_animal/slime - name = "grey baby slime (123)" - icon = 'icons/mob/simple/slimes.dmi' - icon_state = "grey baby slime" - pass_flags = PASSTABLE | PASSGRILLE - gender = NEUTER - faction = list(FACTION_SLIME, FACTION_NEUTRAL) - - harm_intent_damage = 5 - icon_living = "grey baby slime" - icon_dead = "grey baby slime dead" - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "shoos" - response_disarm_simple = "shoo" - response_harm_continuous = "stomps on" - response_harm_simple = "stomp on" - emote_see = list("jiggles", "bounces in place") - speak_emote = list("blorbles") - bubble_icon = "slime" - initial_language_holder = /datum/language_holder/slime - - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - - maxHealth = 150 - health = 150 - healable = 0 - melee_damage_lower = 5 - melee_damage_upper = 25 - - verb_say = "blorbles" - verb_ask = "inquisitively blorbles" - verb_exclaim = "loudly blorbles" - verb_yell = "loudly blorbles" - - // canstun and canknockdown don't affect slimes because they ignore stun and knockdown variables - // for the sake of cleanliness, though, here they are. - status_flags = CANUNCONSCIOUS|CANPUSH - - footstep_type = FOOTSTEP_MOB_SLIME - - ///The current mood of the slime, set randomly or through emotes (if sentient). - var/current_mood - - var/AIproc = 0 // determines if the AI loop is activated - var/Atkcool = 0 // attack cooldown - var/Discipline = 0 // if a slime has been hit with a freeze gun, or wrestled/attacked off a human, they become disciplined and don't attack anymore for a while - var/SStun = 0 // stun variable - - var/is_adult = 0 - var/docile = 0 - - var/cores = 1 // the number of /obj/item/slime_extract's the slime has left inside - var/mutation_chance = 30 // Chance of mutating, should be between 25 and 35 - - var/powerlevel = 0 // 1-10 controls how much electricity they are generating - var/amount_grown = 0 // controls how long the slime has been overfed, if 10, grows or reproduces - - var/number = 0 // Used to understand when someone is talking to it - - var/mob/living/Target = null // AI variable - tells the slime to hunt this down - var/mob/living/Leader = null // AI variable - tells the slime to follow this person - - var/attacked = 0 // Determines if it's been attacked recently. Can be any number, is a cooloff-ish variable - var/rabid = 0 // If set to 1, the slime will attack and eat anything it comes in contact with - var/holding_still = 0 // AI variable, cooloff-ish for how long it's going to stay in one place - var/target_patience = 0 // AI variable, cooloff-ish for how long it's going to follow its target - - var/list/Friends = list() // A list of friends; they are not considered targets for feeding; passed down after splitting - - var/list/speech_buffer = list() // Last phrase said near it and person who said it - - var/mutator_used = FALSE //So you can't shove a dozen mutators into a single slime - var/force_stasis = FALSE - - var/static/regex/slime_name_regex = new("\\w+ (baby|adult) slime \\(\\d+\\)") - ///////////TIME FOR SUBSPECIES - - var/colour = "grey" - var/coretype = /obj/item/slime_extract/grey - var/list/slime_mutation[4] - - var/static/list/slime_colours = list( - "adamantine", - "black", - "blue", - "bluespace", - "cerulean", - "dark blue", - "dark purple", - "gold", - "green", - "grey", - "light pink", - "metal", - "oil", - "orange", - "pink", - "purple", - "pyrite", - "rainbow", - "red", - "sepia", - "silver", - "yellow", - ) - - ///////////CORE-CROSSING CODE - - var/effectmod //What core modification is being used. - var/applied = 0 //How many extracts of the modtype have been applied. - - -/mob/living/simple_animal/slime/Initialize(mapload, new_colour=colour, new_is_adult=FALSE) - var/datum/action/innate/slime/feed/F = new - F.Grant(src) - ADD_TRAIT(src, TRAIT_CANT_RIDE, INNATE_TRAIT) - - is_adult = new_is_adult - - if(is_adult) - var/datum/action/innate/slime/reproduce/R = new - R.Grant(src) - health = 200 - maxHealth = 200 - else - var/datum/action/innate/slime/evolve/E = new - E.Grant(src) - create_reagents(100) - set_colour(new_colour) - . = ..() - set_nutrition(700) - add_cell_sample() - - ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - AddElement(/datum/element/soft_landing) - -/mob/living/simple_animal/slime/Destroy() - for (var/A in actions) - var/datum/action/AC = A - AC.Remove(src) - set_target(null) - set_leader(null) - clear_friends() - return ..() - -/mob/living/simple_animal/slime/create_reagents(max_vol, flags) - . = ..() - RegisterSignals(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_DEL_REAGENT), PROC_REF(on_reagent_change)) - RegisterSignal(reagents, COMSIG_QDELETING, PROC_REF(on_reagents_del)) - -/// Handles removing signal hooks incase someone is crazy enough to reset the reagents datum. -/mob/living/simple_animal/slime/proc/on_reagents_del(datum/reagents/reagents) - SIGNAL_HANDLER - UnregisterSignal(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_QDELETING)) - return NONE - -/mob/living/simple_animal/slime/proc/set_colour(new_colour) - colour = new_colour - update_name() - slime_mutation = mutation_table(colour) - var/sanitizedcolour = replacetext(colour, " ", "") - coretype = text2path("/obj/item/slime_extract/[sanitizedcolour]") - regenerate_icons() - -/mob/living/simple_animal/slime/update_name() - if(slime_name_regex.Find(name)) - number = rand(1, 1000) - name = "[colour] [is_adult ? "adult" : "baby"] slime ([number])" - real_name = name - return ..() - -/mob/living/simple_animal/slime/proc/random_colour() - set_colour(pick(slime_colours)) - -/mob/living/simple_animal/slime/regenerate_icons() - cut_overlays() - var/icon_text = "[colour] [is_adult ? "adult" : "baby"] slime" - icon_dead = "[icon_text] dead" - if(stat != DEAD) - icon_state = icon_text - if(current_mood && !stat) - add_overlay("aslime-[current_mood]") - else - icon_state = icon_dead - ..() - -/** - * Snowflake handling of reagent movespeed modifiers - * - * Should be moved to the reagents at some point in the future. As it is I'm in a hurry. - */ -/mob/living/simple_animal/slime/proc/on_reagent_change(datum/reagents/holder, ...) - SIGNAL_HANDLER - remove_movespeed_modifier(/datum/movespeed_modifier/slime_reagentmod) - var/amount = 0 - if(reagents.has_reagent(/datum/reagent/medicine/morphine)) // morphine slows slimes down - amount = 2 - if(reagents.has_reagent(/datum/reagent/consumable/frostoil)) // Frostoil also makes them move VEEERRYYYYY slow - amount = 5 - if(amount) - add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_reagentmod, multiplicative_slowdown = amount) - return NONE - -/mob/living/simple_animal/slime/updatehealth() - . = ..() - var/mod = 0 - if(!HAS_TRAIT(src, TRAIT_IGNOREDAMAGESLOWDOWN)) - var/health_deficiency = (maxHealth - health) - if(health_deficiency >= 45) - mod += (health_deficiency / 25) - if(health <= 0) - mod += 2 - add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_healthmod, multiplicative_slowdown = mod) - -/mob/living/simple_animal/slime/adjust_bodytemperature() - . = ..() - var/mod = 0 - if(bodytemperature >= 330.23) // 135 F or 57.08 C - mod = -1 // slimes become supercharged at high temperatures - else if(bodytemperature < 283.222) - mod = ((283.222 - bodytemperature) / 10) * 1.75 - if(mod) - add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_tempmod, multiplicative_slowdown = mod) - -/mob/living/simple_animal/slime/ObjBump(obj/O) - if(!client && powerlevel > 0) - var/probab = 10 - switch(powerlevel) - if(1 to 2) - probab = 20 - if(3 to 4) - probab = 30 - if(5 to 6) - probab = 40 - if(7 to 8) - probab = 60 - if(9) - probab = 70 - if(10) - probab = 95 - if(prob(probab)) - if(istype(O, /obj/structure/window) || istype(O, /obj/structure/grille)) - if(nutrition <= get_hunger_nutrition() && !Atkcool) - if (is_adult || prob(5)) - O.attack_slime(src) - Atkcool = TRUE - addtimer(VARSET_CALLBACK(src, Atkcool, FALSE), 4.5 SECONDS) - -/mob/living/simple_animal/slime/Process_Spacemove(movement_dir = 0, continuous_move = FALSE) - return 2 - -/mob/living/simple_animal/slime/get_status_tab_items() - . = ..() - if(!docile) - . += "Nutrition: [nutrition]/[get_max_nutrition()]" - if(amount_grown >= SLIME_EVOLUTION_THRESHOLD) - if(is_adult) - . += "You can reproduce!" - else - . += "You can evolve!" - - switch(stat) - if(HARD_CRIT, UNCONSCIOUS) - . += "You are knocked out by high levels of BZ!" - else - . += "Power Level: [powerlevel]" - - -/mob/living/simple_animal/slime/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype) - if(!forced) - amount = -abs(amount) - return ..() //Heals them - -/mob/living/simple_animal/slime/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - powerlevel = 0 // oh no, the power! - -/mob/living/simple_animal/slime/MouseDrop(atom/movable/A as mob|obj) - if(isliving(A) && A != src && usr == src) - var/mob/living/Food = A - if(CanFeedon(Food)) - Feedon(Food) - return ..() - -/mob/living/simple_animal/slime/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) - return - -/mob/living/simple_animal/slime/start_pulling(atom/movable/AM, state, force = move_force, supress_message = FALSE) - return - -/mob/living/simple_animal/slime/attack_ui(slot, params) - return - -/mob/living/simple_animal/slime/attack_slime(mob/living/simple_animal/slime/M, list/modifiers) - if(..()) //successful slime attack - if(M == src) - return - if(buckled) - Feedstop(silent = TRUE) - visible_message(span_danger("[M] pulls [src] off!"), \ - span_danger("You pull [src] off!")) - return - attacked += 5 - if(nutrition >= 100) //steal some nutrition. negval handled in life() - adjust_nutrition(-(50 + (40 * M.is_adult))) - M.add_nutrition(50 + (40 * M.is_adult)) - if(health > 0) - M.adjustBruteLoss(-10 + (-10 * M.is_adult)) - M.updatehealth() - -/mob/living/simple_animal/slime/attack_animal(mob/living/simple_animal/user, list/modifiers) - . = ..() - if(.) - attacked += 10 - - -/mob/living/simple_animal/slime/attack_paw(mob/living/carbon/human/user, list/modifiers) - if(..()) //successful monkey bite. - attacked += 10 - -/mob/living/simple_animal/slime/attack_larva(mob/living/carbon/alien/larva/L, list/modifiers) - if(..()) //successful larva bite. - attacked += 10 - -/mob/living/simple_animal/slime/attack_hulk(mob/living/carbon/human/user) - . = ..() - if(!.) - return - discipline_slime(user) - -/mob/living/simple_animal/slime/attack_hand(mob/living/carbon/human/user, list/modifiers) - if(buckled) - user.do_attack_animation(src, ATTACK_EFFECT_DISARM) - if(buckled == user) - if(prob(60)) - user.visible_message(span_warning("[user] attempts to wrestle \the [name] off!"), \ - span_danger("You attempt to wrestle \the [name] off!")) - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) - - else - user.visible_message(span_warning("[user] manages to wrestle \the [name] off!"), \ - span_notice("You manage to wrestle \the [name] off!")) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) - - discipline_slime(user) - - else - if(prob(30)) - buckled.visible_message(span_warning("[user] attempts to wrestle \the [name] off of [buckled]!"), \ - span_warning("[user] attempts to wrestle \the [name] off of you!")) - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) - - else - buckled.visible_message(span_warning("[user] manages to wrestle \the [name] off of [buckled]!"), \ - span_notice("[user] manage to wrestle \the [name] off of you!")) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) - - discipline_slime(user) - else - if(stat == DEAD && surgeries.len) - if(!(user.istate & ISTATE_HARM) || (istate & ISTATE_SECONDARY)) - for(var/datum/surgery/operations as anything in surgeries) - if(operations.next_step(user, modifiers)) - return TRUE - if(..()) //successful attack - attacked += 10 - -/mob/living/simple_animal/slime/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) - if(..()) //if harm or disarm intent. - attacked += 10 - discipline_slime(user) - - -/mob/living/simple_animal/slime/attackby(obj/item/W, mob/living/user, params) - if(stat == DEAD && surgeries.len) - var/list/modifiers = params2list(params) - if(!(user.istate & ISTATE_HARM) || ((istate & ISTATE_SECONDARY))) - for(var/datum/surgery/operations as anything in surgeries) - if(operations.next_step(user, modifiers)) - return TRUE - if(istype(W, /obj/item/stack/sheet/mineral/plasma) && !stat) //Let's you feed slimes plasma. - add_friendship(user, 1) - to_chat(user, span_notice("You feed the slime the plasma. It chirps happily.")) - var/obj/item/stack/sheet/mineral/plasma/S = W - S.use(1) - return - if(W.force > 0) - attacked += 10 - if(prob(25)) - user.do_attack_animation(src) - user.changeNext_move(CLICK_CD_MELEE) - to_chat(user, span_danger("[W] passes right through [src]!")) - return - if(Discipline && prob(50)) // wow, buddy, why am I getting attacked?? - Discipline = 0 - if(W.force >= 3) - var/force_effect = 2 * W.force - if(is_adult) - force_effect = round(W.force/2) - if(prob(10 + force_effect)) - discipline_slime(user) - if(istype(W, /obj/item/storage/bag/xeno)) - var/obj/item/storage/P = W - if(!effectmod) - to_chat(user, span_warning("The slime is not currently being mutated.")) - return - var/hasOutput = FALSE //Have we outputted text? - var/hasFound = FALSE //Have we found an extract to be added? - for(var/obj/item/slime_extract/S in P.contents) - if(S.effectmod == effectmod) - P.atom_storage.attempt_remove(S, get_turf(src), silent = TRUE) - qdel(S) - applied++ - hasFound = TRUE - if(applied >= SLIME_EXTRACT_CROSSING_REQUIRED) - to_chat(user, span_notice("You feed the slime as many of the extracts from the bag as you can, and it mutates!")) - playsound(src, 'sound/effects/attackblob.ogg', 50, TRUE) - spawn_corecross() - hasOutput = TRUE - break - if(!hasOutput) - if(!hasFound) - to_chat(user, span_warning("There are no extracts in the bag that this slime will accept!")) - else - to_chat(user, span_notice("You feed the slime some extracts from the bag.")) - playsound(src, 'sound/effects/attackblob.ogg', 50, TRUE) - return - ..() - -/mob/living/simple_animal/slime/proc/spawn_corecross() - var/static/list/crossbreeds = subtypesof(/obj/item/slimecross) - visible_message(span_danger("[src] shudders, its mutated core consuming the rest of its body!")) - playsound(src, 'sound/magic/smoke.ogg', 50, TRUE) - var/crosspath - for(var/X in crossbreeds) - var/obj/item/slimecross/S = X - if(initial(S.colour) == colour && initial(S.effect) == effectmod) - crosspath = S - break - if(crosspath) - new crosspath(loc) - else - visible_message(span_warning("The mutated core shudders, and collapses into a puddle, unable to maintain its form.")) - qdel(src) - -/mob/living/simple_animal/slime/proc/apply_water() - adjustBruteLoss(rand(15,20)) - if(!client) - if(Target) // Like cats - set_target(null) - ++Discipline - return - -/mob/living/simple_animal/slime/examine(mob/user) - . = list("This is [icon2html(src, user)] \a [src]!") - if (stat == DEAD) - . += span_deadsay("It is limp and unresponsive.") - else - if (stat == UNCONSCIOUS || stat == HARD_CRIT) // Slime stasis - . += span_deadsay("It appears to be alive but unresponsive.") - if (getBruteLoss()) - . += "" - if (getBruteLoss() < 40) - . += "It has some punctures in its flesh!" - else - . += "It has severe punctures and tears in its flesh!" - . += "\n" - - switch(powerlevel) - if(2 to 3) - . += "It is flickering gently with a little electrical activity." - - if(4 to 5) - . += "It is glowing gently with moderate levels of electrical activity." - - if(6 to 9) - . += span_warning("It is glowing brightly with high levels of electrical activity.") - - if(10) - . += span_warning("It is radiating with massive levels of electrical activity!") - - . += "" - -/mob/living/simple_animal/slime/proc/discipline_slime(mob/user) - if(stat) - return - - if(prob(80) && !client) - Discipline++ - - if(!is_adult) - if(Discipline == 1) - attacked = 0 - - set_target(null) - if(buckled) - Feedstop(silent = TRUE) //we unbuckle the slime from the mob it latched onto. - - SStun = world.time + rand(20,60) - - Stun(3) - if(user) - step_away(src,user,15) - - addtimer(CALLBACK(src, PROC_REF(slime_move), user), 0.3 SECONDS) - - -/mob/living/simple_animal/slime/proc/slime_move(mob/user) - if(user) - step_away(src,user,15) - - -/mob/living/simple_animal/slime/pet - docile = 1 - -/mob/living/simple_animal/slime/get_mob_buckling_height(mob/seat) - if(..()) - return 3 - -/mob/living/simple_animal/slime/random/Initialize(mapload, new_colour, new_is_adult) - . = ..(mapload, pick(slime_colours), prob(50)) - -/mob/living/simple_animal/slime/add_cell_sample() - AddElement(/datum/element/swabable, CELL_LINE_TABLE_SLIME, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) - -/mob/living/simple_animal/slime/proc/set_target(new_target) - var/old_target = Target - Target = new_target - if(old_target && !SLIME_CARES_ABOUT(old_target)) - UnregisterSignal(old_target, COMSIG_QDELETING) - if(Target) - RegisterSignal(Target, COMSIG_QDELETING, PROC_REF(clear_memories_of), override = TRUE) - -/mob/living/simple_animal/slime/proc/set_leader(new_leader) - var/old_leader = Leader - Leader = new_leader - if(old_leader && !SLIME_CARES_ABOUT(old_leader)) - UnregisterSignal(old_leader, COMSIG_QDELETING) - if(Leader) - RegisterSignal(Leader, COMSIG_QDELETING, PROC_REF(clear_memories_of), override = TRUE) - -/mob/living/simple_animal/slime/proc/add_friendship(new_friend, amount = 1) - if(!Friends[new_friend]) - Friends[new_friend] = 0 - Friends[new_friend] += amount - if(new_friend) - RegisterSignal(new_friend, COMSIG_QDELETING, PROC_REF(clear_memories_of), override = TRUE) - -/mob/living/simple_animal/slime/proc/set_friendship(new_friend, amount = 1) - Friends[new_friend] = amount - if(new_friend) - RegisterSignal(new_friend, COMSIG_QDELETING, PROC_REF(clear_memories_of), override = TRUE) - -/mob/living/simple_animal/slime/proc/remove_friend(friend) - Friends -= friend - if(friend && !SLIME_CARES_ABOUT(friend)) - UnregisterSignal(friend, COMSIG_QDELETING) - -/mob/living/simple_animal/slime/proc/set_friends(new_buds) - clear_friends() - for(var/mob/friend as anything in new_buds) - set_friendship(friend, new_buds[friend]) - -/mob/living/simple_animal/slime/proc/clear_friends() - for(var/mob/friend as anything in Friends) - remove_friend(friend) - -/mob/living/simple_animal/slime/proc/clear_memories_of(datum/source) - SIGNAL_HANDLER - if(source == Target) - set_target(null) - if(source == Leader) - set_leader(null) - remove_friend(source) - -#undef SLIME_CARES_ABOUT diff --git a/code/modules/mob/living/simple_animal/slime/slime_say.dm b/code/modules/mob/living/simple_animal/slime/slime_say.dm deleted file mode 100644 index 1a2540c447fa..000000000000 --- a/code/modules/mob/living/simple_animal/slime/slime_say.dm +++ /dev/null @@ -1,8 +0,0 @@ -/mob/living/simple_animal/slime/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, list/message_mods = list(), message_range) - . = ..() - if(speaker == src || radio_freq || stat || !(speaker in Friends)) - return - - speech_buffer = list() - speech_buffer += speaker - speech_buffer += lowertext(raw_message) diff --git a/code/modules/mob/living/simple_animal/slime/subtypes.dm b/code/modules/mob/living/simple_animal/slime/subtypes.dm deleted file mode 100644 index 47d45d71fdcd..000000000000 --- a/code/modules/mob/living/simple_animal/slime/subtypes.dm +++ /dev/null @@ -1,79 +0,0 @@ -/mob/living/simple_animal/slime/proc/mutation_table(colour) - var/list/slime_mutation_colors[4] - switch(colour) - //Tier 1 - if("grey") - slime_mutation_colors[1] = "orange" - slime_mutation_colors[2] = "metal" - slime_mutation_colors[3] = "blue" - slime_mutation_colors[4] = "purple" - //Tier 2 - if("purple") - slime_mutation_colors[1] = "dark purple" - slime_mutation_colors[2] = "dark blue" - slime_mutation_colors[3] = "green" - slime_mutation_colors[4] = "green" - if("metal") - slime_mutation_colors[1] = "silver" - slime_mutation_colors[2] = "yellow" - slime_mutation_colors[3] = "gold" - slime_mutation_colors[4] = "gold" - if("orange") - slime_mutation_colors[1] = "dark purple" - slime_mutation_colors[2] = "yellow" - slime_mutation_colors[3] = "red" - slime_mutation_colors[4] = "red" - if("blue") - slime_mutation_colors[1] = "dark blue" - slime_mutation_colors[2] = "silver" - slime_mutation_colors[3] = "pink" - slime_mutation_colors[4] = "pink" - //Tier 3 - if("dark blue") - slime_mutation_colors[1] = "purple" - slime_mutation_colors[2] = "blue" - slime_mutation_colors[3] = "cerulean" - slime_mutation_colors[4] = "cerulean" - if("dark purple") - slime_mutation_colors[1] = "purple" - slime_mutation_colors[2] = "orange" - slime_mutation_colors[3] = "sepia" - slime_mutation_colors[4] = "sepia" - if("yellow") - slime_mutation_colors[1] = "metal" - slime_mutation_colors[2] = "orange" - slime_mutation_colors[3] = "bluespace" - slime_mutation_colors[4] = "bluespace" - if("silver") - slime_mutation_colors[1] = "metal" - slime_mutation_colors[2] = "blue" - slime_mutation_colors[3] = "pyrite" - slime_mutation_colors[4] = "pyrite" - //Tier 4 - if("pink") - slime_mutation_colors[1] = "pink" - slime_mutation_colors[2] = "pink" - slime_mutation_colors[3] = "light pink" - slime_mutation_colors[4] = "light pink" - if("red") - slime_mutation_colors[1] = "red" - slime_mutation_colors[2] = "red" - slime_mutation_colors[3] = "oil" - slime_mutation_colors[4] = "oil" - if("gold") - slime_mutation_colors[1] = "gold" - slime_mutation_colors[2] = "gold" - slime_mutation_colors[3] = "adamantine" - slime_mutation_colors[4] = "adamantine" - if("green") - slime_mutation_colors[1] = "green" - slime_mutation_colors[2] = "green" - slime_mutation_colors[3] = "black" - slime_mutation_colors[4] = "black" - // Tier 5 - else - slime_mutation_colors[1] = colour - slime_mutation_colors[2] = colour - slime_mutation_colors[3] = colour - slime_mutation_colors[4] = colour - return(slime_mutation_colors) diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 691003fc4f12..8b063fed11fe 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -537,13 +537,12 @@ /// Induces fake death on a living mob. /mob/living/proc/fakedeath(source, silent = FALSE) - if(stat == DEAD) - return - if(!silent) - emote("deathgasp") - add_traits(list(TRAIT_FAKEDEATH, TRAIT_DEATHCOMA), source) - tod = station_time_timestamp() + if(stat != DEAD) + if(!silent) + emote("deathgasp") + tod = station_time_timestamp() + add_traits(list(TRAIT_FAKEDEATH, TRAIT_DEATHCOMA), source) ///Unignores all slowdowns that lack the IGNORE_NOSLOW flag. /mob/living/proc/unignore_slowdown(source) diff --git a/code/modules/mob/living/ventcrawling.dm b/code/modules/mob/living/ventcrawling.dm index 85cbfa556968..d9448372b5ce 100644 --- a/code/modules/mob/living/ventcrawling.dm +++ b/code/modules/mob/living/ventcrawling.dm @@ -56,9 +56,11 @@ //Handle the exit here if(HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING) && istype(loc, /obj/machinery/atmospherics) && movement_type & VENTCRAWLING) - visible_message(span_notice("[src] begins climbing out from the ventilation system..."), span_notice("You begin climbing out from the ventilation system...")) + to_chat(src, span_notice("You begin climbing out from the ventilation system...")) if(has_client && isnull(client)) return + if(!do_after(src, 1 SECONDS, target = ventcrawl_target)) + return visible_message(span_notice("[src] scrambles out from the ventilation ducts!"),span_notice("You scramble out from the ventilation ducts.")) forceMove(ventcrawl_target.loc) REMOVE_TRAIT(src, TRAIT_MOVE_VENTCRAWLING, VENTCRAWLING_TRAIT) @@ -80,13 +82,6 @@ else to_chat(src, span_warning("This ventilation duct is not connected to anything!")) -/mob/living/simple_animal/slime/can_enter_vent(obj/machinery/atmospherics/components/ventcrawl_target, provide_feedback = TRUE) - if(buckled) - if(provide_feedback) - to_chat(src, span_warning("You can't vent crawl while feeding!")) - return - return ..() - /** * Moves living mob directly into the vent as a ventcrawler * diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 22872424a846..cc300dc070fb 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1006,7 +1006,7 @@ * You can buckle on mobs if you're next to them since most are dense */ /mob/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE, buckle_mob_flags= NONE) - if(M.buckled) + if(M.buckled && LAZYLEN(buckled_mobs) >= max_buckled_mobs) return FALSE return ..(M, force, check_loc, buckle_mob_flags) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 9b95e1e40ca0..7d1f6be81538 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -366,7 +366,7 @@ var/datum/antagonist/A = M.mind.has_antag_datum(/datum/antagonist/) if(A) poll_message = "[poll_message] Status: [A.name]." - var/list/mob/dead/observer/candidates = poll_candidates_for_mob(poll_message, ROLE_PAI, FALSE, 10 SECONDS, M) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob(poll_message, check_jobban = ROLE_PAI, poll_time = 10 SECONDS, target_mob = M, pic_source = M, role_name_text = "ghost control") if(LAZYLEN(candidates)) var/mob/dead/observer/C = pick(candidates) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index fd7c0cda9268..47f315130b64 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -84,7 +84,7 @@ if(mob.stat == DEAD) mob.ghostize() return FALSE - if(SEND_SIGNAL(mob, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE) & COMSIG_MOB_CLIENT_BLOCK_PRE_LIVING_MOVE) + if(SEND_SIGNAL(mob, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, new_loc, direct) & COMSIG_MOB_CLIENT_BLOCK_PRE_LIVING_MOVE) return FALSE var/mob/living/L = mob //Already checked for isliving earlier @@ -96,7 +96,8 @@ return mob.remote_control.relaymove(mob, direct) if(isAI(mob)) - return AIMove(new_loc,direct,mob) + var/mob/living/silicon/ai/smoovin_ai = mob + return smoovin_ai.AIMove(direct) if(Process_Grab()) //are we restrained by someone's grip? return diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm index 6b42b794ba2b..11d0ea30cd64 100644 --- a/code/modules/mob/mob_say.dm +++ b/code/modules/mob/mob_say.dm @@ -172,7 +172,7 @@ return message if (is_banned_from(ckey, "Emote")) return copytext(message, customsaypos + 1) - mods[MODE_CUSTOM_SAY_EMOTE] = lowertext(copytext_char(message, 1, customsaypos)) + mods[MODE_CUSTOM_SAY_EMOTE] = copytext(message, 1, customsaypos) message = copytext(message, customsaypos + 1) if (!message) mods[MODE_CUSTOM_SAY_ERASE_INPUT] = TRUE diff --git a/code/modules/mob/mob_update_icons.dm b/code/modules/mob/mob_update_icons.dm index bd17424d8482..b8b84f8782af 100644 --- a/code/modules/mob/mob_update_icons.dm +++ b/code/modules/mob/mob_update_icons.dm @@ -12,9 +12,6 @@ /mob/proc/update_icons() return -/mob/proc/update_transform() - return - ///Updates the handcuff overlay & HUD element. /mob/proc/update_worn_handcuffs() return diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 15e5c8fe525b..a94bc9b5803b 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -183,7 +183,7 @@ to_chat(src, "You are job banned from cyborg! Appeal your job ban if you want to avoid this in the future!") ghostize(FALSE) - var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as [src]?", "Cyborg", null, 5 SECONDS, src) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as [src]?", check_jobban = JOB_CYBORG, poll_time = 5 SECONDS, target_mob = src, pic_source = src, role_name_text = "cyborg") if(LAZYLEN(candidates)) var/mob/dead/observer/chosen_candidate = pick(candidates) message_admins("[key_name_admin(chosen_candidate)] has taken control of ([key_name_admin(src)]) to replace a jobbanned player.") @@ -234,18 +234,17 @@ for(var/t in bodyparts) qdel(t) - var/mob/living/simple_animal/slime/new_slime + var/mob/living/basic/slime/new_slime if(reproduce) var/number = pick(14;2,3,4) //reproduce (has a small chance of producing 3 or 4 offspring) var/list/babies = list() for(var/i in 1 to number) - var/mob/living/simple_animal/slime/M = new/mob/living/simple_animal/slime(loc) - M.set_nutrition(round(nutrition/number)) + var/mob/living/basic/slime/M = new/mob/living/basic/slime(loc) step_away(M,src) babies += M new_slime = pick(babies) else - new_slime = new /mob/living/simple_animal/slime(loc) + new_slime = new /mob/living/basic/slime(loc) new_slime.set_combat_mode(TRUE) new_slime.key = key diff --git a/code/modules/mob_spawn/corpses/nonhuman_corpses.dm b/code/modules/mob_spawn/corpses/nonhuman_corpses.dm index e80273e1accb..eca84f119e07 100644 --- a/code/modules/mob_spawn/corpses/nonhuman_corpses.dm +++ b/code/modules/mob_spawn/corpses/nonhuman_corpses.dm @@ -18,15 +18,15 @@ ///dead slimes, with a var for whatever color you want. /obj/effect/mob_spawn/corpse/slime - mob_type = /mob/living/simple_animal/slime + mob_type = /mob/living/basic/slime icon = 'icons/mob/simple/slimes.dmi' icon_state = "grey baby slime" //sets the icon in the map editor ///the color of the slime you're spawning. - var/slime_species = "grey" + var/slime_species = /datum/slime_color/grey -/obj/effect/mob_spawn/corpse/slime/special(mob/living/simple_animal/slime/spawned_slime) +/obj/effect/mob_spawn/corpse/slime/special(mob/living/basic/slime/spawned_slime) . = ..() - spawned_slime.set_colour(slime_species) + spawned_slime.change_color(slime_species) ///dead facehuggers, great for xeno ruins so you can have a cool ruin without spiraling the entire round into xenomorph hell. also, this is a terrible terrible artifact of time /obj/effect/mob_spawn/corpse/facehugger diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index d11b97a739fd..a80bba158ca7 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -281,7 +281,7 @@ /obj/item/mod/module/flashlight/configure_edit(key, value) switch(key) if("light_color") - value = input(usr, "Pick new light color", "Flashlight Color") as color|null + value = tgui_color_picker(usr, "Pick new light color", "Flashlight Color") if(!value) return if(is_color_dark(value, 50)) diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index c9de59af0e25..2be75c7d0c65 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -143,14 +143,12 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar /obj/item/modular_computer/proc/install_default_programs() SHOULD_CALL_PARENT(FALSE) for(var/programs in default_programs + starting_programs) - var/datum/computer_file/program/program_type = new programs + var/datum/computer_file/program_type = new programs store_file(program_type) /obj/item/modular_computer/Destroy() STOP_PROCESSING(SSobj, src) - wipe_program(forced = TRUE) - for(var/datum/computer_file/program/idle as anything in idle_threads) - idle.kill_program(TRUE) + close_all_programs() //Some components will actually try and interact with this, so let's do it later QDEL_NULL(soundloop) QDEL_LIST(stored_files) @@ -457,7 +455,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar enabled = TRUE update_appearance() if(open_ui) - ui_interact(user) + update_tablet_open_uis(user) return TRUE else // Unpowered if(issynth) @@ -480,20 +478,14 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar active_program.event_networkfailure(FALSE) // Active program requires NTNet to run but we've just lost connection. Crash. for(var/datum/computer_file/program/idle_programs as anything in idle_threads) - if(idle_programs.program_state == PROGRAM_STATE_KILLED) - idle_threads.Remove(idle_programs) - continue idle_programs.process_tick(seconds_per_tick) idle_programs.ntnet_status = get_ntnet_status() if(idle_programs.requires_ntnet && !idle_programs.ntnet_status) idle_programs.event_networkfailure(TRUE) if(active_program) - if(active_program.program_state == PROGRAM_STATE_KILLED) - active_program = null - else - active_program.process_tick(seconds_per_tick) - active_program.ntnet_status = get_ntnet_status() + active_program.process_tick(seconds_per_tick) + active_program.ntnet_status = get_ntnet_status() handle_power(seconds_per_tick) // Handles all computer power interaction @@ -575,23 +567,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar data["PC_showexitprogram"] = !!active_program // Hides "Exit Program" button on mainscreen return data -///Wipes the computer's current program. Doesn't handle any of the niceties around doing this -/obj/item/modular_computer/proc/wipe_program(forced) - if(!active_program) - return - active_program.kill_program(forced) - active_program = null - -// Relays kill program request to currently active program. Use this to quit current program. -/obj/item/modular_computer/proc/kill_program(forced = FALSE) - wipe_program(forced) - var/mob/user = usr - if(user && istype(user)) - //Here to prevent programs sleeping in destroy - INVOKE_ASYNC(src, TYPE_PROC_REF(/datum, ui_interact), user) // Re-open the UI on this computer. It should show the main screen now. - update_appearance() - -/obj/item/modular_computer/proc/open_program(mob/user, datum/computer_file/program/program) +/obj/item/modular_computer/proc/open_program(mob/user, datum/computer_file/program/program, open_ui = TRUE) if(program.computer != src) CRASH("tried to open program that does not belong to this computer") @@ -601,11 +577,12 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar // The program is already running. Resume it. if(program in idle_threads) - program.program_state = PROGRAM_STATE_ACTIVE active_program = program program.alert_pending = FALSE idle_threads.Remove(program) - update_appearance() + if(open_ui) + update_tablet_open_uis(user) + update_appearance(UPDATE_ICON) return TRUE if(!program.is_supported_by_hardware(hardware_flag, 1, user)) @@ -624,8 +601,9 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar active_program = program program.alert_pending = FALSE - update_appearance() - ui_interact(user) + if(open_ui) + update_tablet_open_uis(user) + update_appearance(UPDATE_ICON) return TRUE // Returns 0 for No Signal, 1 for Low Signal and 2 for Good Signal. 3 is for wired connection (always-on) @@ -657,10 +635,13 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar return SSmodular_computers.add_log("[src]: [text]") -/obj/item/modular_computer/proc/shutdown_computer(loud = 1) - kill_program(forced = TRUE) - for(var/datum/computer_file/program/idle_program in idle_threads) - idle_program.kill_program(forced = TRUE) +/obj/item/modular_computer/proc/close_all_programs() + active_program = null + for(var/datum/computer_file/program/idle as anything in idle_threads) + idle_threads.Remove(idle) + +/obj/item/modular_computer/proc/shutdown_computer(loud = TRUE) + close_all_programs() if(looping_sound) soundloop.stop() if(physical && loud) diff --git a/code/modules/modular_computers/computers/item/computer_files.dm b/code/modules/modular_computers/computers/item/computer_files.dm index 8299247c5ea8..296f5be09925 100644 --- a/code/modules/modular_computers/computers/item/computer_files.dm +++ b/code/modules/modular_computers/computers/item/computer_files.dm @@ -14,11 +14,9 @@ if(file_storing in stored_files) return FALSE - SEND_SIGNAL(file_storing, COMSIG_MODULAR_COMPUTER_FILE_ADDING) file_storing.computer = src - stored_files.Add(file_storing) used_capacity += file_storing.size - SEND_SIGNAL(file_storing, COMSIG_MODULAR_COMPUTER_FILE_ADDED) + SEND_SIGNAL(file_storing, COMSIG_MODULAR_COMPUTER_FILE_STORE, src) return TRUE /** @@ -35,15 +33,12 @@ return FALSE if(istype(file_removing, /datum/computer_file/program)) var/datum/computer_file/program/program_file = file_removing - if(program_file.program_state != PROGRAM_STATE_KILLED) - program_file.kill_program(TRUE) - if(program_file.program_state == PROGRAM_STATE_ACTIVE) - active_program = null + program_file.kill_program() - SEND_SIGNAL(file_removing, COMSIG_MODULAR_COMPUTER_FILE_DELETING) stored_files.Remove(file_removing) used_capacity -= file_removing.size SEND_SIGNAL(file_removing, COMSIG_MODULAR_COMPUTER_FILE_DELETED) + qdel(file_removing) return TRUE /** diff --git a/code/modules/modular_computers/computers/item/computer_power.dm b/code/modules/modular_computers/computers/item/computer_power.dm index bea16f18546c..6b6230ed0d4c 100644 --- a/code/modules/modular_computers/computers/item/computer_power.dm +++ b/code/modules/modular_computers/computers/item/computer_power.dm @@ -23,12 +23,13 @@ // Used in following function to reduce copypaste /obj/item/modular_computer/proc/power_failure() - if(enabled) // Shut down the computer - if(active_program) - active_program.event_powerfailure(background = FALSE) - for(var/datum/computer_file/program/programs as anything in idle_threads) - programs.event_powerfailure(background = TRUE) - shutdown_computer(0) + if(!enabled) // Shut down the computer + return + if(active_program) + active_program.event_powerfailure() + for(var/datum/computer_file/program/programs as anything in idle_threads) + programs.event_powerfailure() + shutdown_computer(loud = FALSE) // Handles power-related things, such as battery interaction, recharging, shutdown when it's discharged /obj/item/modular_computer/proc/handle_power(seconds_per_tick) diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index fb90a50604f8..e8e6001413d9 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -1,3 +1,35 @@ +/** + * update_tablet_open_uis + * + * Will search the user to see if they have the tablet open. + * If they don't, we'll open a new UI depending on the tab the tablet is meant to be on. + * If they do, we'll update the interface and title, then update all static data and re-send assets. + * + * This is best called when you're actually changing the app, as we don't check + * if we're swapping to the current UI repeatedly. + * Args: + * user - The person whose UI we're updating. + */ +/obj/item/modular_computer/proc/update_tablet_open_uis(mob/user) + var/datum/tgui/active_ui = SStgui.get_open_ui(user, src) + if(!active_ui) + if(active_program) + active_ui = new(user, src, active_program.tgui_id, active_program.filedesc) + active_program.ui_interact(user, active_ui) + else + active_ui = new(user, src, "NtosMain") + return active_ui.open() + + if(active_program) + active_ui.interface = active_program.tgui_id + active_ui.title = active_program.filedesc + active_program.ui_interact(user, active_ui) + else + active_ui.interface = "NtosMain" + + active_ui.send_assets() + update_static_data_for_all_viewers() + /obj/item/modular_computer/interact(mob/user) if(enabled) ui_interact(user) @@ -23,23 +55,7 @@ ui = SStgui.try_update_ui(user, src, ui) if(!ui) - if(active_program) - ui = new(user, src, active_program.tgui_id, active_program.filedesc) - else - ui = new(user, src, "NtosMain") - ui.open() - return - - var/old_open_ui = ui.interface - if(active_program) - ui.interface = active_program.tgui_id - ui.title = active_program.filedesc - else - ui.interface = "NtosMain" - //opened a new UI - if(old_open_ui != ui.interface) - update_static_data(user, ui) - ui.send_assets() + update_tablet_open_uis(user) /obj/item/modular_computer/ui_assets(mob/user) var/list/data = list() @@ -49,14 +65,12 @@ return data /obj/item/modular_computer/ui_static_data(mob/user) - . = ..() var/list/data = list() if(active_program) data += active_program.ui_static_data(user) return data data["show_imprint"] = istype(src, /obj/item/modular_computer/pda) - return data /obj/item/modular_computer/ui_data(mob/user) @@ -65,6 +79,11 @@ data += active_program.ui_data(user) return data + data["pai"] = inserted_pai + data["has_light"] = has_light + data["light_on"] = light_on + data["comp_light_color"] = comp_light_color + data["login"] = list( IDName = saved_identification || "Unknown", IDJob = saved_job || "Unknown", @@ -93,10 +112,6 @@ "alert" = program.alert_pending, )) - data["has_light"] = has_light - data["light_on"] = light_on - data["comp_light_color"] = comp_light_color - data["pai"] = inserted_pai return data // Handles user's GUI input @@ -105,18 +120,15 @@ if(.) return - if(ishuman(usr) && !allow_chunky) //in /datum/computer_file/program/ui_act() too + if(ishuman(usr) && !allow_chunky) var/mob/living/carbon/human/human_user = usr if(human_user.check_chunky_fingers()) balloon_alert(human_user, "fingers are too big!") return TRUE - if(active_program) - active_program.ui_act(action, params, ui, state) - switch(action) if("PC_exit") - kill_program() + active_program.kill_program(usr) return TRUE if("PC_shutdown") shutdown_computer() @@ -124,44 +136,40 @@ if("PC_minimize") if(!active_program) return - //header programs can't be minimized. - if(active_program.header_program) - kill_program() - return TRUE - - idle_threads.Add(active_program) - active_program.program_state = PROGRAM_STATE_BACKGROUND // Should close any existing UIs - - active_program = null - update_appearance() + active_program.background_program() + return TRUE if("PC_killprogram") var/prog = params["name"] var/datum/computer_file/program/killed_program = find_file_by_name(prog) - if(!istype(killed_program) || killed_program.program_state == PROGRAM_STATE_KILLED) + if(!istype(killed_program)) return - killed_program.kill_program(forced = TRUE) + killed_program.kill_program(usr) to_chat(usr, span_notice("Program [killed_program.filename].[killed_program.filetype] with PID [rand(100,999)] has been killed.")) + return TRUE if("PC_runprogram") open_program(usr, find_file_by_name(params["name"])) + return TRUE if("PC_toggle_light") - return toggle_flashlight() + toggle_flashlight() + return TRUE if("PC_light_color") var/mob/user = usr var/new_color while(!new_color) - new_color = input(user, "Choose a new color for [src]'s flashlight.", "Light Color",light_color) as color|null + new_color = tgui_color_picker(user, "Choose a new color for [src]'s flashlight.", "Light Color", light_color) if(!new_color) return if(is_color_dark(new_color, 50) ) //Colors too dark are rejected to_chat(user, span_warning("That color is too dark! Choose a lighter one.")) new_color = null - return set_flashlight_color(new_color) + set_flashlight_color(new_color) + return TRUE if("PC_Eject_Disk") var/param = params["name"] @@ -205,9 +213,17 @@ update_appearance(UPDATE_ICON) if("interact") inserted_pai.attack_self(usr) - return UI_UPDATE + return TRUE + + if(active_program) + return active_program.ui_act(action, params, ui, state) /obj/item/modular_computer/ui_host() if(physical) return physical return src + +/obj/item/modular_computer/ui_close(mob/user) + . = ..() + if(active_program) + active_program.ui_close(user) diff --git a/code/modules/modular_computers/computers/item/disks/computer_disk.dm b/code/modules/modular_computers/computers/item/disks/computer_disk.dm index bd652a31c8e4..041abf341d0d 100644 --- a/code/modules/modular_computers/computers/item/disks/computer_disk.dm +++ b/code/modules/modular_computers/computers/item/disks/computer_disk.dm @@ -17,7 +17,7 @@ /obj/item/computer_disk/Initialize(mapload) . = ..() for(var/programs in starting_programs) - var/datum/computer_file/program/program_type = new programs + var/datum/computer_file/program_type = new programs add_file(program_type) /obj/item/computer_disk/Destroy(force) @@ -47,6 +47,7 @@ return FALSE stored_files.Remove(file) used_capacity -= file.size + qdel(file) return TRUE /obj/item/computer_disk/advanced diff --git a/code/modules/modular_computers/computers/item/disks/unique_disks.dm b/code/modules/modular_computers/computers/item/disks/unique_disks.dm new file mode 100644 index 000000000000..144fa52c65af --- /dev/null +++ b/code/modules/modular_computers/computers/item/disks/unique_disks.dm @@ -0,0 +1,8 @@ +/obj/item/computer_disk/syndicate + name = "golden data disk" + desc = "A data disk with some high-tech programs, probably expensive as hell." + icon_state = "datadisk8" + custom_materials = list(/datum/material/gold = SMALL_MATERIAL_AMOUNT) + +/obj/item/computer_disk/syndicate/camera_app + starting_programs = list(/datum/computer_file/program/secureye/syndicate) diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm index 3dd8df819a57..24a87e9a01c0 100644 --- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -235,6 +235,24 @@ * Supply */ +//Monkestation Edits Start - QM is not a head, knocking QM's PDA down, removed status display and science programs. The redefinition of the QM's PDA will be reflected in the job. + +/obj/item/modular_computer/pda/quartermaster + name = "quartermaster PDA" + greyscale_config = /datum/greyscale_config/tablet/stripe_thick + greyscale_colors = "#D6B328#6506CA#927444" + inserted_item = /obj/item/pen/survival + stored_paper = 20 + starting_programs = list( + /datum/computer_file/program/crew_manifest, + /datum/computer_file/program/robocontrol, + /datum/computer_file/program/budgetorders, + /datum/computer_file/program/shipping, + /datum/computer_file/program/robocontrol, + ) + +//Monkestation Edits End + /obj/item/modular_computer/pda/cargo name = "cargo technician PDA" greyscale_colors = "#D6B328#6506CA" diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm index ba7128a29fff..69d4f445ed04 100644 --- a/code/modules/modular_computers/computers/machinery/console_presets.dm +++ b/code/modules/modular_computers/computers/machinery/console_presets.dm @@ -1,19 +1,18 @@ -/obj/machinery/modular_computer/console/preset +/obj/machinery/modular_computer/preset ///List of programs the computer starts with, given on Initialize. var/list/datum/computer_file/starting_programs = list() -/obj/machinery/modular_computer/console/preset/Initialize(mapload) +/obj/machinery/modular_computer/preset/Initialize(mapload) . = ..() if(!cpu) return for(var/programs in starting_programs) - var/datum/computer_file/program/program_type = new programs + var/datum/computer_file/program_type = new programs cpu.store_file(program_type) // ===== ENGINEERING CONSOLE ===== -/obj/machinery/modular_computer/console/preset/engineering - console_department = "Engineering" +/obj/machinery/modular_computer/preset/engineering name = "engineering console" desc = "A stationary computer. This one comes preloaded with engineering programs." starting_programs = list( @@ -23,8 +22,7 @@ ) // ===== RESEARCH CONSOLE ===== -/obj/machinery/modular_computer/console/preset/research - console_department = "Research" +/obj/machinery/modular_computer/preset/research name = "research director's console" desc = "A stationary computer. This one comes preloaded with research programs." starting_programs = list( @@ -36,8 +34,7 @@ ) // ===== COMMAND CONSOLE ===== -/obj/machinery/modular_computer/console/preset/command - console_department = "Command" +/obj/machinery/modular_computer/preset/command name = "command console" desc = "A stationary computer. This one comes preloaded with command programs." starting_programs = list( @@ -46,8 +43,7 @@ ) // ===== IDENTIFICATION CONSOLE ===== -/obj/machinery/modular_computer/console/preset/id - console_department = "Identification" +/obj/machinery/modular_computer/preset/id name = "identification console" desc = "A stationary computer. This one comes preloaded with identification modification programs." starting_programs = list( @@ -57,17 +53,16 @@ /datum/computer_file/program/crew_manifest, ) -/obj/machinery/modular_computer/console/preset/id/centcom +/obj/machinery/modular_computer/preset/id/centcom desc = "A stationary computer. This one comes preloaded with CentCom identification modification programs." -/obj/machinery/modular_computer/console/preset/id/centcom/Initialize(mapload) +/obj/machinery/modular_computer/preset/id/centcom/Initialize(mapload) . = ..() var/datum/computer_file/program/card_mod/card_mod_centcom = cpu.find_file_by_name("plexagonidwriter") card_mod_centcom.is_centcom = TRUE // ===== CIVILIAN CONSOLE ===== -/obj/machinery/modular_computer/console/preset/civilian - console_department = "Civilian" +/obj/machinery/modular_computer/preset/civilian name = "civilian console" desc = "A stationary computer. This one comes preloaded with generic programs." starting_programs = list( @@ -76,8 +71,7 @@ ) // curator -/obj/machinery/modular_computer/console/preset/curator - console_department = "Civilian" +/obj/machinery/modular_computer/preset/curator name = "curator console" desc = "A stationary computer. This one comes preloaded with art programs." starting_programs = list( @@ -85,49 +79,51 @@ ) // ===== CARGO CHAT CONSOLES ===== -/obj/machinery/modular_computer/console/preset/cargochat +/obj/machinery/modular_computer/preset/cargochat name = "cargo chatroom console" desc = "A stationary computer. This one comes preloaded with a chatroom for your cargo requests." starting_programs = list( /datum/computer_file/program/chatclient, ) -/obj/machinery/modular_computer/console/preset/cargochat/Initialize(mapload) + ///Used in Initialize to set the chat client name. + var/console_department + +/obj/machinery/modular_computer/preset/cargochat/Initialize(mapload) . = ..() var/datum/computer_file/program/chatclient/chatprogram = cpu.find_file_by_name("ntnrc_client") chatprogram.username = "[lowertext(console_department)]_department" - chatprogram.program_state = PROGRAM_STATE_ACTIVE cpu.active_program = chatprogram -/obj/machinery/modular_computer/console/preset/cargochat/service +/obj/machinery/modular_computer/preset/cargochat/service console_department = "Service" -/obj/machinery/modular_computer/console/preset/cargochat/engineering +/obj/machinery/modular_computer/preset/cargochat/engineering console_department = "Engineering" -/obj/machinery/modular_computer/console/preset/cargochat/science +/obj/machinery/modular_computer/preset/cargochat/science console_department = "Science" -/obj/machinery/modular_computer/console/preset/cargochat/security +/obj/machinery/modular_computer/preset/cargochat/security console_department = "Security" -/obj/machinery/modular_computer/console/preset/cargochat/medical +/obj/machinery/modular_computer/preset/cargochat/medical console_department = "Medical" //ONE PER MAP PLEASE, IT MAKES A CARGOBUS FOR EACH ONE OF THESE -/obj/machinery/modular_computer/console/preset/cargochat/cargo +/obj/machinery/modular_computer/preset/cargochat/cargo console_department = "Cargo" name = "department chatroom console" desc = "A stationary computer. This one comes preloaded with a chatroom for incoming cargo requests. You may moderate it from this computer." -/obj/machinery/modular_computer/console/preset/cargochat/cargo/LateInitialize() +/obj/machinery/modular_computer/preset/cargochat/cargo/LateInitialize() . = ..() var/datum/computer_file/program/chatclient/chatprogram = cpu.find_file_by_name("ntnrc_client") chatprogram.username = "cargo_requests_operator" var/datum/ntnet_conversation/cargochat = chatprogram.create_new_channel("#cargobus", strong = TRUE) - for(var/obj/machinery/modular_computer/console/preset/cargochat/cargochat_console in GLOB.machines) + for(var/obj/machinery/modular_computer/preset/cargochat/cargochat_console in GLOB.machines) if(cargochat_console == src) continue var/datum/computer_file/program/chatclient/other_chatprograms = cargochat_console.cpu.find_file_by_name("ntnrc_client") diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index 3cd0e341f0d2..e85b4edc197d 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -1,20 +1,18 @@ -// Modular Computer - device that runs various programs and operates with hardware -// DO NOT SPAWN THIS TYPE. Use /laptop/ or /console/ instead. +// Modular Computer - A machinery that is mostly just a host to the Modular Computer item. /obj/machinery/modular_computer name = "modular computer" desc = "You shouldn't see this. If you do, report it." //they should be examining the processor instead - - // Modular computers can run on various devices. Each DEVICE (Laptop, Console, Tablet,..) - // must have it's own DMI file. Icon states must be called exactly the same in all files, but may look differently - // If you create a program which is limited to Laptops and Consoles you don't have to add it's icon_state overlay for Tablets too, for example. icon = 'icons/obj/modular_console.dmi' - icon_state = null - + icon_state = "console" idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.05 + density = TRUE + max_integrity = 300 + integrity_failure = 0.5 + ///The power cell, null by default as we use the APC we're in var/internal_cell = null ///A flag that describes this device type - var/hardware_flag = NONE + var/hardware_flag = PROGRAM_CONSOLE ///Power usage during last tick var/last_power_usage = 0 /// Amount of programs that can be ran at once @@ -22,9 +20,9 @@ ///Icon state when the computer is turned off. - var/icon_state_unpowered = null + var/icon_state_unpowered = "console-off" ///Icon state when the computer is turned on. - var/icon_state_powered = null + var/icon_state_powered = "console" ///Icon state overlay when the computer is turned on, but no program is loaded that would override the screen. var/screen_icon_state_menu = "menu" ///Icon state overlay when the computer is powered, but not 'switched on'. @@ -32,11 +30,11 @@ ///Amount of steel sheets refunded when disassembling an empty frame of this computer. var/steel_sheet_cost = 10 ///Light luminosity when turned on - var/light_strength = 0 + var/light_strength = 2 ///Power usage when the computer is open (screen is active) and can be interacted with. - var/base_active_power_usage = 100 + var/base_active_power_usage = 500 ///Power usage when the computer is idle and screen is off (currently only applies to laptops) - var/base_idle_power_usage = 10 + var/base_idle_power_usage = 100 ///CPU that handles most logic while this type only handles power and other specific things. var/obj/item/modular_computer/processor/cpu @@ -45,6 +43,8 @@ . = ..() cpu = new(src) cpu.physical = src + cpu.screen_on = TRUE + update_appearance() /obj/machinery/modular_computer/Destroy() QDEL_NULL(cpu) diff --git a/code/modules/modular_computers/computers/machinery/modular_console.dm b/code/modules/modular_computers/computers/machinery/modular_console.dm deleted file mode 100644 index 2cbcb5ffdea8..000000000000 --- a/code/modules/modular_computers/computers/machinery/modular_console.dm +++ /dev/null @@ -1,24 +0,0 @@ -/obj/machinery/modular_computer/console - name = "console" - desc = "A stationary computer." - - icon = 'icons/obj/modular_console.dmi' - icon_state = "console" - icon_state_powered = "console" - icon_state_unpowered = "console-off" - hardware_flag = PROGRAM_CONSOLE - density = TRUE - base_idle_power_usage = 100 - base_active_power_usage = 500 - steel_sheet_cost = 10 - light_strength = 2 - max_integrity = 300 - integrity_failure = 0.5 - ///Used in New() to set network tag according to our area. - var/console_department = "" - -/obj/machinery/modular_computer/console/Initialize(mapload) - . = ..() - if(cpu) - cpu.screen_on = TRUE - update_appearance() diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm index 09325a09707b..b26df2bf475f 100644 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ b/code/modules/modular_computers/file_system/computer_file.dm @@ -19,14 +19,12 @@ /datum/computer_file/New() ..() uid = file_uid++ - RegisterSignal(src, COMSIG_MODULAR_COMPUTER_FILE_ADDED, PROC_REF(on_install)) + RegisterSignal(src, COMSIG_MODULAR_COMPUTER_FILE_STORE, PROC_REF(on_install)) /datum/computer_file/Destroy(force) if(computer) - computer.remove_file(src) computer = null if(disk_host) - disk_host.remove_file(src) disk_host = null return ..() @@ -52,9 +50,9 @@ return temp ///Called post-installation of an application in a computer, after 'computer' var is set. -/datum/computer_file/proc/on_install() +/datum/computer_file/proc/on_install(datum/computer_file/source, obj/item/modular_computer/computer_installing) SIGNAL_HANDLER - return + computer_installing.stored_files.Add(src) /** * Called when examining a modular computer @@ -87,8 +85,8 @@ * Arguments: * * background - Whether the app is running in the background. */ -/datum/computer_file/program/proc/event_powerfailure(background) - kill_program(forced = TRUE) +/datum/computer_file/program/proc/event_powerfailure() + kill_program() /** * Called when a computer program is crashing due to any required connection being shut off. @@ -96,7 +94,7 @@ * * background - Whether the app is running in the background. */ /datum/computer_file/program/proc/event_networkfailure(background) - kill_program(forced = TRUE) + kill_program() if(background) computer.visible_message(span_danger("\The [computer]'s screen displays a \"Process [filename].[filetype] (PID [rand(100,999)]) terminated - Network Error\" error")) else diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index 71b5c6173ae2..92fab95c8605 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -7,8 +7,6 @@ var/list/required_access = list() /// List of required access to download or file host the program. Any match will do. var/list/transfer_access = list() - /// PROGRAM_STATE_KILLED or PROGRAM_STATE_BACKGROUND or PROGRAM_STATE_ACTIVE - specifies whether this program is running. - var/program_state = PROGRAM_STATE_KILLED /// User-friendly name of this program. var/filedesc = "Unknown Program" /// Short description of this program's function. @@ -43,6 +41,8 @@ var/alert_pending = FALSE /// How well this program will help combat detomatix viruses. var/detomatix_resistance = NONE + ///Boolean on whether or not only one copy of the app can exist. This means it deletes itself when cloned elsewhere. + var/unique_copy = FALSE /datum/computer_file/program/clone() var/datum/computer_file/program/temp = ..() @@ -51,8 +51,17 @@ temp.program_icon_state = program_icon_state temp.requires_ntnet = requires_ntnet temp.usage_flags = usage_flags + if(unique_copy) + if(computer) + computer.remove_file(src) + if(disk_host) + disk_host.remove_file(src) return temp +///We are not calling parent as it's handled by the computer itself, this is only called after. +/datum/computer_file/program/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + SHOULD_CALL_PARENT(FALSE) + // Relays icon update to the computer. /datum/computer_file/program/proc/update_computer_icon() if(computer) @@ -154,23 +163,43 @@ if(requires_ntnet) var/obj/item/card/id/ID = computer.computer_id_slot?.GetID() generate_network_log("Connection opened -- Program ID:[filename] User:[ID?"[ID.registered_name]":"None"]") - program_state = PROGRAM_STATE_ACTIVE return TRUE return FALSE /** * Kills the running program * - * Use this proc to kill the program. Designed to be implemented by each program if it requires on-quit logic, such as the NTNRC client. - * Arguments: - * * forced - Boolean to determine if this was a forced close. Should be TRUE if the user did not willingly close the program. + * Use this proc to kill the program. + * Designed to be implemented by each program if it requires on-quit logic, such as the NTNRC client. + * Args: + * - user - If there's a user, this is the person killing the program. **/ -/datum/computer_file/program/proc/kill_program(forced = FALSE) +/datum/computer_file/program/proc/kill_program(mob/user) SHOULD_CALL_PARENT(TRUE) - program_state = PROGRAM_STATE_KILLED + + if(src == computer.active_program) + computer.active_program = null + if(computer.enabled) + computer.update_tablet_open_uis(usr) if(src in computer.idle_threads) computer.idle_threads.Remove(src) + if(requires_ntnet) var/obj/item/card/id/ID = computer.computer_id_slot?.GetID() generate_network_log("Connection closed -- Program ID: [filename] User:[ID ? "[ID.registered_name]" : "None"]") + + computer.update_appearance(UPDATE_ICON) + return TRUE + +///Sends the running program to the background/idle threads. Header programs can't be minimized and will kill instead. +/datum/computer_file/program/proc/background_program() + SHOULD_CALL_PARENT(TRUE) + if(header_program) + return kill_program() + + computer.idle_threads.Add(src) + computer.active_program = null + + computer.update_tablet_open_uis(usr) + computer.update_appearance(UPDATE_ICON) return TRUE diff --git a/code/modules/modular_computers/file_system/programs/airestorer.dm b/code/modules/modular_computers/file_system/programs/airestorer.dm index 0fac55e26b11..4f24b2c61d87 100644 --- a/code/modules/modular_computers/file_system/programs/airestorer.dm +++ b/code/modules/modular_computers/file_system/programs/airestorer.dm @@ -30,7 +30,7 @@ examine_text += span_info("Alt-click to eject the intelliCard.") return examine_text -/datum/computer_file/program/ai_restorer/kill_program(forced) +/datum/computer_file/program/ai_restorer/kill_program(mob/user) try_eject(forced = TRUE) return ..() @@ -98,11 +98,7 @@ return TRUE -/datum/computer_file/program/ai_restorer/ui_act(action, params) - . = ..() - if(.) - return - +/datum/computer_file/program/ai_restorer/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) if("PRG_beginReconstruction") if(!stored_card || !stored_card.AI) diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm index f3cb91bc2920..e1205f92c6a8 100644 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/alarm.dm @@ -51,6 +51,6 @@ . = ..(user) GLOB.alarmdisplay += src -/datum/computer_file/program/alarm_monitor/kill_program(forced = FALSE) +/datum/computer_file/program/alarm_monitor/kill_program() GLOB.alarmdisplay -= src return ..() diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm index 0a80f1834eae..339dd3175ebe 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm @@ -32,18 +32,14 @@ target = null error = "Connection to destination relay lost." -/datum/computer_file/program/ntnet_dos/kill_program(forced = FALSE) +/datum/computer_file/program/ntnet_dos/kill_program(mob/user) if(target) target.dos_sources.Remove(src) target = null executed = FALSE + return ..() - ..() - -/datum/computer_file/program/ntnet_dos/ui_act(action, params) - . = ..() - if(.) - return +/datum/computer_file/program/ntnet_dos/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) if("PRG_target_relay") for(var/obj/machinery/ntnet_relay/relays as anything in GLOB.ntnet_relays) diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm index 172fdc7fc42e..88aa48d0c312 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm @@ -39,10 +39,7 @@ var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread spark_system.start() -/datum/computer_file/program/revelation/ui_act(action, params) - . = ..() - if(.) - return +/datum/computer_file/program/revelation/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) if("PRG_arm") armed = !armed diff --git a/code/modules/modular_computers/file_system/programs/arcade.dm b/code/modules/modular_computers/file_system/programs/arcade.dm index 70e12343c2f3..a51d3345d101 100644 --- a/code/modules/modular_computers/file_system/programs/arcade.dm +++ b/code/modules/modular_computers/file_system/programs/arcade.dm @@ -94,11 +94,7 @@ return data /datum/computer_file/program/arcade/ui_act(action, list/params) - . = ..() - if(.) - return usr.played_game() - var/gamerSkillLevel = 0 var/gamerSkill = 0 if(usr?.mind) diff --git a/code/modules/modular_computers/file_system/programs/atmosscan.dm b/code/modules/modular_computers/file_system/programs/atmosscan.dm index b0a7c08a049e..6264531428f3 100644 --- a/code/modules/modular_computers/file_system/programs/atmosscan.dm +++ b/code/modules/modular_computers/file_system/programs/atmosscan.dm @@ -68,9 +68,6 @@ return data /datum/computer_file/program/atmosscan/ui_act(action, list/params) - . = ..() - if(.) - return switch(action) if("scantoggle") if(atmozphere_mode == ATMOZPHERE_SCAN_CLICK) diff --git a/code/modules/modular_computers/file_system/programs/borg_monitor.dm b/code/modules/modular_computers/file_system/programs/borg_monitor.dm index 99e5db50c740..6385d9997dde 100644 --- a/code/modules/modular_computers/file_system/programs/borg_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/borg_monitor.dm @@ -19,7 +19,7 @@ DL_source = null return ..() -/datum/computer_file/program/borg_monitor/kill_program(forced = FALSE) +/datum/computer_file/program/borg_monitor/kill_program(mob/user) loglist = null //Not everything is saved if you close an app DL_source = null DL_progress = 0 @@ -99,15 +99,10 @@ ) data["cyborgs"] += list(cyborg_data) data["DL_progress"] = DL_progress - data["borglog"] = loglist - return data -/datum/computer_file/program/borg_monitor/ui_act(action, params) - . = ..() - if(.) - return +/datum/computer_file/program/borg_monitor/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) if("messagebot") var/mob/living/silicon/robot/R = locate(params["ref"]) in GLOB.silicon_mobs diff --git a/code/modules/modular_computers/file_system/programs/bounty_board.dm b/code/modules/modular_computers/file_system/programs/bounty_board.dm index 9d2e227702f7..746737c9b849 100644 --- a/code/modules/modular_computers/file_system/programs/bounty_board.dm +++ b/code/modules/modular_computers/file_system/programs/bounty_board.dm @@ -58,9 +58,6 @@ return data /datum/computer_file/program/bounty_board/ui_act(action, list/params) - . = ..() - if(.) - return var/current_ref_num = params["request"] var/current_app_num = params["applicant"] var/datum/bank_account/request_target diff --git a/code/modules/modular_computers/file_system/programs/budgetordering.dm b/code/modules/modular_computers/file_system/programs/budgetordering.dm index 1fd4eecd83d7..4386f612b53e 100644 --- a/code/modules/modular_computers/file_system/programs/budgetordering.dm +++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm @@ -121,18 +121,31 @@ if(SSshuttle.supply_blocked) message = blockade_warning data["message"] = message - data["cart"] = list() - for(var/datum/supply_order/SO in SSshuttle.shopping_list) - data["cart"] += list(list( - "cost_type" = SO.cost_type, - "object" = SO.pack.name, - "cost" = SO.pack.get_cost(), - "id" = SO.id, - "orderer" = SO.orderer, - "paid" = !isnull(SO.paying_account), //paid by requester - "dep_order" = !!SO.department_destination, - "can_be_cancelled" = SO.can_be_cancelled, + var/cart_list = list() + for(var/datum/supply_order/order in SSshuttle.shopping_list) + if(cart_list[order.pack.name]) + cart_list[order.pack.name][1]["amount"]++ + cart_list[order.pack.name][1]["cost"] += order.get_final_cost() + if(order.department_destination) + cart_list[order.pack.name][1]["dep_order"]++ + if(!isnull(order.paying_account)) + cart_list[order.pack.name][1]["paid"]++ + continue + + cart_list[order.pack.name] = list(list( + "cost_type" = order.cost_type, + "object" = order.pack.name, + "cost" = order.get_final_cost(), + "id" = order.id, + "amount" = 1, + "orderer" = order.orderer, + "paid" = !isnull(order.paying_account) ? 1 : 0, //number of orders purchased privatly + "dep_order" = order.department_destination ? 1 : 0, //number of orders purchased by a department + "can_be_cancelled" = order.can_be_cancelled, )) + data["cart"] = list() + for(var/item_id in cart_list) + data["cart"] += cart_list[item_id] data["requests"] = list() for(var/datum/supply_order/SO in SSshuttle.request_list) @@ -147,9 +160,6 @@ return data /datum/computer_file/program/budgetorders/ui_act(action, params, datum/tgui/ui) - . = ..() - if(.) - return switch(action) if("send") if(!SSshuttle.supply.canMove()) diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm index b1c51a8c5586..1f974f862fcc 100644 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -79,7 +79,7 @@ return FALSE computer.crew_manifest_update = TRUE -/datum/computer_file/program/card_mod/kill_program(forced) +/datum/computer_file/program/card_mod/kill_program(mob/user) computer.crew_manifest_update = FALSE var/obj/item/card/id/inserted_auth_card = computer.computer_id_slot if(inserted_auth_card) @@ -87,10 +87,7 @@ return ..() -/datum/computer_file/program/card_mod/ui_act(action, params) - . = ..() - if(.) - return +/datum/computer_file/program/card_mod/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) var/mob/user = usr var/obj/item/card/id/inserted_auth_card = computer.computer_id_slot diff --git a/code/modules/modular_computers/file_system/programs/cargoship.dm b/code/modules/modular_computers/file_system/programs/cargoship.dm index 9e8c6430af10..462c17aba706 100644 --- a/code/modules/modular_computers/file_system/programs/cargoship.dm +++ b/code/modules/modular_computers/file_system/programs/cargoship.dm @@ -27,9 +27,6 @@ return data /datum/computer_file/program/shipping/ui_act(action, list/params) - . = ..() - if(.) - return if(!computer.computer_id_slot) //We need an ID to successfully run return FALSE diff --git a/code/modules/modular_computers/file_system/programs/crewmanifest.dm b/code/modules/modular_computers/file_system/programs/crewmanifest.dm index a69791ae4da1..e0f261730012 100644 --- a/code/modules/modular_computers/file_system/programs/crewmanifest.dm +++ b/code/modules/modular_computers/file_system/programs/crewmanifest.dm @@ -17,9 +17,6 @@ return data /datum/computer_file/program/crew_manifest/ui_act(action, params, datum/tgui/ui) - . = ..() - if(.) - return switch(action) if("PRG_print") if(computer) //This option should never be called if there is no printer diff --git a/code/modules/modular_computers/file_system/programs/file_browser.dm b/code/modules/modular_computers/file_system/programs/file_browser.dm index 377f469518c7..50fa29ccd5c4 100644 --- a/code/modules/modular_computers/file_system/programs/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/file_browser.dm @@ -13,10 +13,7 @@ var/open_file var/error -/datum/computer_file/program/filemanager/ui_act(action, params) - . = ..() - if(.) - return +/datum/computer_file/program/filemanager/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) if("PRG_deletefile") var/datum/computer_file/file = computer.find_file_by_name(params["name"]) @@ -60,6 +57,8 @@ var/datum/computer_file/F = computer.find_file_by_name(params["name"]) if(!F) return + if(computer.find_file_by_name(params["name"], computer.inserted_disk)) + return var/datum/computer_file/C = F.clone(FALSE) computer.inserted_disk.add_file(C) return TRUE diff --git a/code/modules/modular_computers/file_system/programs/frontier.dm b/code/modules/modular_computers/file_system/programs/frontier.dm index 9e33256da74e..778fbab578ea 100644 --- a/code/modules/modular_computers/file_system/programs/frontier.dm +++ b/code/modules/modular_computers/file_system/programs/frontier.dm @@ -164,10 +164,7 @@ data["purchaseableBoosts"][partner.type] += node_id return data -/datum/computer_file/program/scipaper_program/ui_act(action, params) - . = ..() - if (.) - return +/datum/computer_file/program/scipaper_program/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) if("et_alia") paper_to_be.et_alia = !paper_to_be.et_alia diff --git a/code/modules/modular_computers/file_system/programs/jobmanagement.dm b/code/modules/modular_computers/file_system/programs/jobmanagement.dm index 6c091a4a4f9d..cb059cf9663e 100644 --- a/code/modules/modular_computers/file_system/programs/jobmanagement.dm +++ b/code/modules/modular_computers/file_system/programs/jobmanagement.dm @@ -15,7 +15,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) var/change_position_cooldown = 30 ///Jobs blacklisted from having their slots edited. - var/list/blacklisted = list( + var/static/list/blacklisted = list( JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_HEAD_OF_SECURITY, @@ -36,7 +36,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) var/list/opened_positions = list() /datum/computer_file/program/job_management/New() - ..() + . = ..() change_position_cooldown = CONFIG_GET(number/id_console_jobslot_delay) @@ -67,9 +67,6 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) /datum/computer_file/program/job_management/ui_act(action, params, datum/tgui/ui) - . = ..() - if(.) - return var/obj/item/card/id/user_id = computer.computer_id_slot if(!user_id || !(ACCESS_CHANGE_IDS in user_id.access)) return TRUE diff --git a/code/modules/modular_computers/file_system/programs/maintenance/_maintenance_program.dm b/code/modules/modular_computers/file_system/programs/maintenance/_maintenance_program.dm index 39edf659cffa..25a2d1ad941b 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/_maintenance_program.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/_maintenance_program.dm @@ -7,7 +7,4 @@ /datum/computer_file/program/maintenance filetype = "MNT" available_on_ntnet = FALSE - -/datum/computer_file/program/maintenance/clone(rename = FALSE) - . = ..() - qdel(src) + unique_copy = TRUE diff --git a/code/modules/modular_computers/file_system/programs/maintenance/camera.dm b/code/modules/modular_computers/file_system/programs/maintenance/camera.dm index 548dda4a750a..50276a1bcd81 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/camera.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/camera.dm @@ -49,9 +49,6 @@ return data /datum/computer_file/program/maintenance/camera/ui_act(action, params, datum/tgui/ui) - . = ..() - if(.) - return var/mob/living/user = usr switch(action) if("print_photo") diff --git a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm index 77dfc8f4c284..9f8971fb7fa5 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm @@ -42,7 +42,4 @@ return controlled_suit?.ui_static_data() /datum/computer_file/program/maintenance/modsuit_control/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - if(.) - return - controlled_suit.ui_act(action, params, ui, state) + return controlled_suit?.ui_act(action, params, ui, state) diff --git a/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm b/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm index 5162aa7ddc0d..4c332d0d7d80 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm @@ -18,9 +18,11 @@ var/mob/living/carbon/carbon = tapped_atom carbon.visible_message(span_notice("[user] analyzes [tapped_atom]'s vitals.")) last_record = healthscan(user, carbon, 1, tochat = FALSE) + var/datum/tgui/active_ui = SStgui.get_open_ui(user, computer) + if(active_ui) + active_ui.send_full_update(force = TRUE) -/datum/computer_file/program/maintenance/phys_scanner/ui_data(mob/user) +/datum/computer_file/program/maintenance/phys_scanner/ui_static_data(mob/user) var/list/data = list() - data["last_record"] = last_record return data diff --git a/code/modules/modular_computers/file_system/programs/maintenance/themes.dm b/code/modules/modular_computers/file_system/programs/maintenance/themes.dm index 0248997e7954..fe6a25f15b1d 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/themes.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/themes.dm @@ -32,7 +32,6 @@ theme_app.imported_themes += theme_name theme_app.size += size qdel(src) - return ..() /datum/computer_file/program/maintenance/theme/cat theme_name = CAT_THEME_NAME diff --git a/code/modules/modular_computers/file_system/programs/newscasterapp.dm b/code/modules/modular_computers/file_system/programs/newscasterapp.dm index 0f0861ad9f1a..47e4f65d48f0 100644 --- a/code/modules/modular_computers/file_system/programs/newscasterapp.dm +++ b/code/modules/modular_computers/file_system/programs/newscasterapp.dm @@ -22,16 +22,10 @@ return ..() /datum/computer_file/program/newscaster/ui_data(mob/user) - var/list/data = list() - data += newscaster_ui.ui_data(user) - return data + return newscaster_ui.ui_data(user) /datum/computer_file/program/newscaster/ui_static_data(mob/user) - var/list/data = newscaster_ui.ui_static_data(user) - return data + return newscaster_ui.ui_static_data(user) -/datum/computer_file/program/newscaster/ui_act(action, params, datum/tgui/ui) - . = ..() - if(.) - return - return newscaster_ui.ui_act(action, params, ui) +/datum/computer_file/program/newscaster/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + return newscaster_ui.ui_act(action, params, ui, state) diff --git a/code/modules/modular_computers/file_system/programs/notepad.dm b/code/modules/modular_computers/file_system/programs/notepad.dm index aa5cbf94f35d..2e1eb52add5e 100644 --- a/code/modules/modular_computers/file_system/programs/notepad.dm +++ b/code/modules/modular_computers/file_system/programs/notepad.dm @@ -13,13 +13,10 @@ bringing you the best in electronics and software since 2467!" /datum/computer_file/program/notepad/ui_act(action, list/params, datum/tgui/ui) - . = ..() - if(.) - return switch(action) if("UpdateNote") written_note = params["newnote"] - return UI_UPDATE + return TRUE /datum/computer_file/program/notepad/ui_data(mob/user) var/list/data = list() diff --git a/code/modules/modular_computers/file_system/programs/nt_pay.dm b/code/modules/modular_computers/file_system/programs/nt_pay.dm index 0204f704fe5b..bec8cebc05e1 100644 --- a/code/modules/modular_computers/file_system/programs/nt_pay.dm +++ b/code/modules/modular_computers/file_system/programs/nt_pay.dm @@ -18,9 +18,6 @@ var/wanted_token /datum/computer_file/program/nt_pay/ui_act(action, list/params, datum/tgui/ui) - . = ..() - if(.) - return switch(action) if("Transaction") token = params["token"] diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm index 852987dc4400..efa61b2630cd 100644 --- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm @@ -98,10 +98,7 @@ download_netspeed = NTNETSPEED_ETHERNET download_completion += download_netspeed -/datum/computer_file/program/ntnetdownload/ui_act(action, params) - . = ..() - if(.) - return +/datum/computer_file/program/ntnetdownload/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) if("PRG_downloadfile") if(!downloaded_file) @@ -150,7 +147,7 @@ "installed" = !!computer.find_file_by_name(programs.filename), "compatible" = check_compatibility(programs), "size" = programs.size, - "access" = (computer.obj_flags & EMAGGED) && programs.available_on_syndinet ? TRUE : programs.can_run(user,transfer = TRUE, access = access), + "access" = (computer.obj_flags & EMAGGED) && programs.available_on_syndinet ? TRUE : programs.can_run(user, transfer = TRUE, access = access), "verifiedsource" = programs.available_on_ntnet, )) @@ -165,6 +162,6 @@ return TRUE return FALSE -/datum/computer_file/program/ntnetdownload/kill_program(forced) +/datum/computer_file/program/ntnetdownload/kill_program(mob/user) abort_file_download() return ..() diff --git a/code/modules/modular_computers/file_system/programs/ntmessenger.dm b/code/modules/modular_computers/file_system/programs/ntmessenger.dm index e40dd4eaacb1..bb6bcaad592a 100644 --- a/code/modules/modular_computers/file_system/programs/ntmessenger.dm +++ b/code/modules/modular_computers/file_system/programs/ntmessenger.dm @@ -3,7 +3,6 @@ filedesc = "Direct Messenger" category = PROGRAM_CATEGORY_MISC program_icon_state = "command" - program_state = PROGRAM_STATE_BACKGROUND extended_desc = "This program allows old-school communication with other modular devices." size = 0 undeletable = TRUE // It comes by default in tablets, can't be downloaded, takes no space and should obviously not be able to be deleted. @@ -105,9 +104,6 @@ return GLOB.default_state /datum/computer_file/program/messenger/ui_act(action, list/params, datum/tgui/ui) - . = ..() - if(.) - return switch(action) if("PDA_ringSet") var/new_ringtone = tgui_input_text(usr, "Enter a new ringtone", "Ringtone", ringtone, MESSENGER_RINGTONE_MAX_LENGTH) @@ -119,27 +115,27 @@ return ringtone = new_ringtone - return UI_UPDATE + return TRUE if("PDA_ringer_status") ringer_status = !ringer_status - return UI_UPDATE + return TRUE if("PDA_sAndR") sending_and_receiving = !sending_and_receiving - return UI_UPDATE + return TRUE if("PDA_viewMessages") viewing_messages = !viewing_messages - return UI_UPDATE + return TRUE if("PDA_clearMessages") messages = list() - return UI_UPDATE + return TRUE if("PDA_changeSortStyle") sort_by_job = !sort_by_job - return UI_UPDATE + return TRUE if("PDA_sendEveryone") if(!sending_and_receiving) @@ -158,7 +154,7 @@ if(targets.len > 0) send_message(usr, targets, TRUE) - return UI_UPDATE + return TRUE if("PDA_sendMessage") if(!sending_and_receiving) @@ -182,19 +178,20 @@ var/obj/item/computer_disk/virus/disk = computer.inserted_disk if(istype(disk)) disk.send_virus(computer, target, usr) - return UI_UPDATE + update_static_data(usr, ui) + return TRUE send_message(usr, list(target)) - return UI_UPDATE + return TRUE if("PDA_clearPhoto") saved_image = null photo_path = null - return UI_UPDATE + return TRUE if("PDA_toggleVirus") sending_virus = !sending_virus - return UI_UPDATE + return TRUE if("PDA_selectPhoto") if(!issilicon(usr)) @@ -210,18 +207,15 @@ return TRUE /datum/computer_file/program/messenger/ui_static_data(mob/user) - var/list/data = ..() - + var/list/data = list() data["owner"] = computer.saved_identification - data["sortByJob"] = sort_by_job - data["isSilicon"] = issilicon(user) - return data /datum/computer_file/program/messenger/ui_data(mob/user) var/list/data = list() - data["messages"] = messages + data["sortByJob"] = sort_by_job + data["isSilicon"] = issilicon(user) data["messengers"] = ScrubMessengerList() data["ringer_status"] = ringer_status data["sending_and_receiving"] = sending_and_receiving @@ -233,7 +227,6 @@ if(disk && istype(disk)) data["virus_attach"] = TRUE data["sending_virus"] = sending_virus - return data ////////////////////// @@ -420,7 +413,7 @@ if(!computer.turn_on(usr, open_ui = FALSE)) return if(computer.active_program != src) - if(!computer.open_program(usr, src)) + if(!computer.open_program(usr, src, open_ui = FALSE)) return if(!href_list["close"] && usr.can_perform_action(computer, FORBID_TELEKINESIS_REACH)) switch(href_list["choice"]) diff --git a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm index 3e7b8f19f134..aa780fc3cf8e 100644 --- a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm @@ -31,8 +31,10 @@ ///Cooldown timer between pings. COOLDOWN_DECLARE(ping_cooldown) -/datum/computer_file/program/chatclient/New() - username = "DefaultUser[rand(100, 999)]" +/datum/computer_file/program/chatclient/on_install(datum/computer_file/source, obj/item/modular_computer/computer_installing) + . = ..() + if(!username) + username = "DefaultUser[rand(100, 999)]" /datum/computer_file/program/chatclient/Destroy() for(var/datum/ntnet_conversation/discussion as anything in conversations) @@ -47,10 +49,7 @@ active_channel = new_converstaion.id return new_converstaion -/datum/computer_file/program/chatclient/ui_act(action, params) - . = ..() - if(.) - return +/datum/computer_file/program/chatclient/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) var/datum/ntnet_conversation/channel = SSmodular_computers.get_chat_channel_by_id(active_channel) var/authed = FALSE if(channel && ((channel.channel_operator == src) || netadmin_mode)) @@ -101,13 +100,13 @@ if(netadmin_mode) netadmin_mode = FALSE channel?.add_client(src) - return UI_UPDATE + return TRUE var/mob/living/user = usr - if(can_run(user, TRUE, ACCESS_NETWORK)) + if(can_run(user, TRUE, list(ACCESS_NETWORK))) for(var/datum/ntnet_conversation/channels as anything in SSmodular_computers.chat_channels) channels.remove_client(src) netadmin_mode = TRUE - return UI_UPDATE + return TRUE if("PRG_changename") var/newname = reject_bad_chattext(params["new_name"], USERNAME_SIZE) newname = replacetext(newname, " ", "_") @@ -117,7 +116,7 @@ if(src in anychannel.active_clients) anychannel.add_status_message("[username] is now known as [newname].") username = newname - return UI_UPDATE + return TRUE if("PRG_savelog") if(!channel) return @@ -179,7 +178,7 @@ /datum/computer_file/program/chatclient/process_tick(seconds_per_tick) . = ..() var/datum/ntnet_conversation/channel = SSmodular_computers.get_chat_channel_by_id(active_channel) - if(program_state != PROGRAM_STATE_KILLED) + if(src in computer.idle_threads) ui_header = "ntnrc_idle.gif" if(channel) // Remember the last message. If there is no message in the channel remember null. @@ -201,7 +200,7 @@ channel.offline_clients.Remove(src) channel.active_clients.Add(src) -/datum/computer_file/program/chatclient/kill_program(forced = FALSE) +/datum/computer_file/program/chatclient/kill_program(mob/user) for(var/datum/ntnet_conversation/channel as anything in SSmodular_computers.chat_channels) channel.go_offline(src) active_channel = null @@ -209,16 +208,11 @@ /datum/computer_file/program/chatclient/ui_static_data(mob/user) var/list/data = list() - data["can_admin"] = can_run(user, FALSE, ACCESS_NETWORK) data["selfref"] = REF(src) //used to verify who is you, as usernames can be copied. - data["username"] = username - data["adminmode"] = netadmin_mode return data /datum/computer_file/program/chatclient/ui_data(mob/user) var/list/data = list() - if(!SSmodular_computers.chat_channels) - return data var/list/all_channels = list() for(var/datum/ntnet_conversation/conversations as anything in SSmodular_computers.chat_channels) @@ -244,7 +238,8 @@ authed = TRUE clients.Add(list(list( "name" = channel_client.username, - "status" = channel_client.program_state, + "online" = (channel_client == channel_client.computer.active_program), + "away" = (channel_client in channel_client.computer.idle_threads), "muted" = (channel_client in channel.muted_clients), "operator" = (channel.channel_operator == channel_client), "ref" = REF(channel_client), @@ -261,6 +256,9 @@ data["messages"] = messages data["is_operator"] = (channel.channel_operator == src) || netadmin_mode + data["username"] = username + data["adminmode"] = netadmin_mode + data["can_admin"] = can_run(user, FALSE, list(ACCESS_NETWORK)) data["authed"] = authed return data diff --git a/code/modules/modular_computers/file_system/programs/portrait_printer.dm b/code/modules/modular_computers/file_system/programs/portrait_printer.dm index b7ff4ca20a17..68c94e87e8d3 100644 --- a/code/modules/modular_computers/file_system/programs/portrait_printer.dm +++ b/code/modules/modular_computers/file_system/programs/portrait_printer.dm @@ -43,10 +43,7 @@ get_asset_datum(/datum/asset/simple/portraits) ) -/datum/computer_file/program/portrait_printer/ui_act(action, params) - . = ..() - if(.) - return +/datum/computer_file/program/portrait_printer/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) if("search") if(search_string != params["to_search"]) diff --git a/code/modules/modular_computers/file_system/programs/radar.dm b/code/modules/modular_computers/file_system/programs/radar.dm index 5f6fde5736b4..811adb0337a3 100644 --- a/code/modules/modular_computers/file_system/programs/radar.dm +++ b/code/modules/modular_computers/file_system/programs/radar.dm @@ -29,7 +29,7 @@ return return FALSE -/datum/computer_file/program/radar/kill_program(forced = FALSE) +/datum/computer_file/program/radar/kill_program(mob/user) objects = list() selected = null STOP_PROCESSING(SSfastprocess, src) @@ -62,10 +62,7 @@ data["target"] = trackinfo return data -/datum/computer_file/program/radar/ui_act(action, params) - . = ..() - if(.) - return +/datum/computer_file/program/radar/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) if("selecttarget") selected = params["ref"] @@ -318,7 +315,7 @@ RegisterSignal(SSdcs, COMSIG_GLOB_NUKE_DEVICE_ARMED, PROC_REF(on_nuke_armed)) -/datum/computer_file/program/radar/fission360/kill_program(forced) +/datum/computer_file/program/radar/fission360/kill_program(mob/user) UnregisterSignal(SSdcs, COMSIG_GLOB_NUKE_DEVICE_ARMED) return ..() diff --git a/code/modules/modular_computers/file_system/programs/records.dm b/code/modules/modular_computers/file_system/programs/records.dm index 0d8cec963785..960702d608cc 100644 --- a/code/modules/modular_computers/file_system/programs/records.dm +++ b/code/modules/modular_computers/file_system/programs/records.dm @@ -63,9 +63,7 @@ return all_records - - -/datum/computer_file/program/records/ui_data(mob/user) +/datum/computer_file/program/records/ui_static_data(mob/user) var/list/data = list() data["records"] = GetRecordsReadable() data["mode"] = mode diff --git a/code/modules/modular_computers/file_system/programs/robocontrol.dm b/code/modules/modular_computers/file_system/programs/robocontrol.dm index baf6cafd7a2c..52bfafdcf8e9 100644 --- a/code/modules/modular_computers/file_system/programs/robocontrol.dm +++ b/code/modules/modular_computers/file_system/programs/robocontrol.dm @@ -14,7 +14,7 @@ ///Access granted by the used to summon robots. var/list/current_access = list() ///List of all ping types you can annoy drones with. - var/list/drone_ping_types = list( + var/static/list/drone_ping_types = list( "Low", "Medium", "High", @@ -84,18 +84,15 @@ return data /datum/computer_file/program/robocontrol/ui_act(action, list/params, datum/tgui/ui) - . = ..() - if (.) - return var/mob/current_user = ui.user var/obj/item/card/id/id_card = computer?.computer_id_slot - var/list/standard_actions = list( + var/static/list/standard_actions = list( "patroloff", "patrolon", "ejectpai", ) - var/list/MULE_actions = list( + var/static/list/MULE_actions = list( "stop", "go", "home", @@ -110,13 +107,13 @@ ) var/mob/living/simple_animal/bot/simple_bot = locate(params["robot"]) in GLOB.bots_list if (action in standard_actions) - simple_bot.bot_control(action, current_user, current_access) + simple_bot.bot_control(action, current_user, id_card?.GetAccess()) if (action in MULE_actions) - simple_bot.bot_control(action, current_user, current_access, TRUE) + simple_bot.bot_control(action, current_user, id_card?.GetAccess(), TRUE) switch(action) if("summon") - simple_bot.bot_control(action, current_user, id_card ? id_card.access : current_access) + simple_bot.bot_control(action, current_user, id_card ? id_card.access : id_card?.GetAccess()) if("ejectcard") if(!computer || !computer.computer_id_slot) return diff --git a/code/modules/modular_computers/file_system/programs/robotact.dm b/code/modules/modular_computers/file_system/programs/robotact.dm index b218aad9113d..e64691ccba2a 100644 --- a/code/modules/modular_computers/file_system/programs/robotact.dm +++ b/code/modules/modular_computers/file_system/programs/robotact.dm @@ -84,10 +84,7 @@ data["borgUpgrades"] = cyborg.upgrades return data -/datum/computer_file/program/robotact/ui_act(action, params) - . = ..() - if(.) - return +/datum/computer_file/program/robotact/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) //Implied type, memes var/obj/item/modular_computer/pda/silicon/tablet = computer var/mob/living/silicon/robot/cyborg = tablet.silicon_owner @@ -140,17 +137,3 @@ return if(cyborg.emagged || istype(cyborg, /mob/living/silicon/robot/model/syndicate)) //This option shouldn't even be showing otherwise cyborg.self_destruct(cyborg) - -/** - * Forces a full update of the UI, if currently open. - * - * Forces an update that includes refreshing ui_static_data. Called by - * law changes and borg log additions. - */ -/datum/computer_file/program/robotact/proc/force_full_update() - if(!istype(computer, /obj/item/modular_computer/pda/silicon)) - return - var/obj/item/modular_computer/pda/silicon/tablet = computer - var/datum/tgui/active_ui = SStgui.get_open_ui(tablet.silicon_owner, src) - if(active_ui) - active_ui.send_full_update() diff --git a/code/modules/modular_computers/file_system/programs/secureye.dm b/code/modules/modular_computers/file_system/programs/secureye.dm index dc680c435f90..1fd00e163345 100644 --- a/code/modules/modular_computers/file_system/programs/secureye.dm +++ b/code/modules/modular_computers/file_system/programs/secureye.dm @@ -14,18 +14,42 @@ tgui_id = "NtosSecurEye" program_icon = "eye" + ///Boolean on whether or not the app will make noise when flipping around the channels. + var/spying = FALSE + var/list/network = list("ss13") + ///List of weakrefs of all users watching the program. + var/list/concurrent_users = list() + /// Weakref to the active camera var/datum/weakref/camera_ref /// The turf where the camera was last updated. var/turf/last_camera_turf - var/list/concurrent_users = list() // Stuff needed to render the map var/atom/movable/screen/map_view/cam_screen + /// All the plane masters that need to be applied. var/atom/movable/screen/background/cam_background -/datum/computer_file/program/secureye/New() + ///Internal tracker used to find a specific person and keep them on cameras. + var/datum/trackable/internal_tracker + +///Syndicate subtype that has no access restrictions and is available on Syndinet +/datum/computer_file/program/secureye/syndicate + filename = "syndeye" + filedesc = "SyndEye" + extended_desc = "This program allows for illegal access to security camera networks." + transfer_access = list() + available_on_ntnet = FALSE + available_on_syndinet = TRUE + requires_ntnet = FALSE + usage_flags = PROGRAM_ALL + unique_copy = TRUE + + network = list("ss13", "mine", "rd", "labor", "ordnance", "minisat") + spying = TRUE + +/datum/computer_file/program/secureye/on_install(datum/computer_file/source, obj/item/modular_computer/computer_installing) . = ..() // Map name has to start and end with an A-Z character, // and definitely NOT with a square bracket or even a number. @@ -44,26 +68,28 @@ /datum/computer_file/program/secureye/Destroy() QDEL_NULL(cam_screen) QDEL_NULL(cam_background) + QDEL_NULL(internal_tracker) + last_camera_turf = null return ..() -/datum/computer_file/program/secureye/ui_interact(mob/user, datum/tgui/ui) - // Update UI - ui = SStgui.try_update_ui(user, src, ui) +/datum/computer_file/program/secureye/kill_program(mob/user) + if(user) + ui_close(user) + return ..() +/datum/computer_file/program/secureye/ui_interact(mob/user, datum/tgui/ui) // Update the camera, showing static if necessary and updating data if the location has moved. update_active_camera_screen() - if(!ui) - var/user_ref = REF(user) - var/is_living = isliving(user) - // Ghosts shouldn't count towards concurrent users, which produces - // an audible terminal_on click. - if(is_living) - concurrent_users += user_ref - // Register map objects - cam_screen.display_to(user) - user.client.register_map_obj(cam_background) - return ..() + var/user_ref = REF(user) + var/is_living = isliving(user) + // Ghosts shouldn't count towards concurrent users, which produces + // an audible terminal_on click. + if(is_living) + concurrent_users += user_ref + // Register map objects + cam_screen.display_to(user) + user.client.register_map_obj(cam_background) /datum/computer_file/program/secureye/ui_status(mob/user) . = ..() @@ -73,49 +99,81 @@ /datum/computer_file/program/secureye/ui_data() var/list/data = list() - data["network"] = network data["activeCamera"] = null var/obj/machinery/camera/active_camera = camera_ref?.resolve() if(active_camera) data["activeCamera"] = list( name = active_camera.c_tag, + ref = REF(active_camera), status = active_camera.status, ) return data -/datum/computer_file/program/secureye/ui_static_data() +/datum/computer_file/program/secureye/ui_static_data(mob/user) var/list/data = list() + data["network"] = network data["mapRef"] = cam_screen.assigned_map - var/list/cameras = get_available_cameras() + data["can_spy"] = !!spying + var/list/cameras = get_camera_list(network) data["cameras"] = list() for(var/i in cameras) var/obj/machinery/camera/C = cameras[i] data["cameras"] += list(list( name = C.c_tag, + ref = REF(C), )) return data -/datum/computer_file/program/secureye/ui_act(action, params) +/datum/computer_file/program/secureye/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return - if(action == "switch_camera") - var/c_tag = format_text(params["name"]) - var/list/cameras = get_available_cameras() - var/obj/machinery/camera/selected_camera = cameras[c_tag] - camera_ref = WEAKREF(selected_camera) - playsound(src, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) - - if(!selected_camera) + switch(action) + if("switch_camera") + var/obj/machinery/camera/selected_camera = locate(params["camera"]) in GLOB.cameranet.cameras + if(selected_camera) + camera_ref = WEAKREF(selected_camera) + else + camera_ref = null + if(!spying) + playsound(computer, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) + if(isnull(camera_ref)) + return TRUE + if(internal_tracker) + internal_tracker.reset_tracking() + + update_active_camera_screen() return TRUE - update_active_camera_screen() + if("start_tracking") + if(!internal_tracker) + internal_tracker = new(src) + RegisterSignal(internal_tracker, COMSIG_TRACKABLE_TRACKING_TARGET, PROC_REF(on_track_target)) + internal_tracker.track_input(usr) + return TRUE - return TRUE +/datum/computer_file/program/secureye/proc/on_track_target(datum/trackable/source, mob/living/target) + SIGNAL_HANDLER + var/datum/camerachunk/target_camerachunk = GLOB.cameranet.getTurfVis(get_turf(target)) + if(!target_camerachunk) + CRASH("[src] was able to track [target] through /datum/trackable, but was not on a visible turf to cameras.") + for(var/obj/machinery/camera/cameras as anything in target_camerachunk.cameras["[target.z]"]) + var/found_target = locate(target) in cameras.can_see() + if(!found_target) + continue + var/new_camera = WEAKREF(cameras) + if(camera_ref == new_camera) + return + camera_ref = new_camera + update_active_camera_screen() + return /datum/computer_file/program/secureye/ui_close(mob/user) . = ..() + //don't track anyone while we're shutting off. + if(internal_tracker) + internal_tracker.reset_tracking() var/user_ref = REF(user) var/is_living = isliving(user) // Living creature or not, we remove you anyway. @@ -125,7 +183,9 @@ // Turn off the console if(length(concurrent_users) == 0 && is_living) camera_ref = null - playsound(src, 'sound/machines/terminal_off.ogg', 25, FALSE) + last_camera_turf = null + if(!spying) + playsound(computer, 'sound/machines/terminal_off.ogg', 25, FALSE) /datum/computer_file/program/secureye/proc/update_active_camera_screen() var/obj/machinery/camera/active_camera = camera_ref?.resolve() @@ -168,26 +228,4 @@ cam_background.icon_state = "scanline2" cam_background.fill_rect(1, 1, DEFAULT_MAP_SIZE, DEFAULT_MAP_SIZE) -// Returns the list of cameras accessible from this computer -/datum/computer_file/program/secureye/proc/get_available_cameras() - var/list/L = list() - for (var/obj/machinery/camera/cam as anything in GLOB.cameranet.cameras) - //Get the camera's turf in case it's inside something like a borg - var/turf/camera_turf = get_turf(cam) - if(!is_station_level(camera_turf.z))//Only show station cameras. - continue - L.Add(cam) - var/list/camlist = list() - for(var/obj/machinery/camera/cam in L) - if(!cam.network) - stack_trace("Camera in a cameranet has no camera network") - continue - if(!(islist(cam.network))) - stack_trace("Camera in a cameranet has a non-list camera network") - continue - var/list/tempnetwork = cam.network & network - if(tempnetwork.len) - camlist["[cam.c_tag]"] = cam - return camlist - #undef DEFAULT_MAP_SIZE diff --git a/code/modules/modular_computers/file_system/programs/signalcommander.dm b/code/modules/modular_computers/file_system/programs/signalcommander.dm index a92d744e5259..6d636bab370a 100644 --- a/code/modules/modular_computers/file_system/programs/signalcommander.dm +++ b/code/modules/modular_computers/file_system/programs/signalcommander.dm @@ -19,7 +19,7 @@ . = ..() set_frequency(signal_frequency) -/datum/computer_file/program/signal_commander/kill_program(forced) +/datum/computer_file/program/signal_commander/kill_program(mob/user) . = ..() SSradio.remove_object(computer, signal_frequency) @@ -32,9 +32,6 @@ return data /datum/computer_file/program/signal_commander/ui_act(action, list/params) - . = ..() - if(.) - return switch(action) if("signal") INVOKE_ASYNC(src, PROC_REF(signal)) diff --git a/code/modules/modular_computers/file_system/programs/skill_tracker.dm b/code/modules/modular_computers/file_system/programs/skill_tracker.dm index a3ba60acde86..c68cffb33740 100644 --- a/code/modules/modular_computers/file_system/programs/skill_tracker.dm +++ b/code/modules/modular_computers/file_system/programs/skill_tracker.dm @@ -51,9 +51,6 @@ return null /datum/computer_file/program/skill_tracker/ui_act(action, params, datum/tgui/ui) - . = ..() - if(.) - return switch(action) if("PRG_reward") var/skill_type = find_skilltype(params["skill"]) diff --git a/code/modules/modular_computers/file_system/programs/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/sm_monitor.dm index 0aebf2271994..a29c670313c7 100644 --- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/sm_monitor.dm @@ -22,7 +22,7 @@ refresh() /// Apparently destroy calls this [/datum/computer_file/Destroy]. Here just to clean our references. -/datum/computer_file/program/supermatter_monitor/kill_program(forced = FALSE) +/datum/computer_file/program/supermatter_monitor/kill_program(mob/user) for(var/supermatter in supermatters) clear_supermatter(supermatter) return ..() @@ -54,10 +54,7 @@ data["focus_uid"] = focused_supermatter?.uid return data -/datum/computer_file/program/supermatter_monitor/ui_act(action, params) - . = ..() - if(.) - return +/datum/computer_file/program/supermatter_monitor/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) if("PRG_refresh") refresh() diff --git a/code/modules/modular_computers/file_system/programs/statusdisplay.dm b/code/modules/modular_computers/file_system/programs/statusdisplay.dm index 2f29775d77b2..d55bafb2e9c1 100644 --- a/code/modules/modular_computers/file_system/programs/statusdisplay.dm +++ b/code/modules/modular_computers/file_system/programs/statusdisplay.dm @@ -74,9 +74,6 @@ log_game("[key_name(usr)] has changed the station status display message to \"[picture]\" [loc_name(usr)]") /datum/computer_file/program/status/ui_act(action, list/params, datum/tgui/ui) - . = ..() - if(.) - return switch(action) if("setStatusMessage") upper_text = reject_bad_text(params["upperText"] || "", MAX_STATUS_LINE_LENGTH) @@ -89,7 +86,6 @@ /datum/computer_file/program/status/ui_static_data(mob/user) var/list/data = list() data["maxStatusLineLength"] = MAX_STATUS_LINE_LENGTH - return data /datum/computer_file/program/status/ui_data(mob/user) diff --git a/code/modules/modular_computers/file_system/programs/techweb.dm b/code/modules/modular_computers/file_system/programs/techweb.dm index 65e2070be06b..52129d39997e 100644 --- a/code/modules/modular_computers/file_system/programs/techweb.dm +++ b/code/modules/modular_computers/file_system/programs/techweb.dm @@ -89,9 +89,6 @@ return data /datum/computer_file/program/science/ui_act(action, list/params) - . = ..() - if (.) - return // Check if the console is locked to block any actions occuring if (locked && action != "toggleLock") computer.say("Console is locked, cannot perform further actions.") diff --git a/code/modules/modular_computers/file_system/programs/theme_selector.dm b/code/modules/modular_computers/file_system/programs/theme_selector.dm index 45972a76136b..7700f5089245 100644 --- a/code/modules/modular_computers/file_system/programs/theme_selector.dm +++ b/code/modules/modular_computers/file_system/programs/theme_selector.dm @@ -24,10 +24,7 @@ return data -/datum/computer_file/program/themeify/ui_act(action, params) - . = ..() - if(.) - return +/datum/computer_file/program/themeify/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) if("PRG_change_theme") var/selected_theme = params["selected_theme"] diff --git a/code/modules/modular_computers/file_system/programs/wirecarp.dm b/code/modules/modular_computers/file_system/programs/wirecarp.dm index f33660a3752d..9045fcc76b2a 100644 --- a/code/modules/modular_computers/file_system/programs/wirecarp.dm +++ b/code/modules/modular_computers/file_system/programs/wirecarp.dm @@ -12,9 +12,6 @@ program_icon = "network-wired" /datum/computer_file/program/ntnetmonitor/ui_act(action, list/params, datum/tgui/ui) - . = ..() - if(.) - return switch(action) if("resetIDS") SSmodular_computers.intrusion_detection_alarm = FALSE diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index e98ec70669f8..ea0fb8f64a31 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -699,6 +699,17 @@ advanced_html = advanced_html, ) +/// Returns the raw contents of the input as html, with **ZERO SANITIZATION** +/datum/paper_input/proc/to_raw_html() + var/final = raw_text + if(font) + final = "[final]" + if(colour) + final = "[final]" + if(bold) + final = "[final]" + return final + /// A single instance of a saved stamp on paper. /datum/paper_stamp /// Asset class of the for rendering in tgui diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index b6eb18c6231f..713d2699a4c6 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -46,6 +46,7 @@ . = ..() toner_cartridge = new(src) setup_components() + AddElement(/datum/element/elevation, pixel_shift = 8) //enough to look like your bums are on the machine. /// Simply adds the necessary components for this to function. /obj/machinery/photocopier/proc/setup_components() diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index fb678facf85c..57806cd8178e 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -189,8 +189,8 @@ var/blueprints = FALSE var/clone_area = SSmapping.request_turf_block_reservation(size_x * 2 + 1, size_y * 2 + 1, 1) - var/width = size_x * 2 - var/height = size_y * 2 + var/width = size_x * 2 + 1 + var/height = size_y * 2 + 1 for(var/turf/placeholder as anything in CORNER_BLOCK_OFFSET(target_turf, width, height, -size_x, -size_y)) while(istype(placeholder, /turf/open/openspace)) //Multi-z photography placeholder = GET_TURF_BELOW(placeholder) diff --git a/code/modules/plumbing/plumbers/_plumb_machinery.dm b/code/modules/plumbing/plumbers/_plumb_machinery.dm index bce4fcc1e3e8..108382dc98f0 100644 --- a/code/modules/plumbing/plumbers/_plumb_machinery.dm +++ b/code/modules/plumbing/plumbers/_plumb_machinery.dm @@ -37,9 +37,9 @@ return TOOL_ACT_TOOLTYPE_SUCCESS /obj/machinery/plumbing/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) - to_chat(user, span_notice("You start furiously plunging [name].")) + user.balloon_alert_to_viewers("furiously plunging...") if(do_after(user, 30, target = src)) - to_chat(user, span_notice("You finish plunging the [name].")) + user.balloon_alert_to_viewers("finished plunging") reagents.expose(get_turf(src), TOUCH) //splash on the floor reagents.clear_reagents() diff --git a/code/modules/power/apc/apc_malf.dm b/code/modules/power/apc/apc_malf.dm index 77dfc3f5a0eb..f13b588842a8 100644 --- a/code/modules/power/apc/apc_malf.dm +++ b/code/modules/power/apc/apc_malf.dm @@ -77,26 +77,29 @@ disk_pinpointers.alert = FALSE /obj/machinery/power/apc/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card) + . = ..() + if(!.) + return if(card.AI) to_chat(user, span_warning("[card] is already occupied!")) - return + return FALSE if(!occupier) to_chat(user, span_warning("There's nothing in [src] to transfer!")) - return + return FALSE if(!occupier.mind || !occupier.client) to_chat(user, span_warning("[occupier] is either inactive or destroyed!")) - return + return FALSE if(!occupier.parent.stat) to_chat(user, span_warning("[occupier] is refusing all attempts at transfer!") ) - return + return FALSE if(transfer_in_progress) to_chat(user, span_warning("There's already a transfer in progress!")) - return + return FALSE if(interaction != AI_TRANS_TO_CARD || occupier.stat) - return + return FALSE var/turf/user_turf = get_turf(user) if(!user_turf) - return + return FALSE transfer_in_progress = TRUE user.visible_message(span_notice("[user] slots [card] into [src]..."), span_notice("Transfer process initiated. Sending request for AI approval...")) playsound(src, 'sound/machines/click.ogg', 50, TRUE) @@ -105,21 +108,21 @@ to_chat(user, span_danger("AI denied transfer request. Process terminated.")) playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE) transfer_in_progress = FALSE - return + return FALSE if(user.loc != user_turf) to_chat(user, span_danger("Location changed. Process terminated.")) to_chat(occupier, span_warning("[user] moved away! Transfer canceled.")) transfer_in_progress = FALSE - return + return FALSE to_chat(user, span_notice("AI accepted request. Transferring stored intelligence to [card]...")) to_chat(occupier, span_notice("Transfer starting. You will be moved to [card] shortly.")) if(!do_after(user, 50, target = src)) to_chat(occupier, span_warning("[user] was interrupted! Transfer canceled.")) transfer_in_progress = FALSE - return + return FALSE if(!occupier || !card) transfer_in_progress = FALSE - return + return FALSE user.visible_message(span_notice("[user] transfers [occupier] to [card]!"), span_notice("Transfer complete! [occupier] is now stored in [card].")) to_chat(occupier, span_notice("Transfer complete! You've been stored in [user]'s [card.name].")) occupier.forceMove(card) @@ -128,4 +131,4 @@ occupier.cancel_camera() occupier = null transfer_in_progress = FALSE - return + return TRUE diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index a35f5f9db9ee..7c27d3e7ab59 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -184,12 +184,6 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri return ..() -/obj/structure/cable/examine(mob/user) - . = ..() - if(isobserver(user)) - . += get_power_info() - - /obj/structure/cable/proc/handlecable(obj/item/W, mob/user, params) var/turf/T = get_turf(src) if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 66d6366cd4c0..fa85c19f05a8 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -433,7 +433,7 @@ name = "EMP-proof slime core" desc = "A yellow slime core infused with plasma. Its organic nature makes it immune to EMPs." icon = 'icons/mob/simple/slimes.dmi' - icon_state = "yellow slime extract" + icon_state = "yellow_slime_extract" custom_materials = null maxcharge = 5000 charge_light_type = null diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm deleted file mode 100644 index 5442131817b8..000000000000 --- a/code/modules/power/generator.dm +++ /dev/null @@ -1,232 +0,0 @@ -/obj/machinery/power/generator - name = "thermoelectric generator" - desc = "It's a high efficiency thermoelectric generator." - icon_state = "teg" - density = TRUE - use_power = NO_POWER_USE - - circuit = /obj/item/circuitboard/machine/generator - - var/obj/machinery/atmospherics/components/binary/circulator/cold_circ - var/obj/machinery/atmospherics/components/binary/circulator/hot_circ - - var/lastgen = 0 - var/lastgenlev = -1 - var/lastcirc = "00" - - -/obj/machinery/power/generator/Initialize(mapload) - . = ..() - AddComponent(/datum/component/simple_rotation) - find_circs() - connect_to_network() - SSair.start_processing_machine(src) - update_appearance() - -/obj/machinery/power/generator/Destroy() - kill_circs() - SSair.stop_processing_machine(src) - return ..() - -/obj/machinery/power/generator/update_overlays() - . = ..() - if(machine_stat & (NOPOWER|BROKEN)) - return - - var/L = min(round(lastgenlev / 100000), 11) - if(L != 0) - . += mutable_appearance('icons/obj/power.dmi', "teg-op[L]") - if(hot_circ && cold_circ) - . += "teg-oc[lastcirc]" - - -#define GENRATE 800 // generator output coefficient from Q - -/obj/machinery/power/generator/process_atmos() - - if(!cold_circ || !hot_circ) - return - - if(powernet) - var/datum/gas_mixture/cold_air = cold_circ.return_transfer_air() - var/datum/gas_mixture/hot_air = hot_circ.return_transfer_air() - - if(cold_air && hot_air) - - var/cold_air_heat_capacity = cold_air.heat_capacity() - var/hot_air_heat_capacity = hot_air.heat_capacity() - - var/delta_temperature = hot_air.temperature - cold_air.temperature - - - if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0) - var/efficiency = 0.65 - - var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity) - - var/heat = energy_transfer*(1-efficiency) - lastgen += energy_transfer*efficiency - - hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity - cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity - - //add_avail(lastgen) This is done in process now - // update icon overlays only if displayed level has changed - - if(hot_air) - var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] - hot_circ_air1.merge(hot_air) - - if(cold_air) - var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] - cold_circ_air1.merge(cold_air) - - update_appearance() - - var/circ = "[cold_circ?.last_pressure_delta > 0 ? "1" : "0"][hot_circ?.last_pressure_delta > 0 ? "1" : "0"]" - if(circ != lastcirc) - lastcirc = circ - update_appearance() - - src.updateDialog() - -/obj/machinery/power/generator/process() - //Setting this number higher just makes the change in power output slower, it doesnt actualy reduce power output cause **math** - var/power_output = round(lastgen / 10) - add_avail(power_output) - lastgenlev = power_output - lastgen -= power_output - ..() - -/obj/machinery/power/generator/proc/get_menu(include_link = TRUE) - var/t = "" - if(!powernet) - t += "Unable to connect to the power network!" - else if(cold_circ && hot_circ) - var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] - var/datum/gas_mixture/cold_circ_air2 = cold_circ.airs[2] - var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] - var/datum/gas_mixture/hot_circ_air2 = hot_circ.airs[2] - - t += "
" - - t += "Output: [display_power(lastgenlev)]" - - t += "
" - - t += "Cold loop
" - t += "Temperature Inlet: [round(cold_circ_air2.temperature, 0.1)] K / Outlet: [round(cold_circ_air1.temperature, 0.1)] K
" - t += "Pressure Inlet: [round(cold_circ_air2.return_pressure(), 0.1)] kPa / Outlet: [round(cold_circ_air1.return_pressure(), 0.1)] kPa
" - - t += "Hot loop
" - t += "Temperature Inlet: [round(hot_circ_air2.temperature, 0.1)] K / Outlet: [round(hot_circ_air1.temperature, 0.1)] K
" - t += "Pressure Inlet: [round(hot_circ_air2.return_pressure(), 0.1)] kPa / Outlet: [round(hot_circ_air1.return_pressure(), 0.1)] kPa
" - - t += "
" - else if(!hot_circ && cold_circ) - t += "Unable to locate hot circulator!" - else if(hot_circ && !cold_circ) - t += "Unable to locate cold circulator!" - else - t += "Unable to locate any parts!" - if(include_link) - t += "
Close" - - return t - -/obj/machinery/power/generator/ui_interact(mob/user) - . = ..() - var/datum/browser/popup = new(user, "teg", "Thermo-Electric Generator", 460, 300) - popup.set_content(get_menu()) - popup.open() - -/obj/machinery/power/generator/Topic(href, href_list) - if(..()) - return - if( href_list["close"] ) - usr << browse(null, "window=teg") - usr.unset_machine() - return FALSE - return TRUE - - - -/obj/machinery/power/generator/proc/find_circs() - kill_circs() - var/list/circs = list() - var/obj/machinery/atmospherics/components/binary/circulator/C - var/circpath = /obj/machinery/atmospherics/components/binary/circulator - if(dir == NORTH || dir == SOUTH) - C = locate(circpath) in get_step(src, EAST) - if(C && C.dir == WEST) - circs += C - - C = locate(circpath) in get_step(src, WEST) - if(C && C.dir == EAST) - circs += C - - else - C = locate(circpath) in get_step(src, NORTH) - if(C && C.dir == SOUTH) - circs += C - - C = locate(circpath) in get_step(src, SOUTH) - if(C && C.dir == NORTH) - circs += C - - if(circs.len) - for(C in circs) - if(C.mode == CIRCULATOR_COLD && !cold_circ) - cold_circ = C - C.generator = src - else if(C.mode == CIRCULATOR_HOT && !hot_circ) - hot_circ = C - C.generator = src - -/obj/machinery/power/generator/wrench_act(mob/living/user, obj/item/I) - . = ..() - if(!panel_open) - return - set_anchored(!anchored) - I.play_tool_sound(src) - if(!anchored) - kill_circs() - connect_to_network() - to_chat(user, span_notice("You [anchored?"secure":"unsecure"] [src].")) - return TRUE - -/obj/machinery/power/generator/multitool_act(mob/living/user, obj/item/I) - . = ..() - if(!anchored) - return - find_circs() - to_chat(user, span_notice("You update [src]'s circulator links.")) - return TRUE - -/obj/machinery/power/generator/screwdriver_act(mob/user, obj/item/I) - if(..()) - return TRUE - toggle_panel_open() - I.play_tool_sound(src) - to_chat(user, span_notice("You [panel_open?"open":"close"] the panel on [src].")) - return TRUE - -/obj/machinery/power/generator/crowbar_act(mob/user, obj/item/I) - default_deconstruction_crowbar(I) - return TRUE - -/obj/machinery/power/generator/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation - -/obj/machinery/power/generator/on_deconstruction() - kill_circs() - -/obj/machinery/power/generator/proc/kill_circs() - if(hot_circ) - hot_circ.generator = null - hot_circ = null - if(cold_circ) - cold_circ.generator = null - cold_circ = null - -#undef GENRATE diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index cf26c6fbaebf..12e17ad25fc7 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -115,7 +115,7 @@ return ..() /obj/narsie/attack_ghost(mob/user) - makeNewConstruct(/mob/living/basic/construct/harvester, user, cultoverride = TRUE, loc_override = loc) + make_new_construct(/mob/living/basic/construct/harvester, user, cultoverride = TRUE, loc_override = loc) /obj/narsie/process() var/datum/component/singularity/singularity_component = singularity.resolve() diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 0508e3b1f880..579bf1d1fb26 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -49,7 +49,7 @@ var/ghost_notification_message = "IT'S LOOSE" flags_1 = SUPERMATTER_IGNORES_1 - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF | SHUTTLE_CRUSH_PROOF obj_flags = CAN_BE_HIT | DANGEROUS_POSSESSION /obj/singularity/Initialize(mapload, starting_energy = 50) diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index c8d95ade25bc..579010243e28 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -26,7 +26,7 @@ obj_flags = CAN_BE_HIT | DANGEROUS_POSSESSION pixel_x = -32 pixel_y = -32 - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF | SHUTTLE_CRUSH_PROOF flags_1 = SUPERMATTER_IGNORES_1 var/energy diff --git a/code/modules/power/thermoelectric_generator.dm b/code/modules/power/thermoelectric_generator.dm new file mode 100644 index 000000000000..6b0fed607c23 --- /dev/null +++ b/code/modules/power/thermoelectric_generator.dm @@ -0,0 +1,222 @@ +#define TEG_EFFICIENCY 0.65 + +/obj/machinery/power/thermoelectric_generator + name = "thermoelectric generator" + desc = "It's a high efficiency thermoelectric generator." + icon_state = "teg" + base_icon_state = "teg" + density = TRUE + use_power = NO_POWER_USE + circuit = /obj/item/circuitboard/machine/thermoelectric_generator + + ///The cold circulator machine, containing cold gas for the mix. + var/obj/machinery/atmospherics/components/binary/circulator/cold_circ + ///The hot circulator machine, containing very hot gas for the mix. + var/obj/machinery/atmospherics/components/binary/circulator/hot_circ + ///The amount of power the generator is currently producing. + var/lastgen = 0 + ///The amount of power the generator has last produced. + var/lastgenlev = -1 + /** + * Used in overlays for the TEG, basically; + * one number is for the cold mix, one is for the hot mix + * If the cold mix has pressure in it, then the first number is 1, else 0 + * If the hot mix has pressure in it, then the second number is 1, else 0 + * Neither has pressure: 00 + * Only cold has pressure: 10 + * Only hot has pressure: 01 + * Both has pressure: 11 + */ + var/last_pressure_overlay = "00" + +/obj/machinery/power/thermoelectric_generator/Initialize(mapload) + . = ..() + AddComponent(/datum/component/simple_rotation) + find_circulators() + connect_to_network() + SSair.start_processing_machine(src) + update_appearance() + +/obj/machinery/power/thermoelectric_generator/Destroy() + null_circulators() + SSair.stop_processing_machine(src) + return ..() + +/obj/machinery/power/thermoelectric_generator/on_deconstruction() + null_circulators() + +/obj/machinery/power/thermoelectric_generator/update_overlays() + . = ..() + if(machine_stat & (NOPOWER|BROKEN)) + return + + var/level = min(round(lastgenlev / 100000), 11) + if(level) + . += mutable_appearance('icons/obj/power.dmi', "[base_icon_state]-op[level]") + if(hot_circ && cold_circ) + . += "[base_icon_state]-oc[last_pressure_overlay]" + +/obj/machinery/power/thermoelectric_generator/wrench_act(mob/living/user, obj/item/tool) + if(!panel_open) + balloon_alert(user, "open the panel!") + return + set_anchored(!anchored) + tool.play_tool_sound(src) + if(anchored) + connect_to_network() + else + null_circulators() + balloon_alert(user, "[anchored ? "secure" : "unsecure"]") + return TRUE + +/obj/machinery/power/thermoelectric_generator/multitool_act(mob/living/user, obj/item/tool) + . = ..() + if(!anchored) + return + find_circulators() + balloon_alert(user, "circulators updated") + return TRUE + +/obj/machinery/power/thermoelectric_generator/screwdriver_act(mob/user, obj/item/tool) + if(!anchored) + balloon_alert(user, "anchor it down!") + return + toggle_panel_open() + tool.play_tool_sound(src) + balloon_alert(user, "panel [panel_open ? "open" : "closed"]") + return TRUE + +/obj/machinery/power/thermoelectric_generator/crowbar_act(mob/living/user, obj/item/tool) + default_deconstruction_crowbar(tool) + return TRUE + +/obj/machinery/power/thermoelectric_generator/process() + //Setting this number higher just makes the change in power output slower, it doesnt actualy reduce power output cause **math** + var/power_output = round(lastgen / 10) + add_avail(power_output) + lastgenlev = power_output + lastgen -= power_output + +/obj/machinery/power/thermoelectric_generator/process_atmos() + if(!cold_circ || !hot_circ) + return + if(!powernet) + return + + var/datum/gas_mixture/cold_air = cold_circ.return_transfer_air() + var/datum/gas_mixture/hot_air = hot_circ.return_transfer_air() + if(cold_air && hot_air) + var/cold_air_heat_capacity = cold_air.heat_capacity() + var/hot_air_heat_capacity = hot_air.heat_capacity() + var/delta_temperature = hot_air.temperature - cold_air.temperature + if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0) + var/efficiency = TEG_EFFICIENCY + var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity) + var/heat = energy_transfer*(1-efficiency) + lastgen += energy_transfer*efficiency + hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity + cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity + + if(hot_air) + var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] + hot_circ_air1.merge(hot_air) + + if(cold_air) + var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] + cold_circ_air1.merge(cold_air) + + var/current_pressure = "[cold_circ?.last_pressure_delta > 0 ? "1" : "0"][hot_circ?.last_pressure_delta > 0 ? "1" : "0"]" + if(current_pressure != last_pressure_overlay) + //this requires an update to overlays. + last_pressure_overlay = current_pressure + + update_appearance(UPDATE_ICON) + +/obj/machinery/power/thermoelectric_generator/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ThermoElectricGenerator", name) + ui.open() + +/obj/machinery/power/thermoelectric_generator/ui_data(mob/user) + var/list/data = list() + data["error_message"] = null + if(!powernet) + data["error_message"] = "Unable to connect to the power network!" + return data + if(!cold_circ && !hot_circ) + data["error_message"] = "Unable to locate any parts! Multitool the machine to sync to nearby parts." + return data + if(!cold_circ) + data["error_message"] = "Unable to locate cold circulator!" + return data + if(!hot_circ) + data["error_message"] = "Unable to locate hot circulator!" + return data + + var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] + var/datum/gas_mixture/cold_circ_air2 = cold_circ.airs[2] + + var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] + var/datum/gas_mixture/hot_circ_air2 = hot_circ.airs[2] + + data["last_power_output"] = display_power(lastgenlev) + + var/list/cold_data = list() + cold_data["temperature_inlet"] = round(cold_circ_air2.temperature, 0.1) + cold_data["temperature_outlet"] = round(cold_circ_air1.temperature, 0.1) + cold_data["pressure_inlet"] = round(cold_circ_air2.return_pressure(), 0.1) + cold_data["pressure_outlet"] = round(cold_circ_air1.return_pressure(), 0.1) + data["cold_data"] = list(cold_data) + + var/list/hot_data = list() + hot_data["temperature_inlet"] = round(hot_circ_air2.temperature, 0.1) + hot_data["temperature_outlet"] = round(hot_circ_air1.temperature, 0.1) + hot_data["pressure_inlet"] = round(hot_circ_air2.return_pressure(), 0.1) + hot_data["pressure_outlet"] = round(hot_circ_air1.return_pressure(), 0.1) + data["hot_data"] = list(hot_data) + + return data + +///Finds and connects nearby valid circulators to the machine, nulling out previous ones. +/obj/machinery/power/thermoelectric_generator/proc/find_circulators() + null_circulators() + var/list/valid_circulators = list() + + if(dir & (NORTH|SOUTH)) + var/obj/machinery/atmospherics/components/binary/circulator/east_circulator = locate() in get_step(src, EAST) + if(east_circulator && east_circulator.dir == WEST) + valid_circulators += east_circulator + var/obj/machinery/atmospherics/components/binary/circulator/west_circulator = locate() in get_step(src, WEST) + if(west_circulator && west_circulator.dir == EAST) + valid_circulators += west_circulator + else + var/obj/machinery/atmospherics/components/binary/circulator/north_circulator = locate() in get_step(src, NORTH) + if(north_circulator && north_circulator.dir == SOUTH) + valid_circulators += north_circulator + var/obj/machinery/atmospherics/components/binary/circulator/south_circulator = locate() in get_step(src, SOUTH) + if(south_circulator && south_circulator.dir == NORTH) + valid_circulators += south_circulator + + if(!valid_circulators.len) + return + + for(var/obj/machinery/atmospherics/components/binary/circulator/circulators as anything in valid_circulators) + if(circulators.mode == CIRCULATOR_COLD && !cold_circ) + cold_circ = circulators + circulators.generator = src + continue + if(circulators.mode == CIRCULATOR_HOT && !hot_circ) + hot_circ = circulators + circulators.generator = src + +///Removes hot and cold circulators from the generator, nulling them. +/obj/machinery/power/thermoelectric_generator/proc/null_circulators() + if(hot_circ) + hot_circ.generator = null + hot_circ = null + if(cold_circ) + cold_circ.generator = null + cold_circ = null + +#undef TEG_EFFICIENCY diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index 1f1a2e7909d2..da7bc8e8bad9 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -95,9 +95,9 @@ if(can_shoot()) ADD_TRAIT(user, TRAIT_NO_TRANSFORM, REF(src)) playsound(src, 'sound/vehicles/rocketlaunch.ogg', 80, TRUE, 5) - animate(user, pixel_z = 300, time = 30, easing = LINEAR_EASING) + animate(user, pixel_z = 300, time = 30, flags = ANIMATION_RELATIVE, easing = LINEAR_EASING) sleep(7 SECONDS) - animate(user, pixel_z = 0, time = 5, easing = LINEAR_EASING) + animate(user, pixel_z = -300, time = 5, flags = ANIMATION_RELATIVE, easing = LINEAR_EASING) sleep(0.5 SECONDS) REMOVE_TRAIT(user, TRAIT_NO_TRANSFORM, REF(src)) process_fire(user, user, TRUE) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 5d69b347046a..217bb74a8c7a 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -556,6 +556,17 @@ var/chassis_name = "super-kinetic accelerator" /obj/item/borg/upgrade/modkit/chassis_mod/install(obj/item/gun/energy/recharge/kinetic_accelerator/KA, mob/user) +//monkestation edit start + if(is_type_in_list(KA, list(/obj/item/gun/energy/recharge/kinetic_accelerator/glock, + /obj/item/gun/energy/recharge/kinetic_accelerator/m79, + /obj/item/gun/energy/recharge/kinetic_accelerator/meme, + /obj/item/gun/energy/recharge/kinetic_accelerator/railgun, + /obj/item/gun/energy/recharge/kinetic_accelerator/repeater, + /obj/item/gun/energy/recharge/kinetic_accelerator/shockwave, + /obj/item/gun/energy/recharge/kinetic_accelerator/shotgun))) + to_chat(user, span_warning("[src] is not compatible with [KA].")) + return FALSE +//monkestation edit end . = ..() if(.) KA.icon_state = chassis_icon @@ -602,5 +613,5 @@ /obj/item/borg/upgrade/modkit/tracer/adjustable/proc/choose_bolt_color(mob/user) set waitfor = FALSE - var/new_color = input(user,"","Choose Color",bolt_color) as color|null + var/new_color = tgui_color_picker(user, "", "Choose Color", bolt_color) bolt_color = new_color || bolt_color diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 9e01e08f821a..5d622cbba70b 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -286,16 +286,18 @@ p_orange.link_portal(p_blue) p_blue.link_portal(p_orange) -/obj/item/gun/energy/wormhole_projector/proc/create_portal(obj/projectile/beam/wormhole/W, turf/target) - var/obj/effect/portal/P = new /obj/effect/portal(target, 300, null, FALSE, null) - RegisterSignal(P, COMSIG_QDELETING, PROC_REF(on_portal_destroy)) - if(istype(W, /obj/projectile/beam/wormhole/orange)) +/obj/item/gun/energy/wormhole_projector/proc/create_portal(obj/projectile/beam/wormhole/wormhole_beam, turf/target) + var/obj/effect/portal/new_portal = new /obj/effect/portal(target, 300, null, FALSE, null) + RegisterSignal(new_portal, COMSIG_QDELETING, PROC_REF(on_portal_destroy)) + if(istype(wormhole_beam, /obj/projectile/beam/wormhole/orange)) qdel(p_orange) - p_orange = P - P.icon_state = "portal1" + p_orange = new_portal + new_portal.icon_state = "portal1" + new_portal.set_light_color(COLOR_MOSTLY_PURE_ORANGE) + new_portal.update_light() else qdel(p_blue) - p_blue = P + p_blue = new_portal crosslink() /obj/item/gun/energy/wormhole_projector/core_inserted diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index fa6e255a99ed..e365af020e26 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -400,7 +400,7 @@ var/datum/antagonist/A = target.mind.has_antag_datum(/datum/antagonist/) if(A) poll_message = "[poll_message] Status:[A.name]." - var/list/mob/dead/observer/candidates = poll_candidates_for_mob(poll_message, ROLE_PAI, FALSE, 10 SECONDS, target) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob(poll_message, check_jobban = ROLE_PAI, poll_time = 10 SECONDS, target_mob = target, pic_source = target, role_name_text = "bolt of possession") if(target.stat == DEAD)//boo. return if(LAZYLEN(candidates)) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 8daeefa8cdd4..6eb3009bd3da 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -481,7 +481,7 @@ has_panel_overlay = FALSE dispensed_temperature = WATER_MATTERSTATE_CHANGE_TEMP // magical mystery temperature of 274.5, where ice does not melt, and water does not freeze amount = 10 - pixel_y = 6 + anchored_tabletop_offset = 6 circuit = /obj/item/circuitboard/machine/chem_dispenser/drinks working_state = null nopower_state = null @@ -498,6 +498,7 @@ /datum/reagent/consumable/lemonjuice, /datum/reagent/consumable/lemon_lime, /datum/reagent/consumable/limejuice, + /datum/reagent/consumable/melon_soda, /datum/reagent/consumable/menthol, /datum/reagent/consumable/orangejuice, /datum/reagent/consumable/pineapplejuice, @@ -571,6 +572,7 @@ /datum/reagent/consumable/ethanol/ale, /datum/reagent/consumable/ethanol/applejack, /datum/reagent/consumable/ethanol/beer, + /datum/reagent/consumable/ethanol/coconut_rum, /datum/reagent/consumable/ethanol/cognac, /datum/reagent/consumable/ethanol/creme_de_cacao, /datum/reagent/consumable/ethanol/creme_de_coconut, @@ -581,6 +583,7 @@ /datum/reagent/consumable/ethanol/kahlua, /datum/reagent/consumable/ethanol/beer/maltliquor, /datum/reagent/consumable/ethanol/navy_rum, + /datum/reagent/consumable/ethanol/rice_beer, /datum/reagent/consumable/ethanol/rum, /datum/reagent/consumable/ethanol/sake, /datum/reagent/consumable/ethanol/tequila, @@ -589,6 +592,7 @@ /datum/reagent/consumable/ethanol/vodka, /datum/reagent/consumable/ethanol/whiskey, /datum/reagent/consumable/ethanol/wine, + /datum/reagent/consumable/ethanol/yuyake, ) upgrade_reagents = null emagged_reagents = list( diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 0aab6de638d6..f72c548396a8 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -10,6 +10,7 @@ circuit = /obj/item/circuitboard/machine/reagentgrinder pass_flags = PASSTABLE resistance_flags = ACID_PROOF + anchored_tabletop_offset = 8 var/operating = FALSE var/obj/item/reagent_containers/beaker = null var/limit = 10 diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 8da6da798265..c0f4fd62281b 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -125,6 +125,8 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) var/restricted = FALSE /// do we have a turf exposure (used to prevent liquids doing un-needed processes) var/turf_exposure = FALSE + /// are we slippery? + var/slippery = TRUE /// A list of traits to apply while the reagent is being metabolized. var/list/metabolized_traits /// A list of traits to apply while the reagent is in a mob. diff --git a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm index b2776171fdd5..9ea62c503cbf 100644 --- a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm @@ -129,12 +129,14 @@ . = TRUE /datum/reagent/medicine/c2/probital/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) - affected_mob.stamina.adjust(-3 * REM * seconds_per_tick, FALSE) + affected_mob.stamina.adjust(-3 * REM * seconds_per_tick, TRUE) if(affected_mob.stamina.loss >= 80) affected_mob.adjust_drowsiness(2 SECONDS * REM * seconds_per_tick) if(affected_mob.stamina.loss >= 100) to_chat(affected_mob,span_warning("You feel more tired than you usually do, perhaps if you rest your eyes for a bit...")) affected_mob.stamina.adjust(100, TRUE) + if(HAS_TRAIT(affected_mob, TRAIT_INCAPACITATED)) + affected_mob.exit_stamina_stun() affected_mob.Sleeping(10 SECONDS) ..() . = TRUE diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm similarity index 69% rename from code/modules/reagents/chemistry/reagents/alcohol_reagents.dm rename to code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm index 2b6a402c22cf..1fd79f131f42 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm @@ -108,15 +108,8 @@ taste_description = "mild carbonated malt" ph = 4 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED - glass_price = DRINK_PRICE_STOCK -/datum/glass_style/drinking_glass/beer - required_drink_type = /datum/reagent/consumable/ethanol/beer - name = "glass of beer" - desc = "A freezing pint of beer." - icon_state = "beerglass" - // Beer is a chemical composition of alcohol and various other things. It's a garbage nutrient but hey, it's still one. Also alcohol is bad, mmmkay? /datum/reagent/consumable/ethanol/beer/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) . = ..() @@ -132,11 +125,6 @@ ph = 5 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/beer/light - required_drink_type = /datum/reagent/consumable/ethanol/beer/light - name = "glass of light beer" - desc = "A freezing pint of watery light beer." - /datum/reagent/consumable/ethanol/beer/maltliquor name = "Malt Liquor" description = "An alcoholic beverage brewed since ancient times on Old Earth. This variety is stronger than usual, super cheap, and super terrible." @@ -145,11 +133,6 @@ ph = 4.8 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/beer/light - required_drink_type = /datum/reagent/consumable/ethanol/beer/maltliquor - name = "glass of malt liquor" - desc = "A freezing pint of malt liquor." - /datum/reagent/consumable/ethanol/beer/green name = "Green Beer" description = "An alcoholic beverage brewed since ancient times on Old Earth. This variety is dyed a festive green." @@ -158,12 +141,6 @@ ph = 6 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/beer/green - required_drink_type = /datum/reagent/consumable/ethanol/beer/green - name = "glass of green beer" - desc = "A freezing pint of green beer. Festive." - icon_state = "greenbeerglass" - /datum/reagent/consumable/ethanol/beer/green/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(drinker.color != color) drinker.add_atom_colour(color, TEMPORARY_COLOUR_PRIORITY) @@ -181,16 +158,6 @@ ph = 6 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/shot_glass/kahlua - required_drink_type = /datum/reagent/consumable/ethanol/kahlua - icon_state ="shotglasscream" - -/datum/glass_style/drinking_glass/kahlua - required_drink_type = /datum/reagent/consumable/ethanol/kahlua - name = "glass of RR coffee liquor" - desc = "DAMN, THIS THING LOOKS ROBUST!" - icon_state ="kahluaglass" - /datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.set_dizzy_if_lower(10 SECONDS * REM * seconds_per_tick) drinker.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) @@ -210,16 +177,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_STOCK -/datum/glass_style/shot_glass/whiskey - required_drink_type = /datum/reagent/consumable/ethanol/whiskey - icon_state = "shotglassbrown" - -/datum/glass_style/drinking_glass/whiskey - required_drink_type = /datum/reagent/consumable/ethanol/whiskey - name = "glass of whiskey" - desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy." - icon_state = "whiskeyglass" - /datum/reagent/consumable/ethanol/whiskey/kong name = "Kong" description = "Makes You Go Ape!®" @@ -227,14 +184,6 @@ taste_description = "the grip of a giant ape" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/shot_glass/whiskey/kong - required_drink_type = /datum/reagent/consumable/ethanol/whiskey/kong - -/datum/glass_style/drinking_glass/whiskey/kong - required_drink_type = /datum/reagent/consumable/ethanol/whiskey/kong - name = "glass of Kong" - desc = "Makes You Go Ape!®" - /datum/reagent/consumable/ethanol/whiskey/candycorn name = "Candy Corn Liquor" description = "Like they drank in 2D speakeasies." @@ -242,14 +191,6 @@ taste_description = "pancake syrup" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/shot_glass/whiskey/candycorn - required_drink_type = /datum/reagent/consumable/ethanol/whiskey/candycorn - -/datum/glass_style/drinking_glass/whiskey/candycorn - required_drink_type = /datum/reagent/consumable/ethanol/whiskey/candycorn - name = "glass of candy corn liquor" - desc = "Good for your Imagination." - /datum/reagent/consumable/ethanol/whiskey/candycorn/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(SPT_PROB(5, seconds_per_tick)) drinker.adjust_hallucinations(4 SECONDS * REM * seconds_per_tick) @@ -266,12 +207,6 @@ taste_description = "jitters and death" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/thirteenloko - required_drink_type = /datum/reagent/consumable/ethanol/thirteenloko - name = "glass of Thirteen Loko" - desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass." - icon_state = "thirteen_loko_glass" - /datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.adjust_drowsiness(-14 SECONDS * REM * seconds_per_tick) drinker.AdjustSleeping(-40 * REM * seconds_per_tick) @@ -331,16 +266,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_CLEANS //Very high proof default_container = /obj/item/reagent_containers/cup/glass/bottle/vodka -/datum/glass_style/shot_glass/vodka - required_drink_type = /datum/reagent/consumable/ethanol/vodka - icon_state = "shotglassclear" - -/datum/glass_style/drinking_glass/vodka - required_drink_type = /datum/reagent/consumable/ethanol/vodka - name = "glass of vodka" - desc = "The glass contain wodka. Xynta." - icon_state = "ginvodkaglass" - /datum/reagent/consumable/ethanol/bilk name = "Bilk" description = "This appears to be beer mixed with milk. Disgusting." @@ -350,12 +275,6 @@ taste_description = "desperation and lactate" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/bilk - required_drink_type = /datum/reagent/consumable/ethanol/bilk - name = "glass of bilk" - desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis." - icon_state = "glass_brown" - /datum/reagent/consumable/ethanol/bilk/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(drinker.getBruteLoss() && SPT_PROB(5, seconds_per_tick)) drinker.heal_bodypart_damage(brute = 1) @@ -372,13 +291,6 @@ ph = 3.5 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/threemileisland - required_drink_type = /datum/reagent/consumable/ethanol/threemileisland - name = "Three Mile Island Ice Tea" - desc = "A glass of this is sure to prevent a meltdown." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "threemileislandglass" - /datum/reagent/consumable/ethanol/threemileisland/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.set_drugginess(100 SECONDS * REM * seconds_per_tick) return ..() @@ -393,12 +305,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_STOCK -/datum/glass_style/drinking_glass/gin - required_drink_type = /datum/reagent/consumable/ethanol/gin - name = "glass of gin" - desc = "A crystal clear glass of Griffeater gin." - icon_state = "ginvodkaglass" - /datum/reagent/consumable/ethanol/rum name = "Rum" description = "Yohoho and all that." @@ -408,16 +314,6 @@ ph = 6.5 default_container = /obj/item/reagent_containers/cup/glass/bottle/rum -/datum/glass_style/shot_glass/rum - required_drink_type = /datum/reagent/consumable/ethanol/rum - icon_state = "shotglassbrown" - -/datum/glass_style/drinking_glass/rum - required_drink_type = /datum/reagent/consumable/ethanol/rum - name = "glass of rum" - desc = "Now you want to pray for a pirate suit, don't you?" - icon_state = "rumglass" - /datum/reagent/consumable/ethanol/tequila name = "Tequila" description = "A strong and mildly flavoured, Mexican produced spirit. Feeling thirsty, hombre?" @@ -428,16 +324,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_STOCK -/datum/glass_style/shot_glass/tequila - required_drink_type = /datum/reagent/consumable/ethanol/tequila - icon_state = "shotglassgold" - -/datum/glass_style/drinking_glass/tequila - required_drink_type = /datum/reagent/consumable/ethanol/tequila - name = "glass of tequila" - desc = "Now all that's missing is the weird colored shades!" - icon_state = "tequilaglass" - /datum/reagent/consumable/ethanol/vermouth name = "Vermouth" description = "You suddenly feel a craving for a martini..." @@ -447,16 +333,6 @@ ph = 3.25 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/shot_glass/vermouth - required_drink_type = /datum/reagent/consumable/ethanol/vermouth - icon_state = "shotglassclear" - -/datum/glass_style/drinking_glass/vermouth - required_drink_type = /datum/reagent/consumable/ethanol/vermouth - name = "glass of vermouth" - desc = "You wonder why you're even drinking this straight." - icon_state = "vermouthglass" - /datum/reagent/consumable/ethanol/wine name = "Wine" description = "A premium alcoholic beverage made from distilled grape juice." @@ -468,16 +344,6 @@ glass_price = DRINK_PRICE_STOCK default_container = /obj/item/reagent_containers/cup/glass/bottle/wine -/datum/glass_style/shot_glass/wine - required_drink_type = /datum/reagent/consumable/ethanol/wine - icon_state = "shotglassred" - -/datum/glass_style/drinking_glass/wine - required_drink_type = /datum/reagent/consumable/ethanol/wine - name = "glass of wine" - desc = "A very classy looking drink." - icon_state = "wineglass" - /datum/reagent/consumable/ethanol/wine/on_merge(data) . = ..() if(src.data && data && data["vintage"] != src.data["vintage"]) @@ -512,12 +378,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_STOCK -/datum/glass_style/drinking_glass/grappa - required_drink_type = /datum/reagent/consumable/ethanol/grappa - name = "glass of grappa" - desc = "A fine drink originally made to prevent waste by using the leftovers from winemaking." - icon_state = "grappa" - /datum/reagent/consumable/ethanol/amaretto name = "Amaretto" description = "A gentle drink that carries a sweet aroma." @@ -527,16 +387,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_STOCK -/datum/glass_style/shot_glass/amaretto - required_drink_type = /datum/reagent/consumable/ethanol/amaretto - icon_state = "shotglassgold" - -/datum/glass_style/drinking_glass/amaretto - required_drink_type = /datum/reagent/consumable/ethanol/amaretto - name = "glass of amaretto" - desc = "A sweet and syrupy looking drink." - icon_state = "amarettoglass" - /datum/reagent/consumable/ethanol/cognac name = "Cognac" description = "A sweet and strongly alcoholic drink, made after numerous distillations and years of maturing. Classy as fornication." @@ -547,16 +397,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_STOCK -/datum/glass_style/shot_glass/cognac - required_drink_type = /datum/reagent/consumable/ethanol/cognac - icon_state = "shotglassbrown" - -/datum/glass_style/drinking_glass/cognac - required_drink_type = /datum/reagent/consumable/ethanol/cognac - name = "glass of cognac" - desc = "Damn, you feel like some kind of French aristocrat just by holding this." - icon_state = "cognacglass" - /datum/reagent/consumable/ethanol/absinthe name = "Absinthe" description = "A powerful alcoholic drink. Rumored to cause hallucinations but does not." @@ -565,16 +405,6 @@ taste_description = "death and licorice" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/shot_glass/absinthe - required_drink_type = /datum/reagent/consumable/ethanol/absinthe - icon_state = "shotglassgreen" - -/datum/glass_style/drinking_glass/absinthe - required_drink_type = /datum/reagent/consumable/ethanol/absinthe - name = "glass of absinthe" - desc = "It's as strong as it smells." - icon_state = "absinthe" - /datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(SPT_PROB(5, seconds_per_tick) && !HAS_TRAIT(drinker, TRAIT_ALCOHOL_TOLERANCE)) drinker.adjust_hallucinations(8 SECONDS) @@ -589,12 +419,6 @@ addiction_types = list(/datum/addiction/alcohol = 5, /datum/addiction/maintenance_drugs = 2) chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/hooch - required_drink_type = /datum/reagent/consumable/ethanol/hooch - name = "Hooch" - desc = "You've really hit rock bottom now... your liver packed its bags and left last night." - icon_state = "glass_brown2" - /datum/reagent/consumable/ethanol/ale name = "Ale" description = "A dark alcoholic beverage made with malted barley and yeast." @@ -605,12 +429,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_STOCK -/datum/glass_style/drinking_glass/hooch - required_drink_type = /datum/reagent/consumable/ethanol/hooch - name = "glass of ale" - desc = "A freezing pint of delicious Ale." - icon_state = "aleglass" - /datum/reagent/consumable/ethanol/goldschlager name = "Goldschlager" description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break." @@ -623,17 +441,6 @@ // This drink is really popular with a certain demographic. var/teenage_girl_quality = DRINK_VERYGOOD -/datum/glass_style/shot_glass/goldschlager - required_drink_type = /datum/reagent/consumable/ethanol/goldschlager - icon_state = "shotglassgold" - -/datum/glass_style/drinking_glass/goldschlager - required_drink_type = /datum/reagent/consumable/ethanol/goldschlager - name = "glass of goldschlager" - desc = "100% proof that teen girls will drink anything with gold in it." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "goldschlagerglass" - /datum/reagent/consumable/ethanol/goldschlager/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume) // Reset quality each time, since the bottle can be shared quality = initial(quality) @@ -666,17 +473,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_HIGH -/datum/glass_style/shot_glass/patron - required_drink_type = /datum/reagent/consumable/ethanol/patron - icon_state = "shotglassclear" - -/datum/glass_style/drinking_glass/patron - required_drink_type = /datum/reagent/consumable/ethanol/patron - name = "glass of patron" - desc = "Drinking patron in the bar, with all the subpar ladies." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "patronglass" - /datum/reagent/consumable/ethanol/gintonic name = "Gin and Tonic" description = "An all time classic, mild cocktail." @@ -688,13 +484,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_EASY -/datum/glass_style/drinking_glass/gintonic - required_drink_type = /datum/reagent/consumable/ethanol/gintonic - name = "Gin and Tonic" - desc = "A mild but still great cocktail. Drink up, like a true Englishman." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "gintonicglass" - /datum/reagent/consumable/ethanol/rum_coke name = "Rum and Coke" description = "Rum, mixed with cola." @@ -705,12 +494,6 @@ ph = 4 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/rum_coke - required_drink_type = /datum/reagent/consumable/ethanol/rum_coke - name = "Rum and Coke" - desc = "The classic go-to of space-fratboys." - icon_state = "whiskeycolaglass" - /datum/reagent/consumable/ethanol/cuba_libre name = "Cuba Libre" description = "Viva la Revolucion! Viva Cuba Libre!" @@ -720,13 +503,6 @@ taste_description = "a refreshing marriage of citrus and rum" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/cuba_libre - required_drink_type = /datum/reagent/consumable/ethanol/cuba_libre - name = "Cuba Libre" - desc = "A classic mix of rum, cola, and lime. A favorite of revolutionaries everywhere!" - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "cubalibreglass" - /datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/carbon/cubano, seconds_per_tick, times_fired) if(cubano.mind && cubano.mind.has_antag_datum(/datum/antagonist/rev)) //Cuba Libre, the traditional drink of revolutions! Heals revolutionaries. cubano.adjustBruteLoss(-1 * REM * seconds_per_tick, FALSE, required_bodytype = affected_bodytype) @@ -745,12 +521,6 @@ taste_description = "cola" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/whiskey_cola - required_drink_type = /datum/reagent/consumable/ethanol/whiskey_cola - name = "whiskey cola" - desc = "An innocent-looking mixture of cola and whiskey. Delicious." - icon_state = "whiskeycolaglass" - /datum/reagent/consumable/ethanol/martini name = "Classic Martini" description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious." @@ -761,12 +531,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_EASY -/datum/glass_style/drinking_glass/martini - required_drink_type = /datum/reagent/consumable/ethanol/martini - name = "Classic Martini" - desc = "Damn, the bartender even stirred it, not shook it." - icon_state = "martiniglass" - /datum/reagent/consumable/ethanol/vodkamartini name = "Vodka Martini" description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious." @@ -776,11 +540,6 @@ taste_description = "shaken, not stirred" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/vodkamartini - required_drink_type = /datum/reagent/consumable/ethanol/vodkamartini - name = "Vodka martini" - desc = "A bastardisation of the classic martini. Still great." - icon_state = "martiniglass" /datum/reagent/consumable/ethanol/white_russian name = "White Russian" @@ -791,13 +550,6 @@ taste_description = "bitter cream" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/white_russian - required_drink_type = /datum/reagent/consumable/ethanol/white_russian - name = "White Russian" - desc = "A very nice looking drink. But that's just, like, your opinion, man." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "whiterussianglass" - /datum/reagent/consumable/ethanol/screwdrivercocktail name = "Screwdriver" description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious." @@ -807,13 +559,6 @@ taste_description = "oranges" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/screwdrivercocktail - required_drink_type = /datum/reagent/consumable/ethanol/screwdrivercocktail - name = "Screwdriver" - desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "screwdriverglass" - /datum/reagent/consumable/ethanol/screwdrivercocktail/on_transfer(atom/atom, methods = TOUCH, trans_volume) if(!(methods & INGEST)) return ..() @@ -868,13 +613,6 @@ taste_description = "sweet 'n creamy" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/booger - required_drink_type = /datum/reagent/consumable/ethanol/booger - name = "Booger" - desc = "Ewww..." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "booger" - /datum/reagent/consumable/ethanol/bloody_mary name = "Bloody Mary" description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." @@ -884,13 +622,6 @@ taste_description = "tomatoes with a hint of lime" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/bloody_mary - required_drink_type = /datum/reagent/consumable/ethanol/bloody_mary - name = "Bloody Mary" - desc = "Tomato juice, mixed with Vodka and a li'l bit of lime. Tastes like liquid murder." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "bloodymaryglass" - /datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(drinker.blood_volume < BLOOD_VOLUME_NORMAL) drinker.blood_volume = min(drinker.blood_volume + (3 * REM * seconds_per_tick), BLOOD_VOLUME_NORMAL) //Bloody Mary quickly restores blood loss. @@ -908,13 +639,6 @@ metabolized_traits = list(TRAIT_FEARLESS, TRAIT_ANALGESIA) var/tough_text -/datum/glass_style/drinking_glass/brave_bull - required_drink_type = /datum/reagent/consumable/ethanol/brave_bull - name = "Brave Bull" - desc = "Tequila and Coffee liqueur, brought together in a mouthwatering mixture. Drink up." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "bravebullglass" - /datum/reagent/consumable/ethanol/brave_bull/on_mob_metabolize(mob/living/drinker) . = ..() tough_text = pick("brawny", "tenacious", "tough", "hardy", "sturdy") //Tuff stuff @@ -939,13 +663,6 @@ glass_price = DRINK_PRICE_MEDIUM var/obj/effect/light_holder -/datum/glass_style/drinking_glass/tequila_sunrise - required_drink_type = /datum/reagent/consumable/ethanol/tequila_sunrise - name = "tequila Sunrise" - desc = "Oh great, now you feel nostalgic about sunrises back on Terra..." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "tequilasunriseglass" - /datum/reagent/consumable/ethanol/tequila_sunrise/on_mob_metabolize(mob/living/drinker) . = ..() to_chat(drinker, span_notice("You feel gentle warmth spread through your body!")) @@ -972,18 +689,6 @@ taste_description = "spicy toxins" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/shot_glass/toxins_special - required_drink_type = /datum/reagent/consumable/ethanol/toxins_special - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "toxinsspecialglass" - -/datum/glass_style/drinking_glass/toxins_special - required_drink_type = /datum/reagent/consumable/ethanol/toxins_special - name = "Toxins Special" - desc = "Whoah, this thing is on FIRE!" - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "toxinsspecialglass" - /datum/reagent/consumable/ethanol/toxins_special/on_mob_life(mob/living/drinker, seconds_per_tick, times_fired) drinker.adjust_bodytemperature(15 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, 0, drinker.get_body_temp_normal() + 20) //310.15 is the normal bodytemp. return ..() @@ -1002,13 +707,6 @@ bypass_restriction = TRUE var/datum/brain_trauma/special/beepsky/beepsky_hallucination -/datum/glass_style/drinking_glass/beepsky_smash - required_drink_type = /datum/reagent/consumable/ethanol/beepsky_smash - name = "Beepsky Smash" - desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "beepskysmashglass" - /datum/reagent/consumable/ethanol/beepsky_smash/on_mob_metabolize(mob/living/carbon/drinker) if(HAS_TRAIT(drinker, TRAIT_ALCOHOL_TOLERANCE)) metabolization_rate = 0.8 @@ -1053,12 +751,6 @@ taste_description = "creamy alcohol" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/irish_cream - required_drink_type = /datum/reagent/consumable/ethanol/irish_cream - name = "Irish Cream" - desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?" - icon_state = "irishcreamglass" - /datum/reagent/consumable/ethanol/manly_dorf name = "The Manly Dorf" description = "Beer and Ale, brought together in a delicious mix. Intended for true men only." @@ -1069,13 +761,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED var/dorf_mode = FALSE -/datum/glass_style/drinking_glass/manly_dorf - required_drink_type = /datum/reagent/consumable/ethanol/manly_dorf - name = "The Manly Dorf" - desc = "A manly concoction made from Ale and Beer. Intended for true men only." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "manlydorfglass" - /datum/reagent/consumable/ethanol/manly_dorf/on_mob_metabolize(mob/living/drinker) . = ..() if(ishuman(drinker)) @@ -1100,13 +785,6 @@ taste_description = "a mixture of cola and alcohol" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/longislandicedtea - required_drink_type = /datum/reagent/consumable/ethanol/longislandicedtea - name = "Long Island Iced Tea" - desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "longislandicedteaglass" - /datum/reagent/consumable/ethanol/moonshine name = "Moonshine" description = "You've really hit rock bottom now... your liver packed its bags and left last night." @@ -1115,12 +793,6 @@ taste_description = "bitterness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/moonshine - required_drink_type = /datum/reagent/consumable/ethanol/moonshine - name = "Moonshine" - desc = "You've really hit rock bottom now... your liver packed its bags and left last night." - icon_state = "glass_clear" - /datum/reagent/consumable/ethanol/b52 name = "B-52" description = "Coffee, Irish Cream, and cognac. You will get bombed." @@ -1131,18 +803,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_EASY -/datum/glass_style/shot_glass/b52 - required_drink_type = /datum/reagent/consumable/ethanol/b52 - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "b52glass" - -/datum/glass_style/drinking_glass/b52 - required_drink_type = /datum/reagent/consumable/ethanol/b52 - name = "B-52" - desc = "Kahlua, Irish Cream, and cognac. You will get bombed." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "b52glass" - /datum/reagent/consumable/ethanol/b52/on_mob_metabolize(mob/living/drinker) . = ..() playsound(drinker, 'sound/effects/explosion_distant.ogg', 100, FALSE) @@ -1156,13 +816,6 @@ taste_description = "giving up on the day" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/irishcoffee - required_drink_type = /datum/reagent/consumable/ethanol/irishcoffee - name = "Irish Coffee" - desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning." - icon = 'icons/obj/drinks/coffee.dmi' - icon_state = "irishcoffeeglass" - /datum/reagent/consumable/ethanol/margarita name = "Margarita" description = "On the rocks with salt on the rim. Arriba~!" @@ -1173,13 +826,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM -/datum/glass_style/drinking_glass/margarita - required_drink_type = /datum/reagent/consumable/ethanol/margarita - name = "Margarita" - desc = "On the rocks with salt on the rim. Arriba~!" - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "margaritaglass" - /datum/reagent/consumable/ethanol/black_russian name = "Black Russian" description = "For the lactose-intolerant. Still as classy as a White Russian." @@ -1189,13 +835,6 @@ taste_description = "bitterness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/black_russian - required_drink_type = /datum/reagent/consumable/ethanol/black_russian - name = "Black Russian" - desc = "For the lactose-intolerant. Still as classy as a White Russian." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "blackrussianglass" - /datum/reagent/consumable/ethanol/manhattan name = "Manhattan" description = "The Detective's undercover drink of choice. He never could stomach gin..." @@ -1206,13 +845,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_EASY -/datum/glass_style/drinking_glass/manhattan - required_drink_type = /datum/reagent/consumable/ethanol/manhattan - name = "Manhattan" - desc = "The Detective's undercover drink of choice. He never could stomach gin..." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "manhattanglass" - /datum/reagent/consumable/ethanol/manhattan_proj name = "Manhattan Project" description = "A scientist's drink of choice, for pondering ways to blow up the station." @@ -1222,13 +854,6 @@ taste_description = "death, the destroyer of worlds" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/manhattan_proj - required_drink_type = /datum/reagent/consumable/ethanol/manhattan_proj - name = "Manhattan Project" - desc = "A scientist's drink of choice, for thinking how to blow up the station." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "proj_manhattanglass" - /datum/reagent/consumable/ethanol/manhattan_proj/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.set_drugginess(1 MINUTES * REM * seconds_per_tick) return ..() @@ -1242,12 +867,6 @@ taste_description = "soda" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/whiskeysoda - required_drink_type = /datum/reagent/consumable/ethanol/whiskeysoda - name = "whiskey soda" - desc = "Ultimate refreshment." - icon_state = "whiskeysodaglass2" - /datum/reagent/consumable/ethanol/antifreeze name = "Anti-freeze" description = "The ultimate refreshment. Not what it sounds like." @@ -1257,13 +876,6 @@ taste_description = "Jack Frost's piss" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/antifreeze - required_drink_type = /datum/reagent/consumable/ethanol/antifreeze - name = "Anti-freeze" - desc = "The ultimate refreshment." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "antifreeze" - /datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.adjust_bodytemperature(20 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, 0, drinker.get_body_temp_normal() + 20) //310.15 is the normal bodytemp. return ..() @@ -1277,13 +889,6 @@ taste_description = "creamy berries" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/barefoot - required_drink_type = /datum/reagent/consumable/ethanol/barefoot - name = "Barefoot" - desc = "Barefoot and pregnant." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "b&p" - /datum/reagent/consumable/ethanol/barefoot/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(ishuman(drinker)) //Barefoot causes the imbiber to quickly regenerate brute trauma if they're not wearing shoes. var/mob/living/carbon/human/unshoed = drinker @@ -1301,13 +906,6 @@ taste_description = "refreshing cold" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/snowwhite - required_drink_type = /datum/reagent/consumable/ethanol/snowwhite - name = "Snow White" - desc = "A cold refreshment." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "snowwhite" - /datum/reagent/consumable/ethanol/demonsblood name = "Demon's Blood" description = "AHHHH!!!!" @@ -1318,13 +916,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED bypass_restriction = TRUE -/datum/glass_style/drinking_glass/demonsblood - required_drink_type = /datum/reagent/consumable/ethanol/demonsblood - name = "Demons Blood" - desc = "Just looking at this thing makes the hair at the back of your neck stand up." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "demonsblood" - /datum/reagent/consumable/ethanol/demonsblood/on_mob_metabolize(mob/living/metabolizer) . = ..() RegisterSignal(metabolizer, COMSIG_LIVING_BLOOD_CRAWL_PRE_CONSUMED, PROC_REF(pre_bloodcrawl_consumed)) @@ -1362,13 +953,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED bypass_restriction = TRUE -/datum/glass_style/drinking_glass/devilskiss - required_drink_type = /datum/reagent/consumable/ethanol/devilskiss - name = "Devils Kiss" - desc = "Creepy time!" - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "devilskiss" - /datum/reagent/consumable/ethanol/devilskiss/on_mob_metabolize(mob/living/metabolizer) . = ..() RegisterSignal(metabolizer, COMSIG_LIVING_BLOOD_CRAWL_CONSUMED, PROC_REF(on_bloodcrawl_consumed)) @@ -1413,13 +997,6 @@ taste_description = "tart bitterness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/vodkatonic - required_drink_type = /datum/reagent/consumable/ethanol/vodkatonic - name = "vodka and tonic" - desc = "For when a gin and tonic isn't Russian enough." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "vodkatonicglass" - /datum/reagent/consumable/ethanol/ginfizz name = "Gin Fizz" description = "Refreshingly lemony, deliciously dry." @@ -1429,13 +1006,6 @@ taste_description = "dry, tart lemons" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/ginfizz - required_drink_type = /datum/reagent/consumable/ethanol/ginfizz - name = "gin fizz" - desc = "Refreshingly lemony, deliciously dry." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "ginfizzglass" - /datum/reagent/consumable/ethanol/bahama_mama name = "Bahama Mama" description = "A tropical cocktail with a complex blend of flavors." @@ -1445,13 +1015,6 @@ taste_description = "pineapple, coconut, and a hint of coffee" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/bahama_mama - required_drink_type = /datum/reagent/consumable/ethanol/bahama_mama - name = "Bahama Mama" - desc = "A tropical cocktail with a complex blend of flavors." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "bahama_mama" - /datum/reagent/consumable/ethanol/singulo name = "Singulo" description = "A blue-space beverage!" @@ -1485,13 +1048,6 @@ drinker.emote("burp") return ..() -/datum/glass_style/drinking_glass/singulo - required_drink_type = /datum/reagent/consumable/ethanol/singulo - name = "Singulo" - desc = "A blue-space beverage." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "singulo" - /datum/reagent/consumable/ethanol/sbiten name = "Sbiten" description = "A spicy Vodka! Might be a little hot for the little guys!" @@ -1505,13 +1061,6 @@ drinker.adjust_bodytemperature(50 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, 0, BODYTEMP_HEAT_DAMAGE_LIMIT) //310.15 is the normal bodytemp. return ..() -/datum/glass_style/drinking_glass/sbiten - required_drink_type = /datum/reagent/consumable/ethanol/sbiten - name = "Sbiten" - desc = "A spicy mix of Vodka and Spice. Very hot." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "sbitenglass" - /datum/reagent/consumable/ethanol/red_mead name = "Red Mead" description = "The true Viking drink! Even though it has a strange red color." @@ -1521,13 +1070,6 @@ taste_description = "sweet and salty alcohol" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/red_mead - required_drink_type = /datum/reagent/consumable/ethanol/red_mead - name = "Red Mead" - desc = "A true Viking's beverage, made with the blood of their enemies." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "red_meadglass" - /datum/reagent/consumable/ethanol/mead name = "Mead" description = "A Viking drink, though a cheap one." @@ -1538,13 +1080,6 @@ taste_description = "sweet, sweet alcohol" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/mead - required_drink_type = /datum/reagent/consumable/ethanol/mead - name = "Mead" - desc = "A drink from Valhalla." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "meadglass" - /datum/reagent/consumable/ethanol/iced_beer name = "Iced Beer" description = "A beer which is so cold the air around it freezes." @@ -1553,12 +1088,6 @@ taste_description = "refreshingly cold" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/iced_beer - required_drink_type = /datum/reagent/consumable/ethanol/iced_beer - name = "iced beer" - desc = "A beer so frosty, the air around it freezes." - icon_state = "iced_beerglass" - /datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.adjust_bodytemperature(-20 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, T0C) //310.15 is the normal bodytemp. return ..() @@ -1571,13 +1100,6 @@ taste_description = "a poor excuse for alcohol" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/grog - required_drink_type = /datum/reagent/consumable/ethanol/grog - name = "Grog" - desc = "A fine and cepa drink for Space." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "grogglass" - /datum/reagent/consumable/ethanol/aloe name = "Aloe" description = "So very, very, very good." @@ -1589,12 +1111,6 @@ //somewhat annoying mix glass_price = DRINK_PRICE_MEDIUM -/datum/glass_style/drinking_glass/aloe - required_drink_type = /datum/reagent/consumable/ethanol/aloe - name = "Aloe" - desc = "Very, very, very good." - icon_state = "aloe" - /datum/reagent/consumable/ethanol/andalusia name = "Andalusia" description = "A nice, strangely named drink." @@ -1604,12 +1120,6 @@ taste_description = "lemons" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/andalusia - required_drink_type = /datum/reagent/consumable/ethanol/andalusia - name = "Andalusia" - desc = "A nice, strangely named drink." - icon_state = "andalusia" - /datum/reagent/consumable/ethanol/alliescocktail name = "Allies Cocktail" description = "A drink made from your allies. Not as sweet as those made from your enemies." @@ -1620,13 +1130,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_EASY -/datum/glass_style/drinking_glass/alliescocktail - required_drink_type = /datum/reagent/consumable/ethanol/alliescocktail - name = "Allies cocktail" - desc = "A drink made from your allies." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "alliescocktail" - /datum/reagent/consumable/ethanol/acid_spit name = "Acid Spit" description = "A drink for the daring, can be deadly if incorrectly prepared!" @@ -1636,12 +1139,6 @@ taste_description = "stomach acid" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/acid_spit - required_drink_type = /datum/reagent/consumable/ethanol/acid_spit - name = "Acid Spit" - desc = "A drink from Nanotrasen. Made from live aliens." - icon_state = "acidspitglass" - /datum/reagent/consumable/ethanol/amasec name = "Amasec" description = "Official drink of the Nanotrasen Gun-Club!" @@ -1651,13 +1148,6 @@ taste_description = "dark and metallic" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/amasec - required_drink_type = /datum/reagent/consumable/ethanol/amasec - name = "Amasec" - desc = "Always handy before COMBAT!!!" - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "amasecglass" - /datum/reagent/consumable/ethanol/changelingsting name = "Changeling Sting" description = "You take a tiny sip and feel a burning sensation..." @@ -1667,13 +1157,6 @@ taste_description = "your brain coming out your nose" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/changelingsting - required_drink_type = /datum/reagent/consumable/ethanol/changelingsting - name = "Changeling Sting" - desc = "A stingy drink." - icon = 'icons/obj/drinks/soda.dmi' - icon_state = "changelingsting" - /datum/reagent/consumable/ethanol/changelingsting/on_mob_life(mob/living/carbon/target, seconds_per_tick, times_fired) var/datum/antagonist/changeling/changeling = target.mind?.has_antag_datum(/datum/antagonist/changeling) changeling?.adjust_chemicals(metabolization_rate * REM * seconds_per_tick) @@ -1688,12 +1171,6 @@ taste_description = "the spirit of Ireland" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/irishcarbomb - required_drink_type = /datum/reagent/consumable/ethanol/irishcarbomb - name = "Irish Car Bomb" - desc = "An Irish car bomb." - icon_state = "irishcarbomb" - /datum/reagent/consumable/ethanol/syndicatebomb name = "Syndicate Bomb" description = "Tastes like terrorism!" @@ -1703,13 +1180,6 @@ taste_description = "purified antagonism" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/syndicatebomb - required_drink_type = /datum/reagent/consumable/ethanol/syndicatebomb - name = "Syndicate Bomb" - desc = "A syndicate bomb." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "syndicatebomb" - /datum/reagent/consumable/ethanol/syndicatebomb/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(SPT_PROB(2.5, seconds_per_tick)) playsound(get_turf(drinker), 'sound/effects/explosionfar.ogg', 100, TRUE) @@ -1724,13 +1194,6 @@ taste_description = "psychic links" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/hiveminderaser - required_drink_type = /datum/reagent/consumable/ethanol/hiveminderaser - name = "Hivemind Eraser" - desc = "For when even mindshields can't save you." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "hiveminderaser" - /datum/reagent/consumable/ethanol/erikasurprise name = "Erika Surprise" description = "The surprise is, it's green!" @@ -1740,13 +1203,6 @@ taste_description = "tartness and bananas" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/erikasurprise - required_drink_type = /datum/reagent/consumable/ethanol/erikasurprise - name = "Erika Surprise" - desc = "The surprise is, it's green!" - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "erikasurprise" - /datum/reagent/consumable/ethanol/driestmartini name = "Driest Martini" description = "Only for the experienced. You think you see sand floating in the glass." @@ -1757,13 +1213,6 @@ taste_description = "a beach" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/driestmartini - required_drink_type = /datum/reagent/consumable/ethanol/driestmartini - name = "Driest Martini" - desc = "Only for the experienced. You think you see sand floating in the glass." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "driestmartiniglass" - /datum/reagent/consumable/ethanol/bananahonk name = "Banana Honk" description = "A drink from Clown Heaven." @@ -1774,13 +1223,6 @@ taste_description = "a bad joke" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/bananahonk - required_drink_type = /datum/reagent/consumable/ethanol/bananahonk - name = "Banana Honk" - desc = "A drink from Clown Heaven." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "bananahonkglass" - /datum/reagent/consumable/ethanol/bananahonk/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) var/obj/item/organ/internal/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER) if((liver && HAS_TRAIT(liver, TRAIT_COMEDY_METABOLISM)) || ismonkey(drinker)) @@ -1798,13 +1240,6 @@ taste_description = "a pencil eraser" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/silencer - required_drink_type = /datum/reagent/consumable/ethanol/silencer - name = "Silencer" - desc = "A drink from Mime Heaven." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "silencerglass" - /datum/reagent/consumable/ethanol/silencer/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(ishuman(drinker) && HAS_TRAIT(drinker, TRAIT_MIMING)) drinker.set_silence_if_lower(MIMEDRINK_SILENCE_DURATION) @@ -1821,13 +1256,6 @@ taste_description = "molasses and a mouthful of pool water" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/drunkenblumpkin - required_drink_type = /datum/reagent/consumable/ethanol/drunkenblumpkin - name = "Drunken Blumpkin" - desc = "A drink for the drunks." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "drunkenblumpkin" - /datum/reagent/consumable/ethanol/whiskey_sour //Requested since we had whiskey cola and soda but not sour. name = "Whiskey Sour" description = "Lemon juice/whiskey/sugar mixture. Moderate alcohol content." @@ -1836,12 +1264,6 @@ quality = DRINK_GOOD taste_description = "sour lemons" -/datum/glass_style/drinking_glass/whiskey_sour - required_drink_type = /datum/reagent/consumable/ethanol/whiskey_sour - name = "whiskey sour" - desc = "Lemon juice mixed with whiskey and a dash of sugar. Surprisingly satisfying." - icon_state = "whiskey_sour" - /datum/reagent/consumable/ethanol/hcider name = "Hard Cider" description = "Apple juice, for adults." @@ -1852,16 +1274,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_STOCK -/datum/glass_style/shot_glass/hcider - required_drink_type = /datum/reagent/consumable/ethanol/hcider - icon_state = "shotglassbrown" - -/datum/glass_style/drinking_glass/hcider - required_drink_type = /datum/reagent/consumable/ethanol/hcider - name = "hard cider" - desc = "Tastes like autumn... no wait, fall!" - icon_state = "whiskeyglass" - /datum/reagent/consumable/ethanol/fetching_fizz //A reference to one of my favorite games of all time. Pulls nearby ores to the imbiber! name = "Fetching Fizz" description = "Whiskey sour/iron/uranium mixture resulting in a highly magnetic slurry. Mild alcohol content." //Requires no alcohol to make but has alcohol anyway because ~magic~ @@ -1872,13 +1284,6 @@ taste_description = "charged metal" // the same as teslium, honk honk. chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/fetching_fizz - required_drink_type = /datum/reagent/consumable/ethanol/fetching_fizz - name = "Fetching Fizz" - desc = "Induces magnetism in the imbiber. Started as a barroom prank but evolved to become popular with miners and scrappers. Metallic aftertaste." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "fetching_fizz" - /datum/reagent/consumable/ethanol/fetching_fizz/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) for(var/obj/item/stack/ore/O in orange(3, drinker)) step_towards(O, get_turf(drinker)) @@ -1896,13 +1301,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED bypass_restriction = TRUE -/datum/glass_style/drinking_glass/hearty_punch - required_drink_type = /datum/reagent/consumable/ethanol/hearty_punch - name = "Hearty Punch" - desc = "Aromatic beverage served piping hot. According to folk tales it can almost wake the dead." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "hearty_punch" - /datum/reagent/consumable/ethanol/hearty_punch/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(drinker.health <= 0) drinker.adjustBruteLoss(-3 * REM * seconds_per_tick, FALSE, required_bodytype = affected_bodytype) @@ -1922,12 +1320,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED bypass_restriction = TRUE -/datum/glass_style/drinking_glass/bacchus_blessing - required_drink_type = /datum/reagent/consumable/ethanol/bacchus_blessing - name = "Bacchus' Blessing" - desc = "You didn't think it was possible for a liquid to be so utterly revolting. Are you sure about this...?" - icon_state = "glass_brown2" - /datum/reagent/consumable/ethanol/atomicbomb name = "Atomic Bomb" description = "Nuclear proliferation never tasted so good." @@ -1938,13 +1330,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_HIGH -/datum/glass_style/drinking_glass/atomicbomb - required_drink_type = /datum/reagent/consumable/ethanol/atomicbomb - name = "Atomic Bomb" - desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "atomicbombglass" - /datum/reagent/consumable/ethanol/atomicbomb/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.set_drugginess(100 SECONDS * REM * seconds_per_tick) if(!HAS_TRAIT(drinker, TRAIT_ALCOHOL_TOLERANCE)) @@ -1970,13 +1355,6 @@ taste_description = "your brains smashed out by a lemon wrapped around a gold brick" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/gargle_blaster - required_drink_type = /datum/reagent/consumable/ethanol/gargle_blaster - name = "Pan-Galactic Gargle Blaster" - desc = "Like having your brain smashed out by a slice of lemon wrapped around a large gold brick." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "gargleblasterglass" - /datum/reagent/consumable/ethanol/gargle_blaster/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.adjust_dizzy(3 SECONDS * REM * seconds_per_tick) switch(current_cycle) @@ -2004,13 +1382,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED bypass_restriction = TRUE -/datum/glass_style/drinking_glass/neurotoxin - required_drink_type = /datum/reagent/consumable/ethanol/neurotoxin - name = "Neurotoxin" - desc = "A drink that is guaranteed to knock you silly." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "neurotoxinglass" - /datum/reagent/consumable/ethanol/neurotoxin/proc/pick_paralyzed_limb() return (pick(TRAIT_PARALYSIS_L_ARM,TRAIT_PARALYSIS_R_ARM,TRAIT_PARALYSIS_R_LEG,TRAIT_PARALYSIS_L_LEG)) @@ -2057,13 +1428,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED bypass_restriction = TRUE -/datum/glass_style/drinking_glass/hippies_delight - required_drink_type = /datum/reagent/consumable/ethanol/hippies_delight - name = "Hippie's Delight" - desc = "A drink enjoyed by people during the 1960's." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "hippiesdelightglass" - /datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.set_slurring_if_lower(1 SECONDS * REM * seconds_per_tick) @@ -2106,20 +1470,6 @@ taste_description = "custard and alcohol" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/has_foodtype/drinking_glass/eggnog - required_drink_type = /datum/reagent/consumable/ethanol/eggnog - name = "eggnog" - desc = "For enjoying the most wonderful time of the year." - icon_state = "glass_yellow" - drink_type = FRUIT - -/datum/glass_style/has_foodtype/juicebox/eggnog - required_drink_type = /datum/reagent/consumable/ethanol/eggnog - name = "carton of eggnog" - desc = "Tasty grape juice in a fun little container. Non-alcoholic!" - icon_state = "grapebox" - drink_type = FRUIT - /datum/reagent/consumable/ethanol/narsour name = "Nar'Sour" description = "Side effects include self-mutilation and hoarding plasteel." @@ -2130,13 +1480,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED bypass_restriction = TRUE -/datum/glass_style/drinking_glass/narsour - required_drink_type = /datum/reagent/consumable/ethanol/narsour - name = "Nar'Sour" - desc = "A new hit cocktail inspired by THE ARM Breweries will have you shouting Fuu ma'jin in no time!" - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "narsour" - /datum/reagent/consumable/ethanol/narsour/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.adjust_timed_status_effect(6 SECONDS * REM * seconds_per_tick, /datum/status_effect/speech/slurring/cult, max_duration = 6 SECONDS) drinker.adjust_stutter_up_to(6 SECONDS * REM * seconds_per_tick, 6 SECONDS) @@ -2150,12 +1493,6 @@ taste_description = "a warm flowery orange taste which recalls the ocean air and summer wind of the caribbean" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/triple_sec - required_drink_type = /datum/reagent/consumable/ethanol/triple_sec - name = "Triple Sec" - desc = "A glass of straight Triple Sec." - icon_state = "glass_orange" - /datum/reagent/consumable/ethanol/creme_de_menthe name = "Creme de Menthe" description = "A minty liqueur excellent for refreshing, cool drinks." @@ -2164,12 +1501,6 @@ taste_description = "a minty, cool, and invigorating splash of cold streamwater" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/creme_de_menthe - required_drink_type = /datum/reagent/consumable/ethanol/creme_de_menthe - name = "Creme de Menthe" - desc = "You can almost feel the first breath of spring just looking at it." - icon_state = "glass_green" - /datum/reagent/consumable/ethanol/creme_de_cacao name = "Creme de Cacao" description = "A chocolatey liqueur excellent for adding dessert notes to beverages and bribing sororities." @@ -2178,12 +1509,6 @@ taste_description = "a slick and aromatic hint of chocolates swirling in a bite of alcohol" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/creme_de_cacao - required_drink_type = /datum/reagent/consumable/ethanol/creme_de_cacao - name = "Creme de Cacao" - desc = "A million hazing lawsuits and alcohol poisonings have started with this humble ingredient." - icon_state = "glass_brown" - /datum/reagent/consumable/ethanol/creme_de_coconut name = "Creme de Coconut" description = "A coconut liqueur for smooth, creamy, tropical drinks." @@ -2192,12 +1517,6 @@ taste_description = "a sweet milky flavor with notes of toasted sugar" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/creme_de_coconut - required_drink_type = /datum/reagent/consumable/ethanol/creme_de_coconut - name = "Creme de Coconut" - desc = "An unintimidating glass of coconut liqueur." - icon_state = "glass_white" - /datum/reagent/consumable/ethanol/quadruple_sec name = "Quadruple Sec" description = "Kicks just as hard as licking the power cell on a baton, but tastier." @@ -2207,13 +1526,6 @@ taste_description = "an invigorating bitter freshness which suffuses your being; no enemy of the station will go unrobusted this day" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/quadruple_sec - required_drink_type = /datum/reagent/consumable/ethanol/quadruple_sec - name = "Quadruple Sec" - desc = "An intimidating and lawful beverage dares you to violate the law and make its day. Still can't drink it on duty, though." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "quadruple_sec" - /datum/reagent/consumable/ethanol/quadruple_sec/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) //Securidrink in line with the Screwdriver for engineers or Nothing for mimes var/obj/item/organ/internal/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER) @@ -2232,13 +1544,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED bypass_restriction = TRUE -/datum/glass_style/drinking_glass/quintuple_sec - required_drink_type = /datum/reagent/consumable/ethanol/quintuple_sec - name = "Quintuple Sec" - desc = "Now you are become law, destroyer of clowns." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "quintuple_sec" - /datum/reagent/consumable/ethanol/quintuple_sec/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) //Securidrink in line with the Screwdriver for engineers or Nothing for mimes but STRONG.. var/obj/item/organ/internal/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER) @@ -2257,13 +1562,6 @@ taste_description = "chocolate and mint dancing around your mouth" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/grasshopper - required_drink_type = /datum/reagent/consumable/ethanol/grasshopper - name = "Grasshopper" - desc = "You weren't aware edible beverages could be that green." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "grasshopper" - /datum/reagent/consumable/ethanol/stinger name = "Stinger" description = "A snappy way to end the day." @@ -2273,13 +1571,6 @@ taste_description = "a slap on the face in the best possible way" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/stinger - required_drink_type = /datum/reagent/consumable/ethanol/stinger - name = "Stinger" - desc = "You wonder what would happen if you pointed this at a heat source..." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "stinger" - /datum/reagent/consumable/ethanol/bastion_bourbon name = "Bastion Bourbon" description = "Soothing hot herbal brew with restorative properties. Hints of citrus and berry flavors." @@ -2293,17 +1584,6 @@ glass_price = DRINK_PRICE_HIGH bypass_restriction = TRUE -/datum/glass_style/shot_glass/bastion_bourbon - required_drink_type = /datum/reagent/consumable/ethanol/bastion_bourbon - icon_state = "shotglassgreen" - -/datum/glass_style/drinking_glass/bastion_bourbon - required_drink_type = /datum/reagent/consumable/ethanol/bastion_bourbon - name = "Bastion Bourbon" - desc = "If you're feeling low, count on the buttery flavor of our own bastion bourbon." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "bastion_bourbon" - /datum/reagent/consumable/ethanol/bastion_bourbon/on_mob_metabolize(mob/living/drinker) . = ..() var/heal_points = 10 @@ -2338,17 +1618,6 @@ nutriment_factor = 2 * REAGENTS_METABOLISM chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/shot_glass/squirt_cider - required_drink_type = /datum/reagent/consumable/ethanol/squirt_cider - icon_state = "shotglassgreen" - -/datum/glass_style/drinking_glass/squirt_cider - required_drink_type = /datum/reagent/consumable/ethanol/squirt_cider - name = "Squirt Cider" - desc = "Squirt cider will toughen you right up. Too bad about the musty aftertaste." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "squirt_cider" - /datum/reagent/consumable/ethanol/squirt_cider/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.satiety += 5 * REM * seconds_per_tick //for context, vitamins give 15 satiety per second ..() @@ -2363,13 +1632,6 @@ taste_description = "ethylic alcohol with a hint of sugar" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/fringe_weaver - required_drink_type = /datum/reagent/consumable/ethanol/fringe_weaver - name = "Fringe Weaver" - desc = "It's a wonder it doesn't spill out of the glass." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "fringe_weaver" - /datum/reagent/consumable/ethanol/sugar_rush name = "Sugar Rush" description = "Sweet, light, and fruity - as girly as it gets." @@ -2380,13 +1642,6 @@ nutriment_factor = 2 * REAGENTS_METABOLISM chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/sugar_rush - required_drink_type = /datum/reagent/consumable/ethanol/sugar_rush - name = "Sugar Rush" - desc = "If you can't mix a Sugar Rush, you can't tend bar." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "sugar_rush" - /datum/reagent/consumable/ethanol/sugar_rush/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.satiety -= 10 * REM * seconds_per_tick //junky as hell! a whole glass will keep you from being able to eat junk food ..() @@ -2402,13 +1657,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED bypass_restriction = TRUE -/datum/glass_style/drinking_glass/crevice_spike - required_drink_type = /datum/reagent/consumable/ethanol/crevice_spike - name = "Crevice Spike" - desc = "It'll either knock the drunkenness out of you or knock you out cold. Both, probably." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "crevice_spike" - /datum/reagent/consumable/ethanol/crevice_spike/on_mob_metabolize(mob/living/drinker) //damage only applies when drink first enters system and won't again until drink metabolizes out . = ..() drinker.adjustBruteLoss(3 * min(5,volume), required_bodytype = affected_bodytype) //minimum 3 brute damage on ingestion to limit non-drink means of injury - a full 5 unit gulp of the drink trucks you for the full 15 @@ -2422,12 +1670,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_STOCK -/datum/glass_style/drinking_glass/sake - required_drink_type = /datum/reagent/consumable/ethanol/sake - name = "cup of sake" - desc = "A traditional cup of sake." - icon_state = "sakecup" - /datum/reagent/consumable/ethanol/peppermint_patty name = "Peppermint Patty" description = "This lightly alcoholic drink combines the benefits of menthol and cocoa." @@ -2437,19 +1679,11 @@ quality = DRINK_GOOD chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/peppermint_patty - required_drink_type = /datum/reagent/consumable/ethanol/peppermint_patty - name = "Peppermint Patty" - desc = "A boozy minty hot cocoa that warms your belly on a cold night." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "peppermint_patty" - /datum/reagent/consumable/ethanol/peppermint_patty/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.apply_status_effect(/datum/status_effect/throat_soothed) drinker.adjust_bodytemperature(5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, 0, drinker.get_body_temp_normal()) ..() - /datum/reagent/consumable/ethanol/alexander name = "Alexander" description = "Named after a Greek hero, this mix is said to embolden a user's shield as if they were in a phalanx." @@ -2460,13 +1694,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED var/obj/item/shield/mighty_shield -/datum/glass_style/drinking_glass/alexander - required_drink_type = /datum/reagent/consumable/ethanol/alexander - name = "Alexander" - desc = "A creamy, indulgent delight that is stronger than it seems." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "alexander" - /datum/reagent/consumable/ethanol/alexander/on_mob_metabolize(mob/living/drinker) . = ..() if(ishuman(drinker)) @@ -2497,13 +1724,6 @@ taste_description = "sweet, creamy cacao" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/amaretto_alexander - required_drink_type = /datum/reagent/consumable/ethanol/amaretto_alexander - name = "Amaretto Alexander" - desc = "A creamy, indulgent delight that is in fact as gentle as it seems." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "alexanderam" - /datum/reagent/consumable/ethanol/sidecar name = "Sidecar" description = "The one ride you'll gladly give up the wheel for." @@ -2514,13 +1734,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM -/datum/glass_style/drinking_glass/sidecar - required_drink_type = /datum/reagent/consumable/ethanol/sidecar - name = "Sidecar" - desc = "The one ride you'll gladly give up the wheel for." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "sidecar" - /datum/reagent/consumable/ethanol/between_the_sheets name = "Between the Sheets" description = "A provocatively named classic. Funny enough, doctors recommend drinking it before taking a nap while underneath bedsheets." @@ -2531,13 +1744,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM -/datum/glass_style/drinking_glass/between_the_sheets - required_drink_type = /datum/reagent/consumable/ethanol/between_the_sheets - name = "Between the Sheets" - desc = "The only drink that comes with a label reminding you of Nanotrasen's zero-tolerance promiscuity policy." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "between_the_sheets" - /datum/reagent/consumable/ethanol/between_the_sheets/on_mob_life(mob/living/drinker, seconds_per_tick, times_fired) ..() var/is_between_the_sheets = FALSE @@ -2569,13 +1775,6 @@ taste_description = "divine windiness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/kamikaze - required_drink_type = /datum/reagent/consumable/ethanol/kamikaze - name = "Kamikaze" - desc = "Divinely windy." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "kamikaze" - /datum/reagent/consumable/ethanol/mojito name = "Mojito" description = "A drink that looks as refreshing as it tastes." @@ -2586,13 +1785,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM -/datum/glass_style/drinking_glass/mojito - required_drink_type = /datum/reagent/consumable/ethanol/mojito - name = "Mojito" - desc = "A drink that looks as refreshing as it tastes." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "mojito" - /datum/reagent/consumable/ethanol/moscow_mule name = "Moscow Mule" description = "A chilly drink that reminds you of the Derelict." @@ -2602,13 +1794,6 @@ taste_description = "refreshing spiciness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/moscow_mule - required_drink_type = /datum/reagent/consumable/ethanol/moscow_mule - name = "Moscow Mule" - desc = "A chilly drink that reminds you of the Derelict." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "moscow_mule" - /datum/reagent/consumable/ethanol/fernet name = "Fernet" description = "An incredibly bitter herbal liqueur used as a digestif." @@ -2617,11 +1802,6 @@ taste_description = "utter bitterness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/fernet - required_drink_type = /datum/reagent/consumable/ethanol/fernet - name = "glass of fernet" - desc = "A glass of pure Fernet. Only an absolute madman would drink this alone." //Hi Kevum - /datum/reagent/consumable/ethanol/fernet/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(drinker.nutrition <= NUTRITION_LEVEL_STARVING) drinker.adjustToxLoss(1 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype) @@ -2638,13 +1818,6 @@ taste_description = "sweet relief" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/fernet_cola - required_drink_type = /datum/reagent/consumable/ethanol/fernet_cola - name = "glass of fernet cola" - desc = "A sawed-off cola bottle filled with Fernet Cola. Nothing better after eating like a lardass." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "godlyblend" - /datum/reagent/consumable/ethanol/fernet_cola/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(drinker.nutrition <= NUTRITION_LEVEL_STARVING) drinker.adjustToxLoss(0.5 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype) @@ -2662,12 +1835,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_HIGH -/datum/glass_style/drinking_glass/fanciulli - required_drink_type = /datum/reagent/consumable/ethanol/fanciulli - name = "glass of fanciulli" - desc = "A glass of Fanciulli. It's just Manhattan with Fernet." - icon_state = "fanciulli" - /datum/reagent/consumable/ethanol/fanciulli/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.adjust_nutrition(-5 * REM * seconds_per_tick) drinker.overeatduration = 0 @@ -2689,12 +1856,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM -/datum/glass_style/drinking_glass/branca_menta - required_drink_type = /datum/reagent/consumable/ethanol/branca_menta - name = "glass of branca menta" - desc = "A glass of Branca Menta, perfect for those lazy and hot Sunday summer afternoons." //Get lazy literally by drinking this - icon_state = "minted_fernet" - /datum/reagent/consumable/ethanol/branca_menta/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.adjust_bodytemperature(-20 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, T0C) return ..() @@ -2716,13 +1877,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED bypass_restriction = TRUE -/datum/glass_style/drinking_glass/blank_paper - required_drink_type = /datum/reagent/consumable/ethanol/blank_paper - name = "glass of blank paper" - desc = "A fizzy cocktail for those looking to start fresh." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "blank_paper" - /datum/reagent/consumable/ethanol/blank_paper/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(ishuman(drinker) && HAS_TRAIT(drinker, TRAIT_MIMING)) drinker.set_silence_if_lower(MIMEDRINK_SILENCE_DURATION) @@ -2741,13 +1895,6 @@ var/list/tastes = list("bad coding" = 1) //List of tastes. See above. ph = 4 -/datum/glass_style/drinking_glass/fruit_wine - required_drink_type = /datum/reagent/consumable/ethanol/fruit_wine - // This should really be dynamic like "glass of pineapple wine" or something - // but seeing as fruit wine half doesn't work already I'm not inclined to add support for that now - name = "glass of fruit wine" - desc = "A wine made from grown plants." - /datum/reagent/consumable/ethanol/fruit_wine/on_new(list/data) if(!data) return @@ -2852,12 +1999,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_EASY -/datum/glass_style/drinking_glass/champagne - required_drink_type = /datum/reagent/consumable/ethanol/champagne - name = "Champagne" - desc = "The flute clearly displays the slowly rising bubbles." - icon_state = "champagne_glass" - /datum/reagent/consumable/ethanol/wizz_fizz name = "Wizz Fizz" description = "A magical potion, fizzy and wild! However the taste, you will find, is quite mild." @@ -2867,13 +2008,6 @@ taste_description = "friendship! It is magic, after all" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/wizz_fizz - required_drink_type = /datum/reagent/consumable/ethanol/wizz_fizz - name = "Wizz Fizz" - desc = "The glass bubbles and froths with an almost magical intensity." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "wizz_fizz" - /datum/reagent/consumable/ethanol/wizz_fizz/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) //A healing drink similar to Quadruple Sec, Ling Stings, and Screwdrivers for the Wizznerds; the check is consistent with the changeling sting if(drinker?.mind?.has_antag_datum(/datum/antagonist/wizard)) @@ -2892,13 +2026,6 @@ taste_description = "the pain of ten thousand slain mosquitos" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/bug_spray - required_drink_type = /datum/reagent/consumable/ethanol/bug_spray - name = "Bug Spray" - desc = "Your eyes begin to water as the sting of alcohol reaches them." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "bug_spray" - /datum/reagent/consumable/ethanol/bug_spray/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) //Bugs should not drink Bug spray. if(ismoth(drinker) || isflyperson(drinker)) @@ -2919,12 +2046,6 @@ taste_description = "an honest day's work at the orchard" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/applejack - required_drink_type = /datum/reagent/consumable/ethanol/applejack - name = "Applejack" - desc = "You feel like you could drink this all neight." - icon_state = "applejack_glass" - /datum/reagent/consumable/ethanol/jack_rose name = "Jack Rose" description = "A light cocktail perfect for sipping with a slice of pie." @@ -2934,17 +2055,6 @@ taste_description = "a sweet and sour slice of apple" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/shot_glass/jack_rose - required_drink_type = /datum/reagent/consumable/ethanol/jack_rose - icon_state = "shotglassred" - -/datum/glass_style/drinking_glass/jack_rose - required_drink_type = /datum/reagent/consumable/ethanol/jack_rose - name = "Jack Rose" - desc = "Enough of these, and you really will start to suppose your toeses are roses." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "jack_rose" - /datum/reagent/consumable/ethanol/turbo name = "Turbo" description = "A turbulent cocktail associated with outlaw hoverbike racing. Not for the faint of heart." @@ -2954,13 +2064,6 @@ taste_description = "the outlaw spirit" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/turbo - required_drink_type = /datum/reagent/consumable/ethanol/turbo - name = "Turbo" - desc = "A turbulent cocktail for outlaw hoverbikers." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "turbo" - /datum/reagent/consumable/ethanol/turbo/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(SPT_PROB(2, seconds_per_tick)) to_chat(drinker, span_notice("[pick("You feel disregard for the rule of law.", "You feel pumped!", "Your head is pounding.", "Your thoughts are racing..")]")) @@ -2976,13 +2079,6 @@ taste_description = "simpler times" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/old_timer - required_drink_type = /datum/reagent/consumable/ethanol/old_timer - name = "Old Timer" - desc = "WARNING! May cause premature aging!" - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "old_timer" - /datum/reagent/consumable/ethanol/old_timer/on_mob_life(mob/living/carbon/human/metabolizer, seconds_per_tick, times_fired) if(SPT_PROB(10, seconds_per_tick) && istype(metabolizer)) metabolizer.age += 1 @@ -3012,13 +2108,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED metabolized_traits = list(TRAIT_SHOCKIMMUNE) -/datum/glass_style/drinking_glass/rubberneck - required_drink_type = /datum/reagent/consumable/ethanol/rubberneck - name = "Rubberneck" - desc = "A popular drink amongst those adhering to an all synthetic diet." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "rubberneck" - /datum/reagent/consumable/ethanol/duplex name = "Duplex" description = "An inseparable combination of two fruity drinks." @@ -3028,13 +2117,6 @@ taste_description = "green apples and blue raspberries" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/duplex - required_drink_type = /datum/reagent/consumable/ethanol/duplex - name = "Duplex" - desc = "To imbibe one component separately from the other is consider a great faux pas." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "duplex" - /datum/reagent/consumable/ethanol/trappist name = "Trappist Beer" description = "A strong dark ale brewed by space-monks." @@ -3044,13 +2126,6 @@ taste_description = "dried plums and malt" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/trappist - required_drink_type = /datum/reagent/consumable/ethanol/trappist - name = "Trappist Beer" - desc = "boozy Catholicism in a glass." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "trappistglass" - /datum/reagent/consumable/ethanol/trappist/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(drinker.mind?.holy_role) drinker.adjustFireLoss(-2.5 * REM * seconds_per_tick, FALSE, required_bodytype = affected_bodytype) @@ -3067,13 +2142,6 @@ bypass_restriction = TRUE var/stored_teleports = 0 -/datum/glass_style/drinking_glass/blazaam - required_drink_type = /datum/reagent/consumable/ethanol/blazaam - name = "Blazaam" - desc = "The glass seems to be sliding between realities. Doubles as a Berenstain remover." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "blazaamglass" - /datum/reagent/consumable/ethanol/blazaam/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(drinker.get_drunk_amount() > 40) if(stored_teleports) @@ -3093,13 +2161,6 @@ quality = DRINK_FANTASTIC taste_description = "triumph with a hint of bitterness" -/datum/glass_style/drinking_glass/planet_cracker - required_drink_type = /datum/reagent/consumable/ethanol/planet_cracker - name = "Planet Cracker" - desc = "Although historians believe the drink was originally created to commemorate the end of an important conflict in man's past, its origins have largely been forgotten and it is today seen more as a general symbol of human supremacy." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "planet_cracker" - /datum/reagent/consumable/ethanol/mauna_loa name = "Mauna Loa" description = "Extremely hot; not for the faint of heart!" @@ -3110,13 +2171,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED bypass_restriction = TRUE -/datum/glass_style/drinking_glass/mauna_loa - required_drink_type = /datum/reagent/consumable/ethanol/mauna_loa - name = "Mauna Loa" - desc = "Lavaland in a drink... mug... volcano... thing." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "mauna_loa" - /datum/reagent/consumable/ethanol/mauna_loa/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) // Heats the user up while the reagent is in the body. Occasionally makes you burst into flames. drinker.adjust_bodytemperature(25 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick) @@ -3133,14 +2187,6 @@ quality = DRINK_NICE taste_description = "sugary tartness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED - metabolized_traits = list(TRAIT_ANALGESIA) - -/datum/glass_style/drinking_glass/painkiller - required_drink_type = /datum/reagent/consumable/ethanol/painkiller - name = "Painkiller" - desc = "A combination of tropical juices and rum. Surely this will make you feel better." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "painkiller" /datum/reagent/consumable/ethanol/pina_colada name = "Pina Colada" @@ -3150,13 +2196,6 @@ quality = DRINK_FANTASTIC taste_description = "pineapple, coconut, and a hint of the ocean" -/datum/glass_style/drinking_glass/pina_colada - required_drink_type = /datum/reagent/consumable/ethanol/pina_colada - name = "Pina Colada" - desc = "If you like pina coladas, and getting caught in the rain... well, you'll like this drink." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "pina_colada" - /datum/reagent/consumable/ethanol/pina_olivada name = "Piña Olivada" description = "An oddly designed concoction of olive oil and pineapple juice." @@ -3179,12 +2218,6 @@ to_chat(drinker, span_notice(pick(messages))) return ..() -/datum/glass_style/drinking_glass/pina_olivada - required_drink_type = /datum/reagent/consumable/ethanol/pina_olivada - name = "Piña Olivada" - desc = "A balance of fruity pineapple with thick, rich olive oil. Stir well before drinking." - icon_state = "pina_olivada" - /datum/reagent/consumable/ethanol/pruno // pruno mix is in drink_reagents name = "Pruno" color = "#E78108" @@ -3193,12 +2226,6 @@ taste_description = "your tastebuds being individually shanked" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/pruno - required_drink_type = /datum/reagent/consumable/ethanol/pruno - name = "glass of pruno" - desc = "Fermented prison wine made from fruit, sugar, and despair. Security loves to confiscate this, which is the only kind thing Security has ever done." - icon_state = "glass_orange" - /datum/reagent/consumable/ethanol/pruno/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.adjust_disgust(5 * REM * seconds_per_tick) ..() @@ -3212,13 +2239,6 @@ taste_description = "sweetness followed by a soft sourness and warmth" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/ginger_amaretto - required_drink_type = /datum/reagent/consumable/ethanol/ginger_amaretto - name = "Ginger Amaretto" - desc = "The sprig of rosemary adds a nice aroma to the drink, and isn't just to be pretentious afterall!" - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "gingeramaretto" - /datum/reagent/consumable/ethanol/godfather name = "Godfather" description = "A rough cocktail with illegal connections." @@ -3229,13 +2249,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM -/datum/glass_style/drinking_glass/godfather - required_drink_type = /datum/reagent/consumable/ethanol/godfather - name = "Godfather" - desc = "A classic from old Italy and enjoyed by gangsters, pray the orange peel doesnt end up in your mouth." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "godfather" - /datum/reagent/consumable/ethanol/godmother name = "Godmother" description = "A twist on a classic, liked more by mature women." @@ -3245,13 +2258,6 @@ taste_description = "sweetness and a zesty twist" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/godmother - required_drink_type = /datum/reagent/consumable/ethanol/godmother - name = "Godmother" - desc = "A lovely fresh smelling cocktail, a true Sicilian delight." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "godmother" - /datum/reagent/consumable/ethanol/kortara name = "Kortara" description = "A sweet, milky nut-based drink enjoyed on Tizira. Frequently mixed with fruit juices and cocoa for extra refreshment." @@ -3261,12 +2267,6 @@ taste_description = "sweet nectar" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/kortara - required_drink_type = /datum/reagent/consumable/ethanol/kortara - name = "glass of kortara" - desc = "The fermented nectar of the Korta nut, as enjoyed by lizards galaxywide." - icon_state = "kortara_glass" - /datum/reagent/consumable/ethanol/kortara/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(drinker.getBruteLoss() && SPT_PROB(10, seconds_per_tick)) drinker.heal_bodypart_damage(1,0) @@ -3281,13 +2281,6 @@ taste_description = "mint choc chip" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/sea_breeze - required_drink_type = /datum/reagent/consumable/ethanol/sea_breeze - name = "Sea Breeze" - desc = "Minty, chocolatey, and creamy. It's like drinkable mint chocolate chip!" - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "sea_breeze" - /datum/reagent/consumable/ethanol/sea_breeze/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.apply_status_effect(/datum/status_effect/throat_soothed) ..() @@ -3301,13 +2294,6 @@ taste_description = "strikes and gutters" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/white_tiziran - required_drink_type = /datum/reagent/consumable/ethanol/white_tiziran - name = "White Tiziran" - desc = "I had a rough night and I hate the fucking humans, man." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "white_tiziran" - /datum/reagent/consumable/ethanol/drunken_espatier name = "Drunken Espatier" description = "Look, if you had to get into a shootout in the cold vacuum of space, you'd want to be drunk too." @@ -3317,13 +2303,6 @@ taste_description = "sorrow" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/drunken_espatier - required_drink_type = /datum/reagent/consumable/ethanol/drunken_espatier - name = "Drunken Espatier" - desc = "A drink to make facing death easier." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "drunken_espatier" - /datum/reagent/consumable/ethanol/drunken_espatier/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.add_mood_event("numb", /datum/mood_event/narcotic_medium, name) //comfortably numb ..() @@ -3346,13 +2325,6 @@ nutriment_factor = 3 * REAGENTS_METABOLISM chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/protein_blend - required_drink_type = /datum/reagent/consumable/ethanol/protein_blend - name = "Protein Blend" - desc = "Vile, even by lizard standards." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "protein_blend" - /datum/reagent/consumable/ethanol/protein_blend/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) drinker.adjust_nutrition(2 * REM * seconds_per_tick) if(!islizard(drinker)) @@ -3370,11 +2342,6 @@ taste_description = "sweet 'shrooms" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/mushi_kombucha - required_drink_type = /datum/reagent/consumable/ethanol/mushi_kombucha - name = "glass of mushi kombucha" - icon_state = "glass_orange" - /datum/reagent/consumable/ethanol/triumphal_arch name = "Triumphal Arch" description = "A drink celebrating the Lizard Empire and its military victories. It's popular at bars on Unification Day." @@ -3384,13 +2351,6 @@ taste_description = "victory" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/triumphal_arch - required_drink_type = /datum/reagent/consumable/ethanol/triumphal_arch - name = "Triumphal Arch" - desc = "A toast to the Empire, long may it stand." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "triumphal_arch" - /datum/reagent/consumable/ethanol/triumphal_arch/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(islizard(drinker)) drinker.add_mood_event("triumph", /datum/mood_event/memories_of_home, name) @@ -3406,13 +2366,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED var/datum/brain_trauma/special/bluespace_prophet/prophet_trauma -/datum/glass_style/drinking_glass/the_juice - required_drink_type = /datum/reagent/consumable/ethanol/the_juice - name = "The Juice" - desc = "A concoction of not-so-edible things that apparently lets you feel like you're in two places at once" - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "thejuice" - /datum/reagent/consumable/ethanol/the_juice/on_mob_metabolize(mob/living/carbon/drinker) . = ..() prophet_trauma = new() @@ -3456,12 +2409,6 @@ taste_description = "blue orange" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/curacao - required_drink_type = /datum/reagent/consumable/ethanol/curacao - name = "glass of curaçao" - desc = "It's blue, da ba dee." - icon_state = "curacao" - /datum/reagent/consumable/ethanol/navy_rum //IN THE NAVY name = "Navy Rum" description = "Rum as the finest sailors drink." @@ -3471,12 +2418,6 @@ taste_description = "a life on the waves" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/navy_rum - required_drink_type = /datum/reagent/consumable/ethanol/navy_rum - name = "glass of navy rum" - desc = "Splice the mainbrace, and God save the King." - icon_state = "ginvodkaglass" - /datum/reagent/consumable/ethanol/bitters //why do they call them bitters, anyway? they're more spicy than anything else name = "Andromeda Bitters" description = "A bartender's best friend, often used to lend a delicate spiciness to any drink. Produced in New Trinidad, now and forever." @@ -3486,12 +2427,6 @@ taste_description = "spiced alcohol" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/bitters - required_drink_type = /datum/reagent/consumable/ethanol/bitters - name = "glass of bitters" - desc = "Typically you'd want to mix this with something- but you do you." - icon_state = "bitters" - /datum/reagent/consumable/ethanol/admiralty //navy rum, vermouth, fernet name = "Admiralty" description = "A refined, bitter drink made with navy rum, vermouth and fernet." @@ -3501,13 +2436,6 @@ taste_description = "haughty arrogance" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/admiralty - required_drink_type = /datum/reagent/consumable/ethanol/admiralty - name = "Admiralty" - desc = "Hail to the Admiral, for he brings fair tidings, and rum too." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "admiralty" - /datum/reagent/consumable/ethanol/long_haul //Rum, Curacao, Sugar, dash of bitters, lengthened with soda water name = "Long Haul" description = "A favourite amongst freighter pilots, unscrupulous smugglers, and nerf herders." @@ -3517,13 +2445,6 @@ taste_description = "companionship" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/long_haul - required_drink_type = /datum/reagent/consumable/ethanol/long_haul - name = "Long Haul" - desc = "A perfect companion for a lonely long haul flight." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "long_haul" - /datum/reagent/consumable/ethanol/long_john_silver //navy rum, bitters, lemonade name = "Long John Silver" description = "A long drink of navy rum, bitters, and lemonade. Particularly popular aboard the Mothic Fleet as it's light on ration credits and heavy on flavour." @@ -3533,13 +2454,6 @@ taste_description = "rum and spices" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/long_john_silver - required_drink_type = /datum/reagent/consumable/ethanol/long_john_silver - name = "Long John Silver" - desc = "Named for a famous pirate, who may or may not have been fictional. But hey, why let the truth get in the way of a good yarn?" //Chopper Reid says "How the fuck are ya?" - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "long_john_silver" - /datum/reagent/consumable/ethanol/tropical_storm //dark rum, pineapple juice, triple citrus, curacao name = "Tropical Storm" description = "A taste of the Caribbean in one glass." @@ -3549,13 +2463,6 @@ taste_description = "the tropics" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/tropical_storm - required_drink_type = /datum/reagent/consumable/ethanol/tropical_storm - name = "Tropical Storm" - desc = "Less destructive than the real thing." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "tropical_storm" - /datum/reagent/consumable/ethanol/dark_and_stormy //rum and ginger beer- simple and classic name = "Dark and Stormy" description = "A classic drink arriving to thunderous applause." //thank you, thank you, I'll be here forever @@ -3565,13 +2472,6 @@ taste_description = "ginger and rum" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/dark_and_stormy - required_drink_type = /datum/reagent/consumable/ethanol/dark_and_stormy - name = "Dark and Stormy" - desc = "Thunder and lightning, very very frightening." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "dark_and_stormy" - /datum/reagent/consumable/ethanol/salt_and_swell //navy rum, tochtause syrup, egg whites, dash of saline-glucose solution name = "Salt and Swell" description = "A bracing sour with an interesting salty taste." @@ -3581,13 +2481,6 @@ taste_description = "salt and spice" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/salt_and_swell - required_drink_type = /datum/reagent/consumable/ethanol/salt_and_swell - name = "Salt and Swell" - desc = "Ah, I do like to be beside the seaside." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "salt_and_swell" - /datum/reagent/consumable/ethanol/tiltaellen //yoghurt, salt, vinegar name = "Tiltällen" description = "A lightly fermented yoghurt drink with salt and a light dash of vinegar. Has a distinct sour cheesy flavour." @@ -3597,12 +2490,6 @@ taste_description = "sour cheesy yoghurt" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/tiltaellen - required_drink_type = /datum/reagent/consumable/ethanol/tiltaellen - name = "glass of tiltällen" - desc = "Eww... it's curdled." - icon_state = "tiltaellen" - /datum/reagent/consumable/ethanol/tich_toch name = "Tich Toch" description = "A mix of Tiltällen, Töchtaüse Syrup, and vodka. It's not exactly to everyones' tastes." @@ -3612,13 +2499,6 @@ taste_description = "spicy sour cheesy yoghurt" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/tich_toch - required_drink_type = /datum/reagent/consumable/ethanol/tich_toch - name = "Tich Toch" - desc = "Oh god." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "tich_toch" - /datum/reagent/consumable/ethanol/helianthus name = "Helianthus" description = "A dark yet radiant mixture of absinthe and hallucinogens. The choice of all true artists." @@ -3630,13 +2510,6 @@ var/hal_amt = 4 var/hal_cap = 24 -/datum/glass_style/drinking_glass/helianthus - required_drink_type = /datum/reagent/consumable/ethanol/helianthus - name = "Helianthus" - desc = "Another reason to cut off an ear..." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "helianthus" - /datum/reagent/consumable/ethanol/helianthus/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(SPT_PROB(5, seconds_per_tick)) drinker.adjust_hallucinations_up_to(4 SECONDS * REM * seconds_per_tick, 48 SECONDS) @@ -3653,12 +2526,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_STOCK -/datum/glass_style/drinking_glass/plumwine - required_drink_type = /datum/reagent/consumable/ethanol/plumwine - name = "plum wine" - desc = "Looks like an evening of writing fine poetry." - icon_state = "plumwineglass" - /datum/reagent/consumable/ethanol/the_hat name = "The Hat" description = "A fancy drink, usually served in a man's hat." @@ -3669,12 +2536,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_STOCK -/datum/glass_style/drinking_glass/the_hat - required_drink_type = /datum/reagent/consumable/ethanol/the_hat - name = "The Hat" - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "thehatglass" - /datum/reagent/consumable/ethanol/gin_garden name = "Gin Garden" description = "Excellent cooling alcoholic drink with not so ordinary taste." @@ -3684,13 +2545,6 @@ taste_description = "light gin with sweet ginger and cucumber" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/gin_garden - required_drink_type = /datum/reagent/consumable/ethanol/gin_garden - name = "gin garden" - desc = "Hey, someone forgot the herb and... the cucumber in my cocktail!" - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "gin_garden" - /datum/reagent/consumable/ethanol/gin_garden/on_mob_life(mob/living/carbon/doll, seconds_per_tick, times_fired) doll.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, doll.get_body_temp_normal()) ..() @@ -3703,13 +2557,6 @@ taste_description = "static with a hint of sweetness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/wine_voltaic - required_drink_type = /datum/reagent/consumable/ethanol/wine_voltaic - name = "Voltaic Yellow Wine" - desc = "Electrically charged wine. Recharges etherials, but also nontoxic." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "wine_voltaic" - /datum/reagent/consumable/ethanol/wine_voltaic/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume) //can't be on life because of the way blood works. . = ..() if(!(methods & (INGEST|INJECT|PATCH)) || !iscarbon(exposed_mob)) @@ -3729,13 +2576,6 @@ taste_description = "the howling storm" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/telepole - required_drink_type = /datum/reagent/consumable/ethanol/telepole - name = "Telepole" - desc = "A liquid grounding rod. Recharges etherials and grants temporary shock resistance." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "telepole" - /datum/reagent/consumable/ethanol/telepole/on_mob_metabolize(mob/living/affected_mob) . = ..() ADD_TRAIT(affected_mob, TRAIT_SHOCKIMMUNE, type) @@ -3763,13 +2603,6 @@ taste_description = "victory, with a hint of insanity" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/pod_tesla - required_drink_type = /datum/reagent/consumable/ethanol/pod_tesla - name = "Pod Tesla" - desc = "Ride the lightning! Recharges etherials, suppresses phobias, and grants strong temporary shock resistance." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "pod_tesla" - /datum/reagent/consumable/ethanol/pod_tesla/on_mob_metabolize(mob/living/affected_mob) ..() affected_mob.add_traits(list(TRAIT_SHOCKIMMUNE,TRAIT_TESLA_SHOCKIMMUNE,TRAIT_FEARLESS), type) @@ -3788,5 +2621,215 @@ var/obj/item/organ/internal/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH) if(istype(stomach)) stomach.adjust_charge(reac_volume * 5) + +// Welcome to the Blue Room Bar and Grill, home to Mars' finest cocktails +/datum/reagent/consumable/ethanol/rice_beer + name = "Rice Beer" + description = "A light, rice-based lagered beer popular on Mars. Considered a hate crime against Bavarians under the Reinheitsgebot Act of 1516." + boozepwr = 20 + color = "#664300" + quality = DRINK_NICE + taste_description = "mild carbonated malt" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/shochu + name = "Shochu" + description = "Also known as soju or baijiu, this drink is made from fermented rice, much like sake, but at a generally higher proof making it more similar to a true spirit." + boozepwr = 20 + color = "#DDDDDD" + quality = DRINK_NICE + taste_description = "stiff rice wine" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/yuyake + name = "Yūyake" + description = "A sweet melon liqueur from Japan. Considered a relic of the 1980s by most, it has some niche use in cocktail making, in part due to its bright red colour." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "sweet melon" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/coconut_rum + name = "Coconut Rum" + description = "The distilled essence of the beach. Tastes like bleach-blonde hair and suncream." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "coconut rum" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +// Mixed Martian Drinks +/datum/reagent/consumable/ethanol/yuyakita + name = "Yūyakita" + description = "A hell unleashed upon the world by an unnamed patron." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "death" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/saibasan + name = "Saibāsan" + description = "A drink glorifying Cybersun's enduring business." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "betrayal" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/banzai_ti + name = "Banzai-Tī" + description = "A variation on the Long Island Iced Tea, made with yuyake for an alternative flavour that's hard to place." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "an asian twist on the liquor cabinet" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/sanraizusoda + name = "Sanraizusōda" + description = "It's a melon cream soda, except with alcohol- what's not to love? Well... possibly the hangovers." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "creamy melon soda" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/kumicho + name = "Kumichō" + description = "A new take on a classic cocktail, the Kumicho takes the Godfather formula and adds shochu for an Asian twist." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "rice and rye" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/red_planet + name = "Red Planet" + description = "Made in celebration of the Martian Concession, the Red Planet is based on the classic El Presidente, and is as patriotic as it is bright crimson." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "the spirit of freedom" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/amaterasu + name = "Amaterasu" + description = "Named for Amaterasu, the Shinto Goddess of the Sun, this cocktail embodies radiance- or something like that, anyway." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "sweet nectar of the gods" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/nekomimosa + name = "Nekomimosa" + description = "An overly sweet cocktail, made with melon liqueur, melon juice, and champagne (which contains no melon, unfortunately)." + boozepwr = 20 + color = "#FF0C8D" + quality = DRINK_NICE + taste_description = "MELON" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/sentai_quencha //melon soda, triple citrus, shochu, blue curacao + name = "Sentai Quencha" + description = "Based on the galaxy-famous \"Kyūkyoku no Ninja Pawā Sentai\", the Sentai Quencha is a favourite at anime conventions and weeb bars." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "ultimate ninja power" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/bosozoku + name = "Bōsōzoku" + description = "A simple summer drink from Mars, made from a 1:1 mix of rice beer and lemonade." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "bittersweet lemon" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/ersatzche + name = "Ersatzche" + description = "Sweet, bitter, spicy- that's a great combination." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "spicy pineapple beer" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/red_city_am + name = "Red City AM" + description = "A breakfast drink from New Osaka, for when you really need to get drunk at 9:30 in the morning in more socially acceptable manner than drinking bagwine on the bullet train. Not that you should drink this on the bullet train either." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "breakfast in a glass" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/kings_ransom + name = "King's Ransom" + description = "A stiff, bitter drink with an odd name and odder recipe." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "bitter raspberry" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/four_bit + name = "Four Bit" + description = "A drink to power your typing hands." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "cyberspace" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/white_hawaiian //coconut milk, coconut rum, coffee liqueur + name = "White Hawaiian" + description = "A take on the classic White Russian, subbing out the classics for some tropical flavours." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "COCONUT" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/maui_sunrise //coconut rum, pineapple juice, yuyake, triple citrus, lemon-lime soda + name = "Maui Sunrise" + description = "Behind this drink's red facade lurks a sharp, complex flavour." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "sunrise over the pacific" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/imperial_mai_tai //navy rum, rum, lime, triple sec, korta nectar + name = "Imperial Mai Tai" + description = "For when orgeat is in short supply, do as the spacers do- make do and mend." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "spicy nutty rum" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/konococo_rumtini //todo: add espresso | coffee, coffee liqueur, coconut rum, sugar + name = "Konococo Rumtini" + description = "Coconut rum, coffee liqueur, and espresso- an odd combination, to be sure, but a welcomed one." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "coconut coffee" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/blue_hawaiian //pineapple juice, lemon juice, coconut rum, blue curacao + name = "Blue Hawaiian" + description = "Sweet, sharp and coconutty." + boozepwr = 20 + color = "#F54040" + quality = DRINK_NICE + taste_description = "the aloha state" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + #undef ALCOHOL_EXPONENT #undef ALCOHOL_THRESHOLD_MODIFIER diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm similarity index 69% rename from code/modules/reagents/chemistry/reagents/drink_reagents.dm rename to code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm index 2e3e7efd4543..19b9e82f518d 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm @@ -1,9 +1,3 @@ - - -///////////////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////// DRINKS BELOW, Beer is up there though, along with cola. Cap'n Pete's Cuban Spiced Rum//////////////////////////////// -///////////////////////////////////////////////////////////////////////////////////////////////////////// - /datum/reagent/consumable/orangejuice name = "Orange Juice" description = "Both delicious AND rich in Vitamin C, what more do you need?" @@ -13,20 +7,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED default_container = /obj/item/reagent_containers/cup/glass/bottle/juice/orangejuice -/datum/glass_style/has_foodtype/drinking_glass/orangejuice - required_drink_type = /datum/reagent/consumable/orangejuice - name = "glass of orange juice" - desc = "Vitamins! Yay!" - icon_state = "glass_orange" - drink_type = FRUIT | BREAKFAST - -/datum/glass_style/has_foodtype/juicebox/orangejuice - required_drink_type = /datum/reagent/consumable/orangejuice - name = "orange juice box" - desc = "A great source of vitamins. Stay healthy!" - icon_state = "orangebox" - drink_type = FRUIT | BREAKFAST - /datum/reagent/consumable/orangejuice/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) if(affected_mob.getOxyLoss() && SPT_PROB(16, seconds_per_tick)) affected_mob.adjustOxyLoss(-1, FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) @@ -41,12 +21,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED default_container = /obj/item/reagent_containers/cup/glass/bottle/juice/tomatojuice -/datum/glass_style/drinking_glass/tomatojuice - required_drink_type = /datum/reagent/consumable/tomatojuice - name = "glass of tomato juice" - desc = "Are you sure this is tomato juice?" - icon_state = "glass_red" - /datum/reagent/consumable/tomatojuice/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) if(affected_mob.getFireLoss() && SPT_PROB(10, seconds_per_tick)) affected_mob.heal_bodypart_damage(0, 1) @@ -62,12 +36,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED default_container = /obj/item/reagent_containers/cup/glass/bottle/juice/limejuice -/datum/glass_style/drinking_glass/limejuice - required_drink_type = /datum/reagent/consumable/limejuice - name = "glass of lime juice" - desc = "A glass of sweet-sour lime juice." - icon_state = "glass_green" - /datum/reagent/consumable/limejuice/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) if(affected_mob.getToxLoss() && SPT_PROB(10, seconds_per_tick)) affected_mob.adjustToxLoss(-1, FALSE, required_biotype = affected_biotype) @@ -81,18 +49,10 @@ taste_description = "carrots" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/carrotjuice - required_drink_type = /datum/reagent/consumable/carrotjuice - name = "glass of carrot juice" - desc = "It's just like a carrot but without crunching." - icon_state = "carrotjuice" - /datum/reagent/consumable/carrotjuice/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_eye_blur(-2 SECONDS * REM * seconds_per_tick) affected_mob.adjust_temp_blindness(-2 SECONDS * REM * seconds_per_tick) switch(current_cycle) - if(1 to 20) - //nothing if(21 to 110) if(SPT_PROB(100 * (1 - (sqrt(110 - current_cycle) / 10)), seconds_per_tick)) affected_mob.adjustOrganLoss(ORGAN_SLOT_EYES, -2) @@ -107,12 +67,6 @@ taste_description = "berries" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/berryjuice - required_drink_type = /datum/reagent/consumable/berryjuice - name = "glass of berry juice" - desc = "Berry juice. Or maybe it's jam. Who cares?" - icon_state = "berryjuice" - /datum/reagent/consumable/applejuice name = "Apple Juice" description = "The sweet juice of an apple, fit for all ages." @@ -120,13 +74,6 @@ taste_description = "apples" ph = 3.2 // ~ 2.7 -> 3.7 -/datum/glass_style/has_foodtype/juicebox/applejuice - required_drink_type = /datum/reagent/consumable/applejuice - name = "apple juice box" - desc = "Sweet apple juice. Don't be late for school!" - icon_state = "juicebox" - drink_type = FRUIT - /datum/reagent/consumable/poisonberryjuice name = "Poison Berry Juice" description = "A tasty juice blended from various kinds of very deadly and toxic berries." @@ -134,12 +81,6 @@ taste_description = "berries" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/poisonberryjuice - required_drink_type = /datum/reagent/consumable/poisonberryjuice - name = "glass of berry juice" - desc = "Berry juice. Or maybe it's poison. Who cares?" - icon_state = "poisonberryjuice" - /datum/reagent/consumable/poisonberryjuice/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjustToxLoss(1 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype) . = TRUE @@ -152,12 +93,6 @@ taste_description = "juicy watermelon" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/watermelonjuice - required_drink_type = /datum/reagent/consumable/watermelonjuice - name = "glass of watermelon juice" - desc = "A glass of watermelon juice." - icon_state = "glass_red" - /datum/reagent/consumable/lemonjuice name = "Lemon Juice" description = "This juice is VERY sour." @@ -166,12 +101,6 @@ ph = 2 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/lemonjuice - required_drink_type = /datum/reagent/consumable/lemonjuice - name = "glass of lemon juice" - desc = "Sour..." - icon_state = "lemonglass" - /datum/reagent/consumable/banana name = "Banana Juice" description = "The raw essence of a banana. HONK" @@ -179,12 +108,6 @@ taste_description = "banana" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/banana - required_drink_type = /datum/reagent/consumable/banana - name = "glass of banana juice" - desc = "The raw essence of a banana. HONK." - icon_state = "banana" - /datum/reagent/consumable/banana/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) var/obj/item/organ/internal/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER) if((liver && HAS_TRAIT(liver, TRAIT_COMEDY_METABOLISM)) || ismonkey(affected_mob)) @@ -203,12 +126,6 @@ required_drink_type = /datum/reagent/consumable/nothing icon_state = "shotglass" -/datum/glass_style/drinking_glass/nothing - required_drink_type = /datum/reagent/consumable/nothing - name = "nothing" - desc = "Absolutely nothing." - icon_state = "nothing" - /datum/reagent/consumable/nothing/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) if(ishuman(drinker) && HAS_TRAIT(drinker, TRAIT_MIMING)) drinker.set_silence_if_lower(MIMEDRINK_SILENCE_DURATION) @@ -253,12 +170,6 @@ taste_description = "irish sadness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/potato_juice - required_drink_type = /datum/reagent/consumable/potato_juice - name = "glass of potato juice" - desc = "Bleh..." - icon_state = "glass_brown" - /datum/reagent/consumable/grapejuice name = "Grape Juice" description = "The juice of a bunch of grapes. Guaranteed non-alcoholic." @@ -266,13 +177,6 @@ taste_description = "grape soda" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/has_foodtype/juicebox/grapejuice - required_drink_type = /datum/reagent/consumable/grapejuice - name = "grape juice box" - desc = "Tasty grape juice in a fun little container. Non-alcoholic!" - icon_state = "grapebox" - drink_type = FRUIT - /datum/reagent/consumable/plumjuice name = "Plum Juice" description = "Refreshing and slightly acidic beverage." @@ -280,13 +184,6 @@ taste_description = "plums" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/has_foodtype/drinking_glass/plumjuice - required_drink_type = /datum/reagent/consumable/plumjuice - name = "glass of plum juice" - desc = "Noice." - icon_state = "plumjuiceglass" - drink_type = FRUIT - /datum/reagent/consumable/milk name = "Milk" description = "An opaque white liquid produced by the mammary glands of mammals." @@ -296,20 +193,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED default_container = /obj/item/reagent_containers/condiment/milk -/datum/glass_style/has_foodtype/drinking_glass/milk - required_drink_type = /datum/reagent/consumable/milk - name = "glass of milk" - desc = "White and nutritious goodness!" - icon_state = "glass_white" - drink_type = DAIRY | BREAKFAST - -/datum/glass_style/has_foodtype/juicebox/milk - required_drink_type = /datum/reagent/consumable/milk - name = "carton of milk" - desc = "An excellent source of calcium for growing space explorers." - icon_state = "milkbox" - drink_type = DAIRY | BREAKFAST - // Milk is good for humans, but bad for plants. The sugars cannot be used by plants, and the milk fat harms growth. Not shrooms though. I can't deal with this now... /datum/reagent/consumable/milk/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) . = ..() @@ -335,12 +218,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED default_container = /obj/item/reagent_containers/condiment/soymilk -/datum/glass_style/drinking_glass/soymilk - required_drink_type = /datum/reagent/consumable/soymilk - name = "glass of soy milk" - desc = "White and nutritious soy goodness!" - icon_state = "glass_white" - /datum/reagent/consumable/soymilk/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) if(affected_mob.getBruteLoss() && SPT_PROB(10, seconds_per_tick)) affected_mob.heal_bodypart_damage(1, 0) @@ -355,12 +232,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED default_container = /obj/item/reagent_containers/cup/glass/bottle/juice/cream -/datum/glass_style/drinking_glass/cream - required_drink_type = /datum/reagent/consumable/cream - name = "glass of cream" - desc = "Ewwww..." - icon_state = "glass_white" - /datum/reagent/consumable/cream/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) if(affected_mob.getBruteLoss() && SPT_PROB(10, seconds_per_tick)) affected_mob.heal_bodypart_damage(1, 0) @@ -377,11 +248,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_STOCK -/datum/glass_style/drinking_glass/coffee - required_drink_type = /datum/reagent/consumable/coffee - name = "glass of coffee" - desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere." - icon_state = "glass_brown" /datum/reagent/consumable/coffee/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) affected_mob.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) @@ -408,12 +274,6 @@ glass_price = DRINK_PRICE_STOCK default_container = /obj/item/reagent_containers/cup/glass/mug/tea -/datum/glass_style/drinking_glass/tea - required_drink_type = /datum/reagent/consumable/tea - name = "glass of tea" - desc = "Drinking it from here would not seem right." - icon_state = "teaglass" - /datum/reagent/consumable/tea/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_dizzy(-4 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-2 SECONDS * REM * seconds_per_tick) @@ -463,13 +323,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_EASY -/datum/glass_style/drinking_glass/lemonade - required_drink_type = /datum/reagent/consumable/lemonade - name = "pitcher of lemonade" - desc = "This drink leaves you feeling nostalgic for some reason." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "lemonpitcher" - /datum/reagent/consumable/tea/arnold_palmer name = "Arnold Palmer" description = "Encourages the patient to go golfing." @@ -479,13 +332,6 @@ taste_description = "bitter tea" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/arnold_palmer - required_drink_type = /datum/reagent/consumable/tea/arnold_palmer - name = "Arnold Palmer" - desc = "You feel like taking a few golf swings after a few swigs of this." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "arnold_palmer" - /datum/reagent/consumable/tea/arnold_palmer/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) if(SPT_PROB(2.5, seconds_per_tick)) to_chat(affected_mob, span_notice("[pick("You remember to square your shoulders.","You remember to keep your head down.","You can't decide between squaring your shoulders and keeping your head down.","You remember to relax.","You think about how someday you'll get two strokes off your golf game.")]")) @@ -500,13 +346,6 @@ taste_description = "bitter coldness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/icecoffee - required_drink_type = /datum/reagent/consumable/icecoffee - name = "iced coffee" - desc = "A drink to perk you up and refresh you!" - icon = 'icons/obj/drinks/coffee.dmi' - icon_state = "icedcoffeeglass" - /datum/reagent/consumable/icecoffee/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) @@ -524,13 +363,6 @@ taste_description = "bitter coldness and a hint of smoke" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/hot_ice_coffee - required_drink_type = /datum/reagent/consumable/hot_ice_coffee - name = "hot ice coffee" - desc = "A sharp drink - This can't have come cheap." - icon = 'icons/obj/drinks/coffee.dmi' - icon_state = "hoticecoffee" - /datum/reagent/consumable/hot_ice_coffee/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) @@ -549,13 +381,6 @@ taste_description = "sweet tea" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/icetea - required_drink_type = /datum/reagent/consumable/icetea - name = "iced tea" - desc = "All natural, antioxidant-rich flavour sensation." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "icedteaglass" - /datum/reagent/consumable/icetea/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_dizzy(-4 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-2 SECONDS * REM * seconds_per_tick) @@ -573,12 +398,6 @@ taste_description = "cola" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/space_cola - required_drink_type = /datum/reagent/consumable/space_cola - name = "glass of Space Cola" - desc = "A glass of refreshing Space Cola." - icon_state = "spacecola" - /datum/reagent/consumable/space_cola/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_drowsiness(-10 SECONDS * REM * seconds_per_tick) affected_mob.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) @@ -592,12 +411,6 @@ taste_description = "fruity overlysweet cola" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/roy_rogers - required_drink_type = /datum/reagent/consumable/roy_rogers - name = "Roy Rogers" - desc = "90% sugar in a glass." - icon_state = "royrogers" - /datum/reagent/consumable/roy_rogers/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.set_jitter_if_lower(12 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-10 SECONDS * REM * seconds_per_tick) @@ -612,13 +425,6 @@ taste_description = "the future" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/nuka_cola - required_drink_type = /datum/reagent/consumable/nuka_cola - name = "glass of Nuka Cola" - desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland." - icon = 'icons/obj/drinks/soda.dmi' - icon_state = "nuka_colaglass" - /datum/reagent/consumable/nuka_cola/on_mob_metabolize(mob/living/affected_mob) ..() affected_mob.add_movespeed_modifier(/datum/movespeed_modifier/reagent/nuka_cola) @@ -649,12 +455,6 @@ /// If we activated the effect var/effect_enabled = FALSE -/datum/glass_style/drinking_glass/rootbeer - required_drink_type = /datum/reagent/consumable/rootbeer - name = "glass of root beer" - desc = "A glass of highly potent, incredibly sugary root beer." - icon_state = "spacecola" - /datum/reagent/consumable/rootbeer/on_mob_end_metabolize(mob/living/affected_mob) REMOVE_TRAIT(affected_mob, TRAIT_DOUBLE_TAP, type) if(current_cycle > 10) @@ -687,11 +487,13 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED metabolized_traits = list(TRAIT_SHOCKIMMUNE) -/datum/glass_style/drinking_glass/grey_bull - required_drink_type = /datum/reagent/consumable/grey_bull - name = "glass of Grey Bull" - desc = "Surprisingly it isn't grey." - icon_state = "grey_bull_glass" + +/datum/reagent/consumable/grey_bull/on_mob_metabolize(mob/living/carbon/affected_atom) + ..() + /* var/obj/item/organ/internal/liver/liver = affected_atom.get_organ_slot(ORGAN_SLOT_LIVER) + if(HAS_TRAIT(liver, TRAIT_MAINTENANCE_METABOLISM)) + affected_atom.add_mood_event("maintenance_fun", /datum/mood_event/maintenance_high) + metabolization_rate *= 0.8 */ /datum/reagent/consumable/grey_bull/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.set_jitter_if_lower(40 SECONDS * REM * seconds_per_tick) @@ -708,12 +510,6 @@ taste_description = "sweet citrus soda" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/spacemountainwind - required_drink_type = /datum/reagent/consumable/spacemountainwind - name = "glass of Space Mountain Wind" - desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind." - icon_state = "Space_mountain_wind_glass" - /datum/reagent/consumable/spacemountainwind/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_drowsiness(-14 SECONDS * REM * seconds_per_tick) affected_mob.AdjustSleeping(-20 * REM * seconds_per_tick) @@ -729,12 +525,6 @@ taste_description = "cherry soda" // FALSE ADVERTISING chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/dr_gibb - required_drink_type = /datum/reagent/consumable/dr_gibb - name = "glass of Dr. Gibb" - desc = "Dr. Gibb. Not as dangerous as the container_name might imply." - icon_state = "dr_gibb_glass" - /datum/reagent/consumable/dr_gibb/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_drowsiness(-12 SECONDS * REM * seconds_per_tick) affected_mob.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) @@ -747,12 +537,6 @@ taste_description = "cherry soda" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/space_up - required_drink_type = /datum/reagent/consumable/space_up - name = "glass of Space-Up" - desc = "Space-up. It helps you keep your cool." - icon_state = "space-up_glass" - /datum/reagent/consumable/space_up/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_bodytemperature(-8 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) ..() @@ -764,12 +548,6 @@ taste_description = "tangy lime and lemon soda" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/lemon_lime - required_drink_type = /datum/reagent/consumable/lemon_lime - name = "glass of lemon-lime" - desc = "You're pretty certain a real fruit has never actually touched this." - icon_state = "lemonlime" - /datum/reagent/consumable/lemon_lime/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_bodytemperature(-8 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) ..() @@ -781,12 +559,6 @@ taste_description = "sweet and salty tang" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/pwr_game - required_drink_type = /datum/reagent/consumable/pwr_game - name = "glass of Pwr Game" - desc = "Goes well with a Vlad's salad." - icon_state = "pwrgame" - /datum/reagent/consumable/pwr_game/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume) . = ..() if(exposed_mob?.mind?.get_skill_level(/datum/skill/gaming) >= SKILL_LEVEL_LEGENDARY && (methods & INGEST) && !HAS_TRAIT(exposed_mob, TRAIT_GAMERGOD)) @@ -807,12 +579,6 @@ taste_description = "carbonated metallic soda" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/shamblers - required_drink_type = /datum/reagent/consumable/shamblers - name = "glass of Shambler's juice" - desc = "Mmm mm, shambly." - icon_state = "shamblerjuice" - /datum/reagent/consumable/shamblers/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_bodytemperature(-8 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) ..() @@ -824,12 +590,6 @@ taste_description = "carbonated water" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/sodawater - required_drink_type = /datum/reagent/consumable/sodawater - name = "glass of soda water" - desc = "Soda water. Why not make a scotch and soda?" - icon_state = "glass_clearcarb" - // A variety of nutrients are dissolved in club soda, without sugar. // These nutrients include carbon, oxygen, hydrogen, phosphorous, potassium, sulfur and sodium, all of which are needed for healthy plant growth. /datum/reagent/consumable/sodawater/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) @@ -852,12 +612,6 @@ taste_description = "tart and fresh" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/tonic - required_drink_type = /datum/reagent/consumable/tonic - name = "glass of tonic water" - desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." - icon_state = "glass_clearcarb" - /datum/reagent/consumable/tonic/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) @@ -866,6 +620,24 @@ ..() . = TRUE +/datum/reagent/consumable/wellcheers + name = "Wellcheers" + description = "A strange purple drink, smelling of saltwater. Somewhere in the distance, you hear seagulls." + color = "#762399" // rgb: 118, 35, 153 + taste_description = "grapes and the fresh open sea" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/wellcheers/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + affected_mob.adjust_drowsiness(3 SECONDS * REM * seconds_per_tick) + switch(affected_mob.mob_mood.sanity_level) + if (SANITY_INSANE to SANITY_CRAZY) + affected_mob.stamina.adjust(-3 * REM * seconds_per_tick)//Monkestation Edit: custom stamina + if (SANITY_UNSTABLE to SANITY_DISTURBED) + affected_mob.add_mood_event("wellcheers", /datum/mood_event/wellcheers) + if (SANITY_NEUTRAL to SANITY_GREAT) + affected_mob.adjustBruteLoss(-1.5 * REM * seconds_per_tick, 0) + return ..() + /datum/reagent/consumable/monkey_energy name = "Monkey Energy" description = "The only drink that will make you unleash the ape." @@ -874,12 +646,6 @@ taste_description = "barbecue and nostalgia" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/monkey_energy - required_drink_type = /datum/reagent/consumable/monkey_energy - name = "glass of Monkey Energy" - desc = "You can unleash the ape, but without the pop of the can?" - icon_state = "monkey_energy_glass" - /datum/reagent/consumable/monkey_energy/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.set_jitter_if_lower(80 SECONDS * REM * seconds_per_tick) affected_mob.adjust_dizzy(2 SECONDS * REM * seconds_per_tick) @@ -911,12 +677,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED default_container = /obj/item/reagent_containers/cup/glass/ice -/datum/glass_style/drinking_glass/ice - required_drink_type = /datum/reagent/consumable/ice - name = "glass of ice" - desc = "Generally, you're supposed to put something else in there too..." - icon_state = "iceglass" - /datum/reagent/consumable/ice/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) ..() @@ -930,13 +690,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_EASY -/datum/glass_style/drinking_glass/soy_latte - required_drink_type = /datum/reagent/consumable/soy_latte - name = "soy latte" - desc = "A nice and refreshing beverage while you're reading." - icon = 'icons/obj/drinks/coffee.dmi' - icon_state = "soy_latte" - /datum/reagent/consumable/soy_latte/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) @@ -957,13 +710,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_EASY -/datum/glass_style/drinking_glass/cafe_latte - required_drink_type = /datum/reagent/consumable/cafe_latte - name = "cafe latte" - desc = "A nice, strong and refreshing beverage while you're reading." - icon = 'icons/obj/drinks/coffee.dmi' - icon_state = "cafe_latte" - /datum/reagent/consumable/cafe_latte/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-12 SECONDS * REM * seconds_per_tick) @@ -983,13 +729,6 @@ taste_description = "homely fruit" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/doctor_delight - required_drink_type = /datum/reagent/consumable/doctor_delight - name = "Doctor's Delight" - desc = "The space doctor's favorite. Guaranteed to restore bodily injury; side effects include cravings and hunger." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "doctorsdelightglass" - /datum/reagent/consumable/doctor_delight/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjustBruteLoss(-0.5 * REM * seconds_per_tick, FALSE, required_bodytype = affected_bodytype) affected_mob.adjustFireLoss(-0.5 * REM * seconds_per_tick, FALSE, required_bodytype = affected_bodytype) @@ -1011,13 +750,6 @@ taste_description = "sweet tangy fruit" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/cinderella - required_drink_type = /datum/reagent/consumable/cinderella - name = "Cinderella" - desc = "There is not a single drop of alcohol in this thing." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "cinderella" - /datum/reagent/consumable/cinderella/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_disgust(-5 * REM * seconds_per_tick) return ..() @@ -1032,13 +764,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM -/datum/glass_style/drinking_glass/cherryshake - required_drink_type = /datum/reagent/consumable/cherryshake - name = "cherry shake" - desc = "A cherry flavored milkshake." - icon = 'icons/obj/drinks/shakes.dmi' - icon_state = "cherryshake" - /datum/reagent/consumable/bluecherryshake name = "Blue Cherry Shake" description = "An exotic milkshake." @@ -1048,13 +773,6 @@ taste_description = "creamy blue cherry" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/bluecherryshake - required_drink_type = /datum/reagent/consumable/bluecherryshake - name = "blue cherry shake" - desc = "An exotic blue milkshake." - icon = 'icons/obj/drinks/shakes.dmi' - icon_state = "bluecherryshake" - /datum/reagent/consumable/vanillashake name = "Vanilla Shake" description = "A vanilla flavored milkshake. The basics are still good." @@ -1065,13 +783,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM -/datum/glass_style/drinking_glass/vanillashake - required_drink_type = /datum/reagent/consumable/vanillashake - name = "vanilla shake" - desc = "A vanilla flavored milkshake." - icon = 'icons/obj/drinks/shakes.dmi' - icon_state = "vanillashake" - /datum/reagent/consumable/caramelshake name = "Caramel Shake" description = "A caramel flavored milkshake. Your teeth hurt looking at it." @@ -1082,13 +793,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM -/datum/glass_style/drinking_glass/caramelshake - required_drink_type = /datum/reagent/consumable/caramelshake - name = "caramel shake" - desc = "A caramel flavored milkshake." - icon = 'icons/obj/drinks/shakes.dmi' - icon_state = "caramelshake" - /datum/reagent/consumable/choccyshake name = "Chocolate Shake" description = "A frosty chocolate milkshake." @@ -1099,13 +803,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM -/datum/glass_style/drinking_glass/choccyshake - required_drink_type = /datum/reagent/consumable/choccyshake - name = "chocolate shake" - desc = "A chocolate flavored milkshake." - icon = 'icons/obj/drinks/shakes.dmi' - icon_state = "choccyshake" - /datum/reagent/consumable/strawberryshake name = "Strawberry Shake" description = "A strawberry milkshake." @@ -1116,13 +813,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM -/datum/glass_style/drinking_glass/strawberryshake - required_drink_type = /datum/reagent/consumable/strawberryshake - name = "strawberry shake" - desc = "A strawberry flavored milkshake." - icon = 'icons/obj/drinks/shakes.dmi' - icon_state = "strawberryshake" - /datum/reagent/consumable/bananashake name = "Banana Shake" description = "A banana milkshake. Stuff that clowns drink at their honkday parties." @@ -1133,13 +823,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM -/datum/glass_style/drinking_glass/bananashake - required_drink_type = /datum/reagent/consumable/bananashake - name = "banana shake" - desc = "A banana flavored milkshake." - icon = 'icons/obj/drinks/shakes.dmi' - icon_state = "bananashake" - /datum/reagent/consumable/pumpkin_latte name = "Pumpkin Latte" description = "A mix of pumpkin juice and coffee." @@ -1149,13 +832,6 @@ taste_description = "creamy pumpkin" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/pumpkin_latte - required_drink_type = /datum/reagent/consumable/pumpkin_latte - name = "pumpkin latte" - desc = "A mix of coffee and pumpkin juice." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "pumpkin_latte" - /datum/reagent/consumable/gibbfloats name = "Gibb Floats" description = "Ice cream on top of a Dr. Gibb glass." @@ -1165,13 +841,6 @@ taste_description = "creamy cherry" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/gibbfloats - required_drink_type = /datum/reagent/consumable/gibbfloats - name = "Gibbfloat" - desc = "Dr. Gibb with ice cream on top." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "gibbfloats" - /datum/reagent/consumable/pumpkinjuice name = "Pumpkin Juice" description = "Juiced from real pumpkin." @@ -1194,13 +863,6 @@ taste_description = "extreme bitterness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/triple_citrus - required_drink_type = /datum/reagent/consumable/triple_citrus - name = "glass of triple citrus" - desc = "A mixture of citrus juices. Tangy, yet smooth." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "triplecitrus" //needs own sprite mine are trash //your sprite is great tho - /datum/reagent/consumable/grape_soda name = "Grape Soda" description = "Beloved by children and teetotalers." @@ -1208,10 +870,6 @@ taste_description = "grape soda" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/grape_soda - required_drink_type = /datum/reagent/consumable/grape_soda - name = "glass of grape juice" - /datum/reagent/consumable/grape_soda/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) ..() @@ -1224,13 +882,6 @@ taste_description = "chocolate milk" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/has_foodtype/juicebox/chocolate_milk - required_drink_type = /datum/reagent/consumable/milk/chocolate_milk - name = "carton of chocolate milk" - desc = "Milk for cool kids!" - icon_state = "chocolatebox" - drink_type = SUGAR | DAIRY - /datum/reagent/consumable/hot_coco name = "Hot Coco" description = "Made with love! And coco beans." @@ -1239,13 +890,6 @@ taste_description = "creamy chocolate" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/has_foodtype/drinking_glass/hot_coco - required_drink_type = /datum/reagent/consumable/hot_coco - name = "glass of hot coco" - desc = "A favorite winter drink to warm you up." - icon_state = "chocolateglass" - drink_type = SUGAR | DAIRY - /datum/reagent/consumable/hot_coco/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_bodytemperature(5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, 0, affected_mob.get_body_temp_normal()) if(affected_mob.getBruteLoss() && SPT_PROB(10, seconds_per_tick)) @@ -1264,13 +908,6 @@ taste_description = "thick creamy chocolate" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/italian_coco - required_drink_type = /datum/reagent/consumable/italian_coco - name = "glass of italian coco" - desc = "A spin on a winter favourite, made to please." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "italiancoco" - /datum/reagent/consumable/italian_coco/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_bodytemperature(5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, 0, affected_mob.get_body_temp_normal()) return ..() @@ -1283,12 +920,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED default_container = /obj/item/reagent_containers/cup/glass/bottle/juice/menthol -/datum/glass_style/drinking_glass/menthol - required_drink_type = /datum/reagent/consumable/menthol - name = "glass of menthol" - desc = "Tastes naturally minty, and imparts a very mild numbing sensation." - icon_state = "glass_green" - /datum/reagent/consumable/menthol/on_mob_life(mob/living/affected_mob, seconds_per_tick, times_fired) affected_mob.apply_status_effect(/datum/status_effect/throat_soothed) ..() @@ -1300,11 +931,6 @@ taste_description = "sweet pomegranates" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/grenadine - required_drink_type = /datum/reagent/consumable/grenadine - name = "glass of grenadine" - desc = "Delicious flavored syrup." - /datum/reagent/consumable/parsnipjuice name = "Parsnip Juice" description = "Why..." @@ -1312,11 +938,6 @@ taste_description = "parsnip" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/has_foodtype/drinking_glass/parsnipjuice - required_drink_type = /datum/reagent/consumable/parsnipjuice - name = "glass of parsnip juice" - drink_type = FRUIT - /datum/reagent/consumable/pineapplejuice name = "Pineapple Juice" description = "Tart, tropical, and hotly debated." @@ -1325,19 +946,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED default_container = /obj/item/reagent_containers/cup/glass/bottle/juice/pineapplejuice -/datum/glass_style/has_foodtype/drinking_glass/pineapplejuice - required_drink_type = /datum/reagent/consumable/pineapplejuice - name = "glass of pineapple juice" - desc = "Tart, tropical, and hotly debated." - drink_type = FRUIT | PINEAPPLE - -/datum/glass_style/has_foodtype/juicebox/pineapplejuice - required_drink_type = /datum/reagent/consumable/pineapplejuice - name = "pineapple juice box" - desc = "Why would you even want this?" - icon_state = "pineapplebox" - drink_type = FRUIT | PINEAPPLE - /datum/reagent/consumable/peachjuice //Intended to be extremely rare due to being the limiting ingredients in the blazaam drink name = "Peach Juice" description = "Just peachy." @@ -1345,11 +953,6 @@ taste_description = "peaches" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/has_foodtype/drinking_glass/peachjuice - required_drink_type = /datum/reagent/consumable/peachjuice - name = "glass of peach juice" - drink_type = FRUIT - /datum/reagent/consumable/cream_soda name = "Cream Soda" description = "A classic space-American vanilla flavored soft drink." @@ -1358,13 +961,6 @@ taste_description = "fizzy vanilla" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/cream_soda - required_drink_type = /datum/reagent/consumable/cream_soda - name = "Cream Soda" - desc = "A classic space-American vanilla flavored soft drink." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "cream_soda" - /datum/reagent/consumable/cream_soda/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) ..() @@ -1377,12 +973,6 @@ taste_description = "sweet ginger spice" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/sol_dry - required_drink_type = /datum/reagent/consumable/sol_dry - name = "Sol Dry" - desc = "A soothing, mellow drink made from ginger." - icon_state = "soldry" - /datum/reagent/consumable/sol_dry/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_disgust(-5 * REM * seconds_per_tick) ..() @@ -1395,13 +985,6 @@ taste_description = "sweet cherry syrup and ginger spice" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/shirley_temple - required_drink_type = /datum/reagent/consumable/shirley_temple - name = "Shirley Temple" - desc = "Ginger ale with processed grenadine. " - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "shirleytemple" - /datum/reagent/consumable/shirley_temple/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_disgust(-3 * REM * seconds_per_tick) return ..() @@ -1416,30 +999,21 @@ bypass_restriction = TRUE var/current_size = RESIZE_DEFAULT_SIZE -/datum/glass_style/drinking_glass/red_queen - required_drink_type = /datum/reagent/consumable/red_queen - name = "Red Queen" - desc = "DRINK ME." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "red_queen" - /datum/reagent/consumable/red_queen/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) if(SPT_PROB(50, seconds_per_tick)) return ..() var/newsize = pick(0.5, 0.75, 1, 1.50, 2) newsize *= RESIZE_DEFAULT_SIZE - affected_mob.resize = newsize/current_size + affected_mob.update_transform(newsize/current_size) current_size = newsize - affected_mob.update_transform() if(SPT_PROB(23, seconds_per_tick)) affected_mob.emote("sneeze") ..() /datum/reagent/consumable/red_queen/on_mob_end_metabolize(mob/living/affected_mob) - affected_mob.resize = RESIZE_DEFAULT_SIZE/current_size + affected_mob.update_transform(RESIZE_DEFAULT_SIZE/current_size) current_size = RESIZE_DEFAULT_SIZE - affected_mob.update_transform() ..() /datum/reagent/consumable/bungojuice @@ -1449,12 +1023,6 @@ taste_description = "succulent bungo" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/bungojuice - required_drink_type = /datum/reagent/consumable/bungojuice - name = "glass of bungo juice" - desc = "Exotic! You feel like you are on vacation already." - icon_state = "glass_yellow" - /datum/reagent/consumable/prunomix name = "Pruno Mixture" color = "#E78108" @@ -1462,12 +1030,6 @@ taste_description = "garbage" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/prunomix - required_drink_type = /datum/reagent/consumable/prunomix - name = "glass of pruno mixture" - desc = "Fruit, sugar, yeast, and water pulped together into a pungent slurry." - icon_state = "glass_orange" - /datum/reagent/consumable/aloejuice name = "Aloe Juice" color = "#A3C48B" @@ -1475,12 +1037,6 @@ taste_description = "vegetable" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/aloejuice - required_drink_type = /datum/reagent/consumable/aloejuice - name = "glass of aloe juice" - desc = "A healthy and refreshing juice." - icon_state = "glass_yellow" - /datum/reagent/consumable/aloejuice/on_mob_life(mob/living/affected_mob, seconds_per_tick, times_fired) if(affected_mob.getToxLoss() && SPT_PROB(16, seconds_per_tick)) affected_mob.adjustToxLoss(-1, FALSE, required_biotype = affected_biotype) @@ -1495,13 +1051,6 @@ taste_description = "cool refreshing watermelon" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/agua_fresca - required_drink_type = /datum/reagent/consumable/agua_fresca - name = "Agua Fresca" - desc = "90% water, but still refreshing." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "aguafresca" - /datum/reagent/consumable/agua_fresca/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjust_bodytemperature(-8 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) if(affected_mob.getToxLoss() && SPT_PROB(10, seconds_per_tick)) @@ -1516,12 +1065,6 @@ taste_description = "mushrooms" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/mushroom_tea - required_drink_type = /datum/reagent/consumable/mushroom_tea - name = "glass of mushroom tea" - desc = "Oddly savoury for a drink." - icon_state = "mushroom_tea_glass" - /datum/reagent/consumable/mushroom_tea/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) if(islizard(affected_mob)) affected_mob.adjustOxyLoss(-0.5 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) @@ -1537,12 +1080,6 @@ taste_description = "fiery itchy pain" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/toechtauese_juice - required_drink_type = /datum/reagent/consumable/toechtauese_juice - name = "glass of töchtaüse juice" - desc = "Raw, unadulterated töchtaüse juice. One swig will fill you with regrets." - icon_state = "toechtauese_syrup" - /datum/reagent/consumable/toechtauese_syrup name = "Töchtaüse Syrup" description = "A harsh spicy and bitter syrup, made from töchtaüse berries. Useful as an ingredient, both for food and cocktails." @@ -1551,12 +1088,6 @@ taste_description = "sugar, spice, and nothing nice" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/toechtauese_syrup - required_drink_type = /datum/reagent/consumable/toechtauese_syrup - name = "glass of töchtaüse syrup" - desc = "Not for drinking on its own." - icon_state = "toechtauese_syrup" - /datum/reagent/consumable/strawberry_banana name = "strawberry banana smoothie" description = "A classic smoothie made from strawberries and bananas." @@ -1565,13 +1096,6 @@ taste_description = "strawberry and banana" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/strawberry_banana - required_drink_type = /datum/reagent/consumable/strawberry_banana - name = "strawberry banana smoothie" - desc = "A classic drink which countless souls have bonded over..." - icon = 'icons/obj/drinks/shakes.dmi' - icon_state = "strawberry_banana" - /datum/reagent/consumable/berry_blast name = "berry blast smoothie" description = "A classic smoothie made from mixed berries." @@ -1580,13 +1104,6 @@ taste_description = "mixed berry" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/berry_blast - required_drink_type = /datum/reagent/consumable/berry_blast - name = "berry blast smoothie" - desc = "A classic drink, freshly made with hand picked berries. Or, maybe not." - icon = 'icons/obj/drinks/shakes.dmi' - icon_state = "berry_blast" - /datum/reagent/consumable/funky_monkey name = "funky monkey smoothie" description = "A classic smoothie made from chocolate and bananas." @@ -1595,13 +1112,6 @@ taste_description = "chocolate and banana" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/funky_monkey - required_drink_type = /datum/reagent/consumable/funky_monkey - name = "funky monkey smoothie" - desc = "A classic drink made with chocolate and banana. No monkeys were harmed, officially." - icon = 'icons/obj/drinks/shakes.dmi' - icon_state = "funky_monkey" - /datum/reagent/consumable/green_giant name = "green giant smoothie" description = "A green vegetable smoothie, made without vegetables." @@ -1610,13 +1120,6 @@ taste_description = "green, just green" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/green_giant - required_drink_type = /datum/reagent/consumable/green_giant - name = "green giant smoothie" - desc = "A classic drink, if you enjoy juiced wheatgrass and chia seeds." - icon = 'icons/obj/drinks/shakes.dmi' - icon_state = "green_giant" - /datum/reagent/consumable/melon_baller name = "melon baller smoothie" description = "A classic smoothie made from melons." @@ -1625,13 +1128,6 @@ taste_description = "fresh melon" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/melon_baller - required_drink_type = /datum/reagent/consumable/melon_baller - name = "melon baller smoothie" - desc = "A wonderfully fresh melon smoothie. Guaranteed to brighten your day." - icon = 'icons/obj/drinks/shakes.dmi' - icon_state = "melon_baller" - /datum/reagent/consumable/vanilla_dream name = "vanilla dream smoothie" description = "A classic smoothie made from vanilla and fresh cream." @@ -1640,13 +1136,6 @@ taste_description = "creamy vanilla" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/vanilla_dream - required_drink_type = /datum/reagent/consumable/vanilla_dream - name = "vanilla dream smoothie" - desc = "A classic drink made with vanilla and fresh cream." - icon = 'icons/obj/drinks/shakes.dmi' - icon_state = "vanilla_dream" - /datum/reagent/consumable/cucumberjuice name = "Cucumber Juice" description = "Ordinary cucumber juice, nothing from the fantasy world." @@ -1654,27 +1143,14 @@ taste_description = "light cucumber" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/cucumberjuice - required_drink_type = /datum/reagent/consumable/cucumberjuice - name = "glass of cucumber juice" - desc = "A glass of cucumber juice." - icon_state = "glass_cucumber" - /datum/reagent/consumable/cucumberlemonade name = "Cucumber Lemonade" - description = "Cucumber juice, sugar and soda, what else is needed for happiness?" + description = "Cucumber juice, sugar, and soda; what else do I need?" color = "#6cd87a" quality = DRINK_GOOD taste_description = "citrus soda with cucumber" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/cucumberlemonade - required_drink_type = /datum/reagent/consumable/cucumberlemonade - name = "cucumber lemonade" - desc = "The smell of cucumber from lemonade, I'm sure I won't get poisoned?." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "cucumber_lemonade" - /datum/reagent/consumable/cucumberlemonade/on_mob_life(mob/living/carbon/doll, seconds_per_tick, times_fired) doll.adjust_bodytemperature(-8 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, doll.get_body_temp_normal()) if(doll.getToxLoss() && SPT_PROB(10, seconds_per_tick)) @@ -1688,13 +1164,6 @@ taste_description = "sludge seeping down your throat" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/glass_style/drinking_glass/mississippi_queen - required_drink_type = /datum/reagent/consumable/mississippi_queen - name = "Mississippi Queen" - desc = "Mullets and cut-up jorts not included." - icon = 'icons/obj/drinks/mixed_drinks.dmi' - icon_state = "mississippiglass" - /datum/reagent/consumable/mississippi_queen/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) switch(current_cycle) if(10 to 20) @@ -1706,3 +1175,41 @@ drinker.adjust_hallucinations(60 SECONDS * REM * seconds_per_tick) return ..() + +/datum/reagent/consumable/hakka_mate + name = "Hakka-Mate" + description = "A Martian-made yerba mate soda, dragged straight out of the pits of a hacking convention." + color = "#c4b000" + taste_description = "bubbly yerba mate" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/coconut_milk + name = "Coconut Milk" + description = "A versatile milk substitute that's perfect for everything from cooking to making cocktails." + color = "#DFDFDF" + taste_description = "milky coconut" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/melon_soda + name = "Melon Soda" + description = "A neon green hit of nostalgia." + color = "#6FEB48" + taste_description = "fizzy melon" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/volt_energy + name = "24-Volt Energy" + description = "An artificially coloured and flavoured electric energy drink, in lanternfruit flavour. Made for ethereals, by ethereals." + color = "#99E550" + taste_description = "sour pear" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/volt_energy/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume) + . = ..() + if(!(methods & (INGEST|INJECT|PATCH)) || !iscarbon(exposed_mob)) + return + + var/mob/living/carbon/exposed_carbon = exposed_mob + var/obj/item/organ/internal/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH) + if(istype(stomach)) + stomach.adjust_charge(reac_volume * 3) diff --git a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/alcohol.dm b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/alcohol.dm new file mode 100644 index 000000000000..bb9e5869ca80 --- /dev/null +++ b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/alcohol.dm @@ -0,0 +1,266 @@ +/datum/glass_style/drinking_glass/beer + required_drink_type = /datum/reagent/consumable/ethanol/beer + name = "glass of beer" + desc = "A freezing pint of beer." + icon_state = "beerglass" + +/datum/glass_style/drinking_glass/beer/light + required_drink_type = /datum/reagent/consumable/ethanol/beer/light + name = "glass of light beer" + desc = "A freezing pint of watery light beer." + +/datum/glass_style/drinking_glass/beer/light + required_drink_type = /datum/reagent/consumable/ethanol/beer/maltliquor + name = "glass of malt liquor" + desc = "A freezing pint of malt liquor." + +/datum/glass_style/drinking_glass/beer/green + required_drink_type = /datum/reagent/consumable/ethanol/beer/green + name = "glass of green beer" + desc = "A freezing pint of green beer. Festive." + icon_state = "greenbeerglass" + +/datum/glass_style/drinking_glass/kahlua + required_drink_type = /datum/reagent/consumable/ethanol/kahlua + name = "glass of RR coffee liquor" + desc = "DAMN, THIS THING LOOKS ROBUST!" + icon_state ="kahluaglass" + +/datum/glass_style/drinking_glass/whiskey + required_drink_type = /datum/reagent/consumable/ethanol/whiskey + name = "glass of whiskey" + desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy." + icon_state = "whiskeyglass" + +/datum/glass_style/drinking_glass/whiskey/kong + required_drink_type = /datum/reagent/consumable/ethanol/whiskey/kong + name = "glass of Kong" + desc = "Makes You Go Ape!®" + +/datum/glass_style/drinking_glass/whiskey/candycorn + required_drink_type = /datum/reagent/consumable/ethanol/whiskey/candycorn + name = "glass of candy corn liquor" + desc = "Good for your Imagination." + +/datum/glass_style/drinking_glass/thirteenloko + required_drink_type = /datum/reagent/consumable/ethanol/thirteenloko + name = "glass of Thirteen Loko" + desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass." + icon_state = "thirteen_loko_glass" + +/datum/glass_style/drinking_glass/vodka + required_drink_type = /datum/reagent/consumable/ethanol/vodka + name = "glass of vodka" + desc = "The glass contain wodka. Xynta." + icon_state = "ginvodkaglass" + +/datum/glass_style/drinking_glass/gin + required_drink_type = /datum/reagent/consumable/ethanol/gin + name = "glass of gin" + desc = "A crystal clear glass of Griffeater gin." + icon_state = "ginvodkaglass" + +/datum/glass_style/drinking_glass/rum + required_drink_type = /datum/reagent/consumable/ethanol/rum + name = "glass of rum" + desc = "Now you want to pray for a pirate suit, don't you?" + icon_state = "rumglass" + +/datum/glass_style/drinking_glass/tequila + required_drink_type = /datum/reagent/consumable/ethanol/tequila + name = "glass of tequila" + desc = "Now all that's missing is the weird colored shades!" + icon_state = "tequilaglass" + +/datum/glass_style/drinking_glass/vermouth + required_drink_type = /datum/reagent/consumable/ethanol/vermouth + name = "glass of vermouth" + desc = "You wonder why you're even drinking this straight." + icon_state = "vermouthglass" + +/datum/glass_style/drinking_glass/wine + required_drink_type = /datum/reagent/consumable/ethanol/wine + name = "glass of wine" + desc = "A very classy looking drink." + icon_state = "wineglass" + +/datum/glass_style/drinking_glass/grappa + required_drink_type = /datum/reagent/consumable/ethanol/grappa + name = "glass of grappa" + desc = "A fine drink originally made to prevent waste by using the leftovers from winemaking." + icon_state = "grappa" + +/datum/glass_style/drinking_glass/amaretto + required_drink_type = /datum/reagent/consumable/ethanol/amaretto + name = "glass of amaretto" + desc = "A sweet and syrupy looking drink." + icon_state = "amarettoglass" +/datum/glass_style/drinking_glass/cognac + required_drink_type = /datum/reagent/consumable/ethanol/cognac + name = "glass of cognac" + desc = "Damn, you feel like some kind of French aristocrat just by holding this." + icon_state = "cognacglass" + +/datum/glass_style/drinking_glass/absinthe + required_drink_type = /datum/reagent/consumable/ethanol/absinthe + name = "glass of absinthe" + desc = "It's as strong as it smells." + icon_state = "absinthe" + +/datum/glass_style/drinking_glass/hooch + required_drink_type = /datum/reagent/consumable/ethanol/hooch + name = "glass of ale" + desc = "A freezing pint of delicious Ale." + icon_state = "aleglass" + +/datum/glass_style/drinking_glass/goldschlager + required_drink_type = /datum/reagent/consumable/ethanol/goldschlager + name = "glass of goldschlager" + desc = "100% proof that teen girls will drink anything with gold in it." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "goldschlagerglass" + +/datum/glass_style/drinking_glass/patron + required_drink_type = /datum/reagent/consumable/ethanol/patron + name = "glass of patron" + desc = "Drinking patron in the bar, with all the subpar ladies." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "patronglass" + +/datum/glass_style/drinking_glass/sake + required_drink_type = /datum/reagent/consumable/ethanol/sake + name = "cup of sake" + desc = "A traditional cup of sake." + icon_state = "sakecup" + +/datum/glass_style/drinking_glass/fernet + required_drink_type = /datum/reagent/consumable/ethanol/fernet + name = "glass of fernet" + desc = "A glass of pure Fernet. Only an absolute madman would drink this alone." //Hi Kevum + +/datum/glass_style/drinking_glass/fruit_wine + required_drink_type = /datum/reagent/consumable/ethanol/fruit_wine + // This should really be dynamic like "glass of pineapple wine" or something + // but seeing as fruit wine half doesn't work already I'm not inclined to add support for that now + name = "glass of fruit wine" + desc = "A wine made from grown plants." + +/datum/glass_style/drinking_glass/champagne + required_drink_type = /datum/reagent/consumable/ethanol/champagne + name = "Champagne" + desc = "The flute clearly displays the slowly rising bubbles." + icon_state = "champagne_glass" + +/datum/glass_style/drinking_glass/pruno + required_drink_type = /datum/reagent/consumable/ethanol/pruno + name = "glass of pruno" + desc = "Fermented prison wine made from fruit, sugar, and despair. Security loves to confiscate this, which is the only kind thing Security has ever done." + icon_state = "glass_orange" + +/datum/glass_style/drinking_glass/navy_rum + required_drink_type = /datum/reagent/consumable/ethanol/navy_rum + name = "glass of navy rum" + desc = "Splice the mainbrace, and God save the King." + icon_state = "ginvodkaglass" + +/datum/glass_style/drinking_glass/curacao + required_drink_type = /datum/reagent/consumable/ethanol/curacao + name = "glass of curaçao" + desc = "It's blue, da ba dee." + icon_state = "curacao" + +/datum/glass_style/drinking_glass/bitters + required_drink_type = /datum/reagent/consumable/ethanol/bitters + name = "glass of bitters" + desc = "Typically you'd want to mix this with something- but you do you." + icon_state = "bitters" + +/datum/glass_style/drinking_glass/coconut_rum + required_drink_type = /datum/reagent/consumable/ethanol/coconut_rum + name = "glass of coconut rum" + desc = "Breathe in and relax, you're on vacation until this glass is empty." + icon = 'icons/obj/drinks/drinks.dmi' + icon_state = "ginvodkaglass" + +/datum/glass_style/drinking_glass/yuyake + required_drink_type = /datum/reagent/consumable/ethanol/yuyake + name = "glass of yūyake" + desc = "It's the saccharine essence of the 70s in a glass... the 1970s, that is!" + icon = 'icons/obj/drinks/drinks.dmi' + icon_state = "glass_red" + +/datum/glass_style/drinking_glass/shochu + required_drink_type = /datum/reagent/consumable/ethanol/shochu + name = "glass of shochu" + desc = "A glass of strong rice wine." + icon = 'icons/obj/drinks/drinks.dmi' + icon_state = "ginvodkaglass" + +/datum/glass_style/drinking_glass/rice_beer + required_drink_type = /datum/reagent/consumable/ethanol/rice_beer + name = "glass of rice beer" + desc = "A glass of fine, light rice beer. Best enjoyed cold." + icon = 'icons/obj/drinks/drinks.dmi' + icon_state = "rice_beer" + +// Shot glasses + +/datum/glass_style/shot_glass/kahlua + required_drink_type = /datum/reagent/consumable/ethanol/kahlua + icon_state ="shotglasscream" + +/datum/glass_style/shot_glass/whiskey + required_drink_type = /datum/reagent/consumable/ethanol/whiskey + icon_state = "shotglassbrown" + +/datum/glass_style/shot_glass/whiskey/kong + required_drink_type = /datum/reagent/consumable/ethanol/whiskey/kong + +/datum/glass_style/shot_glass/whiskey/candycorn + required_drink_type = /datum/reagent/consumable/ethanol/whiskey/candycorn + +/datum/glass_style/shot_glass/vodka + required_drink_type = /datum/reagent/consumable/ethanol/vodka + icon_state = "shotglassclear" + +/datum/glass_style/shot_glass/rum + required_drink_type = /datum/reagent/consumable/ethanol/rum + icon_state = "shotglassbrown" + +/datum/glass_style/shot_glass/tequila + required_drink_type = /datum/reagent/consumable/ethanol/tequila + icon_state = "shotglassgold" + +/datum/glass_style/shot_glass/vermouth + required_drink_type = /datum/reagent/consumable/ethanol/vermouth + icon_state = "shotglassclear" + +/datum/glass_style/shot_glass/wine + required_drink_type = /datum/reagent/consumable/ethanol/wine + icon_state = "shotglassred" + +/datum/glass_style/shot_glass/amaretto + required_drink_type = /datum/reagent/consumable/ethanol/amaretto + icon_state = "shotglassgold" + +/datum/glass_style/shot_glass/cognac + required_drink_type = /datum/reagent/consumable/ethanol/cognac + icon_state = "shotglassbrown" + +/datum/glass_style/shot_glass/absinthe + required_drink_type = /datum/reagent/consumable/ethanol/absinthe + icon_state = "shotglassgreen" + +/datum/glass_style/drinking_glass/hooch + required_drink_type = /datum/reagent/consumable/ethanol/hooch + name = "Hooch" + desc = "You've really hit rock bottom now... your liver packed its bags and left last night." + icon_state = "glass_brown2" + +/datum/glass_style/shot_glass/goldschlager + required_drink_type = /datum/reagent/consumable/ethanol/goldschlager + icon_state = "shotglassgold" + +/datum/glass_style/shot_glass/patron + required_drink_type = /datum/reagent/consumable/ethanol/patron + icon_state = "shotglassclear" diff --git a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/coffee_tea.dm b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/coffee_tea.dm new file mode 100644 index 000000000000..79ba13a4acb4 --- /dev/null +++ b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/coffee_tea.dm @@ -0,0 +1,75 @@ +// Coffees and Teas + +/datum/glass_style/drinking_glass/coffee + required_drink_type = /datum/reagent/consumable/coffee + name = "glass of coffee" + desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere." + icon_state = "glass_brown" + +/datum/glass_style/drinking_glass/tea + required_drink_type = /datum/reagent/consumable/tea + name = "glass of tea" + desc = "Drinking it from here would not seem right." + icon_state = "teaglass" + +/datum/glass_style/drinking_glass/icecoffee + required_drink_type = /datum/reagent/consumable/icecoffee + name = "iced coffee" + desc = "A drink to perk you up and refresh you!" + icon = 'icons/obj/drinks/coffee.dmi' + icon_state = "icedcoffeeglass" + +/datum/glass_style/drinking_glass/hot_ice_coffee + required_drink_type = /datum/reagent/consumable/hot_ice_coffee + name = "hot ice coffee" + desc = "A sharp drink - This can't have come cheap." + icon = 'icons/obj/drinks/coffee.dmi' + icon_state = "hoticecoffee" + +/datum/glass_style/drinking_glass/icetea + required_drink_type = /datum/reagent/consumable/icetea + name = "iced tea" + desc = "All natural, antioxidant-rich flavour sensation." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "icedteaglass" + +/datum/glass_style/drinking_glass/soy_latte + required_drink_type = /datum/reagent/consumable/soy_latte + name = "soy latte" + desc = "A nice and refreshing beverage while you're reading." + icon = 'icons/obj/drinks/coffee.dmi' + icon_state = "soy_latte" + +/datum/glass_style/drinking_glass/cafe_latte + required_drink_type = /datum/reagent/consumable/cafe_latte + name = "cafe latte" + desc = "A nice, strong and refreshing beverage while you're reading." + icon = 'icons/obj/drinks/coffee.dmi' + icon_state = "cafe_latte" + +/datum/glass_style/drinking_glass/pumpkin_latte + required_drink_type = /datum/reagent/consumable/pumpkin_latte + name = "pumpkin latte" + desc = "A mix of coffee and pumpkin juice." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "pumpkin_latte" + +/datum/glass_style/has_foodtype/drinking_glass/hot_coco + required_drink_type = /datum/reagent/consumable/hot_coco + name = "glass of hot coco" + desc = "A favorite winter drink to warm you up." + icon_state = "chocolateglass" + drink_type = SUGAR | DAIRY + +/datum/glass_style/drinking_glass/italian_coco + required_drink_type = /datum/reagent/consumable/italian_coco + name = "glass of italian coco" + desc = "A spin on a winter favourite, made to please." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "italiancoco" + +/datum/glass_style/drinking_glass/mushroom_tea + required_drink_type = /datum/reagent/consumable/mushroom_tea + name = "glass of mushroom tea" + desc = "Oddly savoury for a drink." + icon_state = "mushroom_tea_glass" diff --git a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/dairy.dm b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/dairy.dm new file mode 100644 index 000000000000..e788a589ad12 --- /dev/null +++ b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/dairy.dm @@ -0,0 +1,41 @@ +// Dairy + +/datum/glass_style/has_foodtype/drinking_glass/milk + required_drink_type = /datum/reagent/consumable/milk + name = "glass of milk" + desc = "White and nutritious goodness!" + icon_state = "glass_white" + drink_type = DAIRY | BREAKFAST + +/datum/glass_style/has_foodtype/juicebox/milk + required_drink_type = /datum/reagent/consumable/milk + name = "carton of milk" + desc = "An excellent source of calcium for growing space explorers." + icon_state = "milkbox" + drink_type = DAIRY | BREAKFAST + +/datum/glass_style/has_foodtype/juicebox/chocolate_milk + required_drink_type = /datum/reagent/consumable/milk/chocolate_milk + name = "carton of chocolate milk" + desc = "Milk for cool kids!" + icon_state = "chocolatebox" + drink_type = SUGAR | DAIRY + +/datum/glass_style/drinking_glass/soymilk + required_drink_type = /datum/reagent/consumable/soymilk + name = "glass of soy milk" + desc = "White and nutritious soy goodness!" + icon_state = "glass_white" + +/datum/glass_style/drinking_glass/cream + required_drink_type = /datum/reagent/consumable/cream + name = "glass of cream" + desc = "Ewwww..." + icon_state = "glass_white" + +/datum/glass_style/drinking_glass/coconut_milk + required_drink_type = /datum/reagent/consumable/coconut_milk + name = "glass of coconut milk" + desc = "The essence of the tropics, contained safely within a glass." + icon = 'icons/obj/drinks/drinks.dmi' + icon_state = "glass_white" diff --git a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/juices.dm b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/juices.dm new file mode 100644 index 000000000000..6f837d8f5158 --- /dev/null +++ b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/juices.dm @@ -0,0 +1,175 @@ +// Fruit/veggie juices and syrups + +/datum/glass_style/has_foodtype/drinking_glass/orangejuice + required_drink_type = /datum/reagent/consumable/orangejuice + name = "glass of orange juice" + desc = "Vitamins! Yay!" + icon_state = "glass_orange" + drink_type = FRUIT | BREAKFAST + +/datum/glass_style/has_foodtype/juicebox/orangejuice + required_drink_type = /datum/reagent/consumable/orangejuice + name = "orange juice box" + desc = "A great source of vitamins. Stay healthy!" + icon_state = "orangebox" + drink_type = FRUIT | BREAKFAST + +/datum/glass_style/has_foodtype/juicebox/applejuice + required_drink_type = /datum/reagent/consumable/applejuice + name = "apple juice box" + desc = "Sweet apple juice. Don't be late for school!" + icon_state = "juicebox" + drink_type = FRUIT + +/datum/glass_style/has_foodtype/juicebox/grapejuice + required_drink_type = /datum/reagent/consumable/grapejuice + name = "grape juice box" + desc = "Tasty grape juice in a fun little container. Non-alcoholic!" + icon_state = "grapebox" + drink_type = FRUIT + +/datum/glass_style/has_foodtype/drinking_glass/plumjuice + required_drink_type = /datum/reagent/consumable/plumjuice + name = "glass of plum juice" + desc = "Noice." + icon_state = "plumjuiceglass" + drink_type = FRUIT + +/datum/glass_style/has_foodtype/drinking_glass/parsnipjuice + required_drink_type = /datum/reagent/consumable/parsnipjuice + name = "glass of parsnip juice" + drink_type = FRUIT + +/datum/glass_style/has_foodtype/drinking_glass/pineapplejuice + required_drink_type = /datum/reagent/consumable/pineapplejuice + name = "glass of pineapple juice" + desc = "Tart, tropical, and hotly debated." + drink_type = FRUIT | PINEAPPLE + +/datum/glass_style/has_foodtype/juicebox/pineapplejuice + required_drink_type = /datum/reagent/consumable/pineapplejuice + name = "pineapple juice box" + desc = "Why would you even want this?" + icon_state = "pineapplebox" + drink_type = FRUIT | PINEAPPLE + +/datum/glass_style/has_foodtype/drinking_glass/peachjuice + required_drink_type = /datum/reagent/consumable/peachjuice + name = "glass of peach juice" + drink_type = FRUIT + +/datum/glass_style/drinking_glass/tomatojuice + required_drink_type = /datum/reagent/consumable/tomatojuice + name = "glass of tomato juice" + desc = "Are you sure this is tomato juice?" + icon_state = "glass_red" + +/datum/glass_style/drinking_glass/limejuice + required_drink_type = /datum/reagent/consumable/limejuice + name = "glass of lime juice" + desc = "A glass of sweet-sour lime juice." + icon_state = "glass_green" + +/datum/glass_style/drinking_glass/carrotjuice + required_drink_type = /datum/reagent/consumable/carrotjuice + name = "glass of carrot juice" + desc = "It's just like a carrot but without crunching." + icon_state = "carrotjuice" + +/datum/glass_style/drinking_glass/berryjuice + required_drink_type = /datum/reagent/consumable/berryjuice + name = "glass of berry juice" + desc = "Berry juice. Or maybe it's jam. Who cares?" + icon_state = "berryjuice" + +/datum/glass_style/drinking_glass/poisonberryjuice + required_drink_type = /datum/reagent/consumable/poisonberryjuice + name = "glass of berry juice" + desc = "Berry juice. Or maybe it's poison. Who cares?" + icon_state = "poisonberryjuice" + +/datum/glass_style/drinking_glass/watermelonjuice + required_drink_type = /datum/reagent/consumable/watermelonjuice + name = "glass of watermelon juice" + desc = "A glass of watermelon juice." + icon_state = "glass_red" + +/datum/glass_style/drinking_glass/lemonjuice + required_drink_type = /datum/reagent/consumable/lemonjuice + name = "glass of lemon juice" + desc = "Sour..." + icon_state = "lemonglass" + +/datum/glass_style/drinking_glass/banana + required_drink_type = /datum/reagent/consumable/banana + name = "glass of banana juice" + desc = "The raw essence of a banana. HONK." + icon_state = "banana" + +/datum/glass_style/drinking_glass/nothing + required_drink_type = /datum/reagent/consumable/nothing + name = "nothing" + desc = "Absolutely nothing." + icon_state = "nothing" + +/datum/glass_style/drinking_glass/potato_juice + required_drink_type = /datum/reagent/consumable/potato_juice + name = "glass of potato juice" + desc = "Bleh..." + icon_state = "glass_brown" + +/datum/glass_style/drinking_glass/bungojuice + required_drink_type = /datum/reagent/consumable/bungojuice + name = "glass of bungo juice" + desc = "Exotic! You feel like you are on vacation already." + icon_state = "glass_yellow" + +/datum/glass_style/drinking_glass/prunomix + required_drink_type = /datum/reagent/consumable/prunomix + name = "glass of pruno mixture" + desc = "Fruit, sugar, yeast, and water pulped together into a pungent slurry." + icon_state = "glass_orange" + +/datum/glass_style/drinking_glass/aloejuice + required_drink_type = /datum/reagent/consumable/aloejuice + name = "glass of aloe juice" + desc = "A healthy and refreshing juice." + icon_state = "glass_yellow" + +/datum/glass_style/drinking_glass/toechtauese_juice + required_drink_type = /datum/reagent/consumable/toechtauese_juice + name = "glass of töchtaüse juice" + desc = "Raw, unadulterated töchtaüse juice. One swig will fill you with regrets." + icon_state = "toechtauese_syrup" + +/datum/glass_style/drinking_glass/toechtauese_syrup + required_drink_type = /datum/reagent/consumable/toechtauese_syrup + name = "glass of töchtaüse syrup" + desc = "Not for drinking on its own." + icon_state = "toechtauese_syrup" + +/datum/glass_style/drinking_glass/cucumberjuice + required_drink_type = /datum/reagent/consumable/cucumberjuice + name = "glass of cucumber juice" + desc = "A glass of cucumber juice." + icon_state = "glass_cucumber" + + +// Effectively misc + +/datum/glass_style/drinking_glass/menthol + required_drink_type = /datum/reagent/consumable/menthol + name = "glass of menthol" + desc = "Tastes naturally minty, and imparts a very mild numbing sensation." + icon_state = "glass_green" + +/datum/glass_style/drinking_glass/grenadine + required_drink_type = /datum/reagent/consumable/grenadine + name = "glass of grenadine" + desc = "Delicious flavored syrup." + +/datum/glass_style/drinking_glass/ice + required_drink_type = /datum/reagent/consumable/ice + name = "glass of ice" + desc = "Generally, you're supposed to put something else in there too..." + icon_state = "iceglass" diff --git a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_alcohol.dm b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_alcohol.dm new file mode 100644 index 000000000000..a3250c119d97 --- /dev/null +++ b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_alcohol.dm @@ -0,0 +1,1061 @@ +/datum/glass_style/drinking_glass/bilk + required_drink_type = /datum/reagent/consumable/ethanol/bilk + name = "glass of bilk" + desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis." + icon_state = "glass_brown" + +/datum/glass_style/drinking_glass/threemileisland + required_drink_type = /datum/reagent/consumable/ethanol/threemileisland + name = "Three Mile Island Ice Tea" + desc = "A glass of this is sure to prevent a meltdown." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "threemileislandglass" + +/datum/glass_style/drinking_glass/gintonic + required_drink_type = /datum/reagent/consumable/ethanol/gintonic + name = "Gin and Tonic" + desc = "A mild but still great cocktail. Drink up, like a true Englishman." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "gintonicglass" + +/datum/glass_style/drinking_glass/rum_coke + required_drink_type = /datum/reagent/consumable/ethanol/rum_coke + name = "Rum and Coke" + desc = "The classic go-to of space-fratboys." + icon_state = "whiskeycolaglass" + +/datum/glass_style/drinking_glass/cuba_libre + required_drink_type = /datum/reagent/consumable/ethanol/cuba_libre + name = "Cuba Libre" + desc = "A classic mix of rum, cola, and lime. A favorite of revolutionaries everywhere!" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "cubalibreglass" + +/datum/glass_style/drinking_glass/whiskey_cola + required_drink_type = /datum/reagent/consumable/ethanol/whiskey_cola + name = "whiskey cola" + desc = "An innocent-looking mixture of cola and whiskey. Delicious." + icon_state = "whiskeycolaglass" + +/datum/glass_style/drinking_glass/martini + required_drink_type = /datum/reagent/consumable/ethanol/martini + name = "Classic Martini" + desc = "Damn, the bartender even stirred it, not shook it." + icon_state = "martiniglass" + +/datum/glass_style/drinking_glass/vodkamartini + required_drink_type = /datum/reagent/consumable/ethanol/vodkamartini + name = "Vodka martini" + desc = "A bastardisation of the classic martini. Still great." + icon_state = "martiniglass" + +/datum/glass_style/drinking_glass/white_russian + required_drink_type = /datum/reagent/consumable/ethanol/white_russian + name = "White Russian" + desc = "A very nice looking drink. But that's just, like, your opinion, man." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "whiterussianglass" + +/datum/glass_style/drinking_glass/screwdrivercocktail + required_drink_type = /datum/reagent/consumable/ethanol/screwdrivercocktail + name = "Screwdriver" + desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "screwdriverglass" + +/datum/glass_style/drinking_glass/booger + required_drink_type = /datum/reagent/consumable/ethanol/booger + name = "Booger" + desc = "Ewww..." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "booger" + +/datum/glass_style/drinking_glass/bloody_mary + required_drink_type = /datum/reagent/consumable/ethanol/bloody_mary + name = "Bloody Mary" + desc = "Tomato juice, mixed with Vodka and a li'l bit of lime. Tastes like liquid murder." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "bloodymaryglass" + +/datum/glass_style/drinking_glass/brave_bull + required_drink_type = /datum/reagent/consumable/ethanol/brave_bull + name = "Brave Bull" + desc = "Tequila and Coffee liqueur, brought together in a mouthwatering mixture. Drink up." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "bravebullglass" + +/datum/glass_style/drinking_glass/tequila_sunrise + required_drink_type = /datum/reagent/consumable/ethanol/tequila_sunrise + name = "tequila Sunrise" + desc = "Oh great, now you feel nostalgic about sunrises back on Terra..." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "tequilasunriseglass" + +/datum/glass_style/drinking_glass/toxins_special + required_drink_type = /datum/reagent/consumable/ethanol/toxins_special + name = "Toxins Special" + desc = "Whoah, this thing is on FIRE!" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "toxinsspecialglass" + +/datum/glass_style/drinking_glass/beepsky_smash + required_drink_type = /datum/reagent/consumable/ethanol/beepsky_smash + name = "Beepsky Smash" + desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "beepskysmashglass" + +/datum/glass_style/drinking_glass/irish_cream + required_drink_type = /datum/reagent/consumable/ethanol/irish_cream + name = "Irish Cream" + desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?" + icon_state = "irishcreamglass" + +/datum/glass_style/drinking_glass/manly_dorf + required_drink_type = /datum/reagent/consumable/ethanol/manly_dorf + name = "The Manly Dorf" + desc = "A manly concoction made from Ale and Beer. Intended for true men only." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "manlydorfglass" + +/datum/glass_style/drinking_glass/longislandicedtea + required_drink_type = /datum/reagent/consumable/ethanol/longislandicedtea + name = "Long Island Iced Tea" + desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "longislandicedteaglass" + +/datum/glass_style/drinking_glass/moonshine + required_drink_type = /datum/reagent/consumable/ethanol/moonshine + name = "Moonshine" + desc = "You've really hit rock bottom now... your liver packed its bags and left last night." + icon_state = "glass_clear" + +/datum/glass_style/drinking_glass/b52 + required_drink_type = /datum/reagent/consumable/ethanol/b52 + name = "B-52" + desc = "Kahlua, Irish Cream, and cognac. You will get bombed." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "b52glass" + +/datum/glass_style/drinking_glass/irishcoffee + required_drink_type = /datum/reagent/consumable/ethanol/irishcoffee + name = "Irish Coffee" + desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning." + icon = 'icons/obj/drinks/coffee.dmi' + icon_state = "irishcoffeeglass" + +/datum/glass_style/drinking_glass/margarita + required_drink_type = /datum/reagent/consumable/ethanol/margarita + name = "Margarita" + desc = "On the rocks with salt on the rim. Arriba~!" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "margaritaglass" + +/datum/glass_style/drinking_glass/black_russian + required_drink_type = /datum/reagent/consumable/ethanol/black_russian + name = "Black Russian" + desc = "For the lactose-intolerant. Still as classy as a White Russian." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "blackrussianglass" + +/datum/glass_style/drinking_glass/manhattan + required_drink_type = /datum/reagent/consumable/ethanol/manhattan + name = "Manhattan" + desc = "The Detective's undercover drink of choice. He never could stomach gin..." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "manhattanglass" + +/datum/glass_style/drinking_glass/manhattan_proj + required_drink_type = /datum/reagent/consumable/ethanol/manhattan_proj + name = "Manhattan Project" + desc = "A scientist's drink of choice, for thinking how to blow up the station." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "proj_manhattanglass" + +/datum/glass_style/drinking_glass/whiskeysoda + required_drink_type = /datum/reagent/consumable/ethanol/whiskeysoda + name = "whiskey soda" + desc = "Ultimate refreshment." + icon_state = "whiskeysodaglass2" + +/datum/glass_style/drinking_glass/antifreeze + required_drink_type = /datum/reagent/consumable/ethanol/antifreeze + name = "Anti-freeze" + desc = "The ultimate refreshment." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "antifreeze" + +/datum/glass_style/drinking_glass/barefoot + required_drink_type = /datum/reagent/consumable/ethanol/barefoot + name = "Barefoot" + desc = "Barefoot and pregnant." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "b&p" + +/datum/glass_style/drinking_glass/snowwhite + required_drink_type = /datum/reagent/consumable/ethanol/snowwhite + name = "Snow White" + desc = "A cold refreshment." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "snowwhite" + +/datum/glass_style/drinking_glass/demonsblood + required_drink_type = /datum/reagent/consumable/ethanol/demonsblood + name = "Demons Blood" + desc = "Just looking at this thing makes the hair at the back of your neck stand up." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "demonsblood" + +/datum/glass_style/drinking_glass/devilskiss + required_drink_type = /datum/reagent/consumable/ethanol/devilskiss + name = "Devils Kiss" + desc = "Creepy time!" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "devilskiss" + +/datum/glass_style/drinking_glass/vodkatonic + required_drink_type = /datum/reagent/consumable/ethanol/vodkatonic + name = "vodka and tonic" + desc = "For when a gin and tonic isn't Russian enough." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "vodkatonicglass" + +/datum/glass_style/drinking_glass/ginfizz + required_drink_type = /datum/reagent/consumable/ethanol/ginfizz + name = "gin fizz" + desc = "Refreshingly lemony, deliciously dry." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "ginfizzglass" + +/datum/glass_style/drinking_glass/bahama_mama + required_drink_type = /datum/reagent/consumable/ethanol/bahama_mama + name = "Bahama Mama" + desc = "A tropical cocktail with a complex blend of flavors." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "bahama_mama" + +/datum/glass_style/drinking_glass/singulo + required_drink_type = /datum/reagent/consumable/ethanol/singulo + name = "Singulo" + desc = "A blue-space beverage." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "singulo" + +/datum/glass_style/drinking_glass/sbiten + required_drink_type = /datum/reagent/consumable/ethanol/sbiten + name = "Sbiten" + desc = "A spicy mix of Vodka and Spice. Very hot." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "sbitenglass" + +/datum/glass_style/drinking_glass/red_mead + required_drink_type = /datum/reagent/consumable/ethanol/red_mead + name = "Red Mead" + desc = "A true Viking's beverage, made with the blood of their enemies." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "red_meadglass" + +/datum/glass_style/drinking_glass/mead + required_drink_type = /datum/reagent/consumable/ethanol/mead + name = "Mead" + desc = "A drink from Valhalla." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "meadglass" + +/datum/glass_style/drinking_glass/iced_beer + required_drink_type = /datum/reagent/consumable/ethanol/iced_beer + name = "iced beer" + desc = "A beer so frosty, the air around it freezes." + icon_state = "iced_beerglass" + +/datum/glass_style/drinking_glass/grog + required_drink_type = /datum/reagent/consumable/ethanol/grog + name = "Grog" + desc = "A fine and cepa drink for Space." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "grogglass" + +/datum/glass_style/drinking_glass/aloe + required_drink_type = /datum/reagent/consumable/ethanol/aloe + name = "Aloe" + desc = "Very, very, very good." + icon_state = "aloe" + +/datum/glass_style/drinking_glass/andalusia + required_drink_type = /datum/reagent/consumable/ethanol/andalusia + name = "Andalusia" + desc = "A nice, strangely named drink." + icon_state = "andalusia" + +/datum/glass_style/drinking_glass/alliescocktail + required_drink_type = /datum/reagent/consumable/ethanol/alliescocktail + name = "Allies cocktail" + desc = "A drink made from your allies." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "alliescocktail" + +/datum/glass_style/drinking_glass/acid_spit + required_drink_type = /datum/reagent/consumable/ethanol/acid_spit + name = "Acid Spit" + desc = "A drink from Nanotrasen. Made from live aliens." + icon_state = "acidspitglass" + +/datum/glass_style/drinking_glass/amasec + required_drink_type = /datum/reagent/consumable/ethanol/amasec + name = "Amasec" + desc = "Always handy before COMBAT!!!" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "amasecglass" + +/datum/glass_style/drinking_glass/changelingsting + required_drink_type = /datum/reagent/consumable/ethanol/changelingsting + name = "Changeling Sting" + desc = "A stingy drink." + icon = 'icons/obj/drinks/soda.dmi' + icon_state = "changelingsting" + +/datum/glass_style/drinking_glass/irishcarbomb + required_drink_type = /datum/reagent/consumable/ethanol/irishcarbomb + name = "Irish Car Bomb" + desc = "An Irish car bomb." + icon_state = "irishcarbomb" + +/datum/glass_style/drinking_glass/syndicatebomb + required_drink_type = /datum/reagent/consumable/ethanol/syndicatebomb + name = "Syndicate Bomb" + desc = "A syndicate bomb." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "syndicatebomb" + +/datum/glass_style/drinking_glass/hiveminderaser + required_drink_type = /datum/reagent/consumable/ethanol/hiveminderaser + name = "Hivemind Eraser" + desc = "For when even mindshields can't save you." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "hiveminderaser" + +/datum/glass_style/drinking_glass/erikasurprise + required_drink_type = /datum/reagent/consumable/ethanol/erikasurprise + name = "Erika Surprise" + desc = "The surprise is, it's green!" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "erikasurprise" + +/datum/glass_style/drinking_glass/driestmartini + required_drink_type = /datum/reagent/consumable/ethanol/driestmartini + name = "Driest Martini" + desc = "Only for the experienced. You think you see sand floating in the glass." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "driestmartiniglass" + +/datum/glass_style/drinking_glass/bananahonk + required_drink_type = /datum/reagent/consumable/ethanol/bananahonk + name = "Banana Honk" + desc = "A drink from Clown Heaven." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "bananahonkglass" + +/datum/glass_style/drinking_glass/silencer + required_drink_type = /datum/reagent/consumable/ethanol/silencer + name = "Silencer" + desc = "A drink from Mime Heaven." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "silencerglass" + +/datum/glass_style/drinking_glass/drunkenblumpkin + required_drink_type = /datum/reagent/consumable/ethanol/drunkenblumpkin + name = "Drunken Blumpkin" + desc = "A drink for the drunks." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "drunkenblumpkin" + +/datum/glass_style/drinking_glass/whiskey_sour + required_drink_type = /datum/reagent/consumable/ethanol/whiskey_sour + name = "whiskey sour" + desc = "Lemon juice mixed with whiskey and a dash of sugar. Surprisingly satisfying." + icon_state = "whiskey_sour" + +/datum/glass_style/drinking_glass/hcider + required_drink_type = /datum/reagent/consumable/ethanol/hcider + name = "hard cider" + desc = "Tastes like autumn... no wait, fall!" + icon_state = "whiskeyglass" + +/datum/glass_style/drinking_glass/fetching_fizz + required_drink_type = /datum/reagent/consumable/ethanol/fetching_fizz + name = "Fetching Fizz" + desc = "Induces magnetism in the imbiber. Started as a barroom prank but evolved to become popular with miners and scrappers. Metallic aftertaste." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "fetching_fizz" + +/datum/glass_style/drinking_glass/hearty_punch + required_drink_type = /datum/reagent/consumable/ethanol/hearty_punch + name = "Hearty Punch" + desc = "Aromatic beverage served piping hot. According to folk tales it can almost wake the dead." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "hearty_punch" + +/datum/glass_style/drinking_glass/bacchus_blessing + required_drink_type = /datum/reagent/consumable/ethanol/bacchus_blessing + name = "Bacchus' Blessing" + desc = "You didn't think it was possible for a liquid to be so utterly revolting. Are you sure about this...?" + icon_state = "glass_brown2" + +/datum/glass_style/drinking_glass/atomicbomb + required_drink_type = /datum/reagent/consumable/ethanol/atomicbomb + name = "Atomic Bomb" + desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "atomicbombglass" + +/datum/glass_style/drinking_glass/gargle_blaster + required_drink_type = /datum/reagent/consumable/ethanol/gargle_blaster + name = "Pan-Galactic Gargle Blaster" + desc = "Like having your brain smashed out by a slice of lemon wrapped around a large gold brick." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "gargleblasterglass" + +/datum/glass_style/drinking_glass/neurotoxin + required_drink_type = /datum/reagent/consumable/ethanol/neurotoxin + name = "Neurotoxin" + desc = "A drink that is guaranteed to knock you silly." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "neurotoxinglass" + +/datum/glass_style/drinking_glass/hippies_delight + required_drink_type = /datum/reagent/consumable/ethanol/hippies_delight + name = "Hippie's Delight" + desc = "A drink enjoyed by people during the 1960's." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "hippiesdelightglass" + +/datum/glass_style/has_foodtype/drinking_glass/eggnog + required_drink_type = /datum/reagent/consumable/ethanol/eggnog + name = "eggnog" + desc = "For enjoying the most wonderful time of the year." + icon_state = "glass_yellow" + drink_type = FRUIT + +/datum/glass_style/has_foodtype/juicebox/eggnog + required_drink_type = /datum/reagent/consumable/ethanol/eggnog + name = "carton of eggnog" + desc = "A big juicebox for adults." + icon_state = "nog2" + drink_type = FRUIT + +/datum/glass_style/drinking_glass/narsour + required_drink_type = /datum/reagent/consumable/ethanol/narsour + name = "Nar'Sour" + desc = "A new hit cocktail inspired by THE ARM Breweries will have you shouting Fuu ma'jin in no time!" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "narsour" + +/datum/glass_style/drinking_glass/triple_sec + required_drink_type = /datum/reagent/consumable/ethanol/triple_sec + name = "Triple Sec" + desc = "A glass of straight Triple Sec." + icon_state = "glass_orange" + +/datum/glass_style/drinking_glass/creme_de_menthe + required_drink_type = /datum/reagent/consumable/ethanol/creme_de_menthe + name = "Creme de Menthe" + desc = "You can almost feel the first breath of spring just looking at it." + icon_state = "glass_green" + +/datum/glass_style/drinking_glass/creme_de_cacao + required_drink_type = /datum/reagent/consumable/ethanol/creme_de_cacao + name = "Creme de Cacao" + desc = "A million hazing lawsuits and alcohol poisonings have started with this humble ingredient." + icon_state = "glass_brown" + +/datum/glass_style/drinking_glass/creme_de_coconut + required_drink_type = /datum/reagent/consumable/ethanol/creme_de_coconut + name = "Creme de Coconut" + desc = "An unintimidating glass of coconut liqueur." + icon_state = "glass_white" + +/datum/glass_style/drinking_glass/quadruple_sec + required_drink_type = /datum/reagent/consumable/ethanol/quadruple_sec + name = "Quadruple Sec" + desc = "An intimidating and lawful beverage dares you to violate the law and make its day. Still can't drink it on duty, though." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "quadruple_sec" + +/datum/glass_style/drinking_glass/quintuple_sec + required_drink_type = /datum/reagent/consumable/ethanol/quintuple_sec + name = "Quintuple Sec" + desc = "Now you are become law, destroyer of clowns." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "quintuple_sec" + +/datum/glass_style/drinking_glass/grasshopper + required_drink_type = /datum/reagent/consumable/ethanol/grasshopper + name = "Grasshopper" + desc = "You weren't aware edible beverages could be that green." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "grasshopper" + +/datum/glass_style/drinking_glass/stinger + required_drink_type = /datum/reagent/consumable/ethanol/stinger + name = "Stinger" + desc = "You wonder what would happen if you pointed this at a heat source..." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "stinger" + +/datum/glass_style/drinking_glass/bastion_bourbon + required_drink_type = /datum/reagent/consumable/ethanol/bastion_bourbon + name = "Bastion Bourbon" + desc = "If you're feeling low, count on the buttery flavor of our own bastion bourbon." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "bastion_bourbon" + +/datum/glass_style/drinking_glass/squirt_cider + required_drink_type = /datum/reagent/consumable/ethanol/squirt_cider + name = "Squirt Cider" + desc = "Squirt cider will toughen you right up. Too bad about the musty aftertaste." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "squirt_cider" + +/datum/glass_style/drinking_glass/fringe_weaver + required_drink_type = /datum/reagent/consumable/ethanol/fringe_weaver + name = "Fringe Weaver" + desc = "It's a wonder it doesn't spill out of the glass." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "fringe_weaver" + +/datum/glass_style/drinking_glass/sugar_rush + required_drink_type = /datum/reagent/consumable/ethanol/sugar_rush + name = "Sugar Rush" + desc = "If you can't mix a Sugar Rush, you can't tend bar." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "sugar_rush" + +/datum/glass_style/drinking_glass/crevice_spike + required_drink_type = /datum/reagent/consumable/ethanol/crevice_spike + name = "Crevice Spike" + desc = "It'll either knock the drunkenness out of you or knock you out cold. Both, probably." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "crevice_spike" + +/datum/glass_style/drinking_glass/peppermint_patty + required_drink_type = /datum/reagent/consumable/ethanol/peppermint_patty + name = "Peppermint Patty" + desc = "A boozy minty hot cocoa that warms your belly on a cold night." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "peppermint_patty" + +/datum/glass_style/drinking_glass/alexander + required_drink_type = /datum/reagent/consumable/ethanol/alexander + name = "Alexander" + desc = "A creamy, indulgent delight that is stronger than it seems." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "alexander" + +/datum/glass_style/drinking_glass/amaretto_alexander + required_drink_type = /datum/reagent/consumable/ethanol/amaretto_alexander + name = "Amaretto Alexander" + desc = "A creamy, indulgent delight that is in fact as gentle as it seems." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "alexanderam" + +/datum/glass_style/drinking_glass/sidecar + required_drink_type = /datum/reagent/consumable/ethanol/sidecar + name = "Sidecar" + desc = "The one ride you'll gladly give up the wheel for." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "sidecar" + +/datum/glass_style/drinking_glass/between_the_sheets + required_drink_type = /datum/reagent/consumable/ethanol/between_the_sheets + name = "Between the Sheets" + desc = "The only drink that comes with a label reminding you of Nanotrasen's zero-tolerance promiscuity policy." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "between_the_sheets" + +/datum/glass_style/drinking_glass/kamikaze + required_drink_type = /datum/reagent/consumable/ethanol/kamikaze + name = "Kamikaze" + desc = "Divinely windy." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "kamikaze" + +/datum/glass_style/drinking_glass/mojito + required_drink_type = /datum/reagent/consumable/ethanol/mojito + name = "Mojito" + desc = "A drink that looks as refreshing as it tastes." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "mojito" + +/datum/glass_style/drinking_glass/moscow_mule + required_drink_type = /datum/reagent/consumable/ethanol/moscow_mule + name = "Moscow Mule" + desc = "A chilly drink that reminds you of the Derelict." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "moscow_mule" + +/datum/glass_style/drinking_glass/fernet_cola + required_drink_type = /datum/reagent/consumable/ethanol/fernet_cola + name = "glass of fernet cola" + desc = "A sawed-off cola bottle filled with Fernet Cola. Nothing better after eating like a lardass." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "godlyblend" + +/datum/glass_style/drinking_glass/fanciulli + required_drink_type = /datum/reagent/consumable/ethanol/fanciulli + name = "glass of fanciulli" + desc = "A glass of Fanciulli. It's just Manhattan with Fernet." + icon_state = "fanciulli" + +/datum/glass_style/drinking_glass/branca_menta + required_drink_type = /datum/reagent/consumable/ethanol/branca_menta + name = "glass of branca menta" + desc = "A glass of Branca Menta, perfect for those lazy and hot Sunday summer afternoons." //Get lazy literally by drinking this + icon_state = "minted_fernet" + +/datum/glass_style/drinking_glass/blank_paper + required_drink_type = /datum/reagent/consumable/ethanol/blank_paper + name = "glass of blank paper" + desc = "A fizzy cocktail for those looking to start fresh." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "blank_paper" + +/datum/glass_style/drinking_glass/wizz_fizz + required_drink_type = /datum/reagent/consumable/ethanol/wizz_fizz + name = "Wizz Fizz" + desc = "The glass bubbles and froths with an almost magical intensity." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "wizz_fizz" + +/datum/glass_style/drinking_glass/bug_spray + required_drink_type = /datum/reagent/consumable/ethanol/bug_spray + name = "Bug Spray" + desc = "Your eyes begin to water as the sting of alcohol reaches them." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "bug_spray" + +/datum/glass_style/drinking_glass/applejack + required_drink_type = /datum/reagent/consumable/ethanol/applejack + name = "Applejack" + desc = "You feel like you could drink this all neight." + icon_state = "applejack_glass" + +/datum/glass_style/drinking_glass/jack_rose + required_drink_type = /datum/reagent/consumable/ethanol/jack_rose + name = "Jack Rose" + desc = "Enough of these, and you really will start to suppose your toeses are roses." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "jack_rose" + +/datum/glass_style/drinking_glass/turbo + required_drink_type = /datum/reagent/consumable/ethanol/turbo + name = "Turbo" + desc = "A turbulent cocktail for outlaw hoverbikers." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "turbo" + +/datum/glass_style/drinking_glass/old_timer + required_drink_type = /datum/reagent/consumable/ethanol/old_timer + name = "Old Timer" + desc = "WARNING! May cause premature aging!" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "old_timer" + +/datum/glass_style/drinking_glass/rubberneck + required_drink_type = /datum/reagent/consumable/ethanol/rubberneck + name = "Rubberneck" + desc = "A popular drink amongst those adhering to an all synthetic diet." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "rubberneck" + +/datum/glass_style/drinking_glass/duplex + required_drink_type = /datum/reagent/consumable/ethanol/duplex + name = "Duplex" + desc = "To imbibe one component separately from the other is consider a great faux pas." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "duplex" + +/datum/glass_style/drinking_glass/trappist + required_drink_type = /datum/reagent/consumable/ethanol/trappist + name = "Trappist Beer" + desc = "boozy Catholicism in a glass." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "trappistglass" + +/datum/glass_style/drinking_glass/blazaam + required_drink_type = /datum/reagent/consumable/ethanol/blazaam + name = "Blazaam" + desc = "The glass seems to be sliding between realities. Doubles as a Berenstain remover." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "blazaamglass" + +/datum/glass_style/drinking_glass/planet_cracker + required_drink_type = /datum/reagent/consumable/ethanol/planet_cracker + name = "Planet Cracker" + desc = "Although historians believe the drink was originally created to commemorate the end of an important conflict in man's past, its origins have largely been forgotten and it is today seen more as a general symbol of human supremacy." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "planet_cracker" + +/datum/glass_style/drinking_glass/mauna_loa + required_drink_type = /datum/reagent/consumable/ethanol/mauna_loa + name = "Mauna Loa" + desc = "Lavaland in a drink... mug... volcano... thing." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "mauna_loa" + +/datum/glass_style/drinking_glass/painkiller + required_drink_type = /datum/reagent/consumable/ethanol/painkiller + name = "Painkiller" + desc = "A combination of tropical juices and rum. Surely this will make you feel better." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "painkiller" + +/datum/glass_style/drinking_glass/pina_colada + required_drink_type = /datum/reagent/consumable/ethanol/pina_colada + name = "Pina Colada" + desc = "If you like pina coladas, and getting caught in the rain... well, you'll like this drink." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "pina_colada" + +/datum/glass_style/drinking_glass/pina_olivada + required_drink_type = /datum/reagent/consumable/ethanol/pina_olivada + name = "Piña Olivada" + desc = "A balance of fruity pineapple with thick, rich olive oil. Stir well before drinking." + icon_state = "pina_olivada" + +/datum/glass_style/drinking_glass/ginger_amaretto + required_drink_type = /datum/reagent/consumable/ethanol/ginger_amaretto + name = "Ginger Amaretto" + desc = "The sprig of rosemary adds a nice aroma to the drink, and isn't just to be pretentious afterall!" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "gingeramaretto" + +/datum/glass_style/drinking_glass/godfather + required_drink_type = /datum/reagent/consumable/ethanol/godfather + name = "Godfather" + desc = "A classic from old Italy and enjoyed by gangsters, pray the orange peel doesnt end up in your mouth." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "godfather" + +/datum/glass_style/drinking_glass/godmother + required_drink_type = /datum/reagent/consumable/ethanol/godmother + name = "Godmother" + desc = "A lovely fresh smelling cocktail, a true Sicilian delight." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "godmother" + +/datum/glass_style/drinking_glass/kortara + required_drink_type = /datum/reagent/consumable/ethanol/kortara + name = "glass of kortara" + desc = "The fermented nectar of the Korta nut, as enjoyed by lizards galaxywide." + icon_state = "kortara_glass" + +/datum/glass_style/drinking_glass/sea_breeze + required_drink_type = /datum/reagent/consumable/ethanol/sea_breeze + name = "Sea Breeze" + desc = "Minty, chocolatey, and creamy. It's like drinkable mint chocolate chip!" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "sea_breeze" + +/datum/glass_style/drinking_glass/white_tiziran + required_drink_type = /datum/reagent/consumable/ethanol/white_tiziran + name = "White Tiziran" + desc = "I had a rough night and I hate the fucking humans, man." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "white_tiziran" + +/datum/glass_style/drinking_glass/drunken_espatier + required_drink_type = /datum/reagent/consumable/ethanol/drunken_espatier + name = "Drunken Espatier" + desc = "A drink to make facing death easier." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "drunken_espatier" + +/datum/glass_style/drinking_glass/protein_blend + required_drink_type = /datum/reagent/consumable/ethanol/protein_blend + name = "Protein Blend" + desc = "Vile, even by lizard standards." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "protein_blend" + +/datum/glass_style/drinking_glass/mushi_kombucha + required_drink_type = /datum/reagent/consumable/ethanol/mushi_kombucha + name = "glass of mushi kombucha" + icon_state = "glass_orange" + +/datum/glass_style/drinking_glass/triumphal_arch + required_drink_type = /datum/reagent/consumable/ethanol/triumphal_arch + name = "Triumphal Arch" + desc = "A toast to the Empire, long may it stand." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "triumphal_arch" + +/datum/glass_style/drinking_glass/the_juice + required_drink_type = /datum/reagent/consumable/ethanol/the_juice + name = "The Juice" + desc = "A concoction of not-so-edible things that apparently lets you feel like you're in two places at once" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "thejuice" + +/datum/glass_style/drinking_glass/admiralty + required_drink_type = /datum/reagent/consumable/ethanol/admiralty + name = "Admiralty" + desc = "Hail to the Admiral, for he brings fair tidings, and rum too." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "admiralty" + +/datum/glass_style/drinking_glass/long_haul + required_drink_type = /datum/reagent/consumable/ethanol/long_haul + name = "Long Haul" + desc = "A perfect companion for a lonely long haul flight." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "long_haul" + +/datum/glass_style/drinking_glass/long_john_silver + required_drink_type = /datum/reagent/consumable/ethanol/long_john_silver + name = "Long John Silver" + desc = "Named for a famous pirate, who may or may not have been fictional. But hey, why let the truth get in the way of a good yarn?" //Chopper Reid says "How the fuck are ya?" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "long_john_silver" + +/datum/glass_style/drinking_glass/tropical_storm + required_drink_type = /datum/reagent/consumable/ethanol/tropical_storm + name = "Tropical Storm" + desc = "Less destructive than the real thing." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "tropical_storm" + +/datum/glass_style/drinking_glass/dark_and_stormy + required_drink_type = /datum/reagent/consumable/ethanol/dark_and_stormy + name = "Dark and Stormy" + desc = "Thunder and lightning, very very frightening." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "dark_and_stormy" + +/datum/glass_style/drinking_glass/salt_and_swell + required_drink_type = /datum/reagent/consumable/ethanol/salt_and_swell + name = "Salt and Swell" + desc = "Ah, I do like to be beside the seaside." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "salt_and_swell" + +/datum/glass_style/drinking_glass/tiltaellen + required_drink_type = /datum/reagent/consumable/ethanol/tiltaellen + name = "glass of tiltällen" + desc = "Eww... it's curdled." + icon_state = "tiltaellen" + +/datum/glass_style/drinking_glass/tich_toch + required_drink_type = /datum/reagent/consumable/ethanol/tich_toch + name = "Tich Toch" + desc = "Oh god." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "tich_toch" + +/datum/glass_style/drinking_glass/helianthus + required_drink_type = /datum/reagent/consumable/ethanol/helianthus + name = "Helianthus" + desc = "Another reason to cut off an ear..." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "helianthus" + +/datum/glass_style/drinking_glass/plumwine + required_drink_type = /datum/reagent/consumable/ethanol/plumwine + name = "plum wine" + desc = "Looks like an evening of writing fine poetry." + icon_state = "plumwineglass" + +/datum/glass_style/drinking_glass/the_hat + required_drink_type = /datum/reagent/consumable/ethanol/the_hat + name = "The Hat" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "thehatglass" + +/datum/glass_style/drinking_glass/gin_garden + required_drink_type = /datum/reagent/consumable/ethanol/gin_garden + name = "gin garden" + desc = "Hey, someone forgot the herb and... the cucumber in my cocktail!" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "gin_garden" + +/datum/glass_style/drinking_glass/wine_voltaic + required_drink_type = /datum/reagent/consumable/ethanol/wine_voltaic + name = "Voltaic Yellow Wine" + desc = "Electrically charged wine. Recharges ethereals, but also nontoxic." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "wine_voltaic" + +/datum/glass_style/drinking_glass/telepole + required_drink_type = /datum/reagent/consumable/ethanol/telepole + name = "Telepole" + desc = "A liquid grounding rod. Recharges ethereals and grants temporary shock resistance." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "telepole" + +/datum/glass_style/drinking_glass/pod_tesla + required_drink_type = /datum/reagent/consumable/ethanol/pod_tesla + name = "Pod Tesla" + desc = "Ride the lightning! Recharges ethereals, suppresses phobias, and grants strong temporary shock resistance." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "pod_tesla" + +/datum/glass_style/drinking_glass/yuyakita + required_drink_type = /datum/reagent/consumable/ethanol/yuyakita + name = "Yūyakita" + desc = "And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "yuyakita" + +/datum/glass_style/drinking_glass/saibasan + required_drink_type = /datum/reagent/consumable/ethanol/saibasan + name = "Saibāsan" + desc = "A drink made in honour of Cybersun Industries' 600th year of continual business. Officially, you're meant to call this a \"Hong Kong Cooler\" on Nanotrasen stations, but that name sucks." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "saibasan" + +/datum/glass_style/drinking_glass/banzai_ti + required_drink_type = /datum/reagent/consumable/ethanol/banzai_ti + name = "Banzai-Tī" + desc = "A drink to last ten-thousand years- better sip slowly then." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "banzai_ti" + +/datum/glass_style/drinking_glass/sanraizusoda + required_drink_type = /datum/reagent/consumable/ethanol/sanraizusoda + name = "Sanraizusōda" + desc = "A popular children's dessert from Japan, made adult with the addition of booze. Kanpai!" + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "sanraizusoda" + +/datum/glass_style/drinking_glass/kumicho + required_drink_type = /datum/reagent/consumable/ethanol/kumicho + name = "Kumichō" + desc = "Much like the American Godfather, the Kumichō is sophisticated, strong, and almost certainly tied to illicit activities." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "kumicho" + +/datum/glass_style/drinking_glass/red_planet + required_drink_type = /datum/reagent/consumable/ethanol/red_planet + name = "Red Planet" + desc = "A patriotic drink from Mars, commonly enjoyed on September 15th: the day that peace was declared following the Martian uprising, with the Martian Concession granting Mars proper representation as part of the Terran Federation." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "red_planet" + +/datum/glass_style/drinking_glass/amaterasu + required_drink_type = /datum/reagent/consumable/ethanol/amaterasu + name = "Amaterasu" + desc = "And so Amaterasu emerged from the Heavenly Rock Cave, and light was restored to the world." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "amaterasu" + +/datum/glass_style/drinking_glass/nekomimosa + required_drink_type = /datum/reagent/consumable/ethanol/nekomimosa + name = "Nekomimosa" + desc = "A syrupy mess of a cocktail, dedicated to a felinid popstar that took Mars by storm a few years ago." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "nekomimosa" + +/datum/glass_style/drinking_glass/sentai_quencha + required_drink_type = /datum/reagent/consumable/ethanol/sentai_quencha + name = "Sentai Quencha" + desc = "Tastes like ultimate ninja power. And melon. And citrus. And some other stuff." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "sentai_quencha" + +/datum/glass_style/drinking_glass/bosozoku + required_drink_type = /datum/reagent/consumable/ethanol/bosozoku + name = "Bōsōzoku" + desc = "A refreshing summer drink enjoyed across Mars and beyond. Any resemblance to shandies or radlers is unintentional." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "bosozoku" + +/datum/glass_style/drinking_glass/ersatzche + required_drink_type = /datum/reagent/consumable/ethanol/ersatzche + name = "Ersatzche" + desc = "An interesting drink invented in the Blue Room Bar and Grill in New Osaka. It's a tasty take on Mexican tepache, made with a beer base." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "ersatzche" + +/datum/glass_style/drinking_glass/red_city_am + required_drink_type = /datum/reagent/consumable/ethanol/red_city_am + name = "Red City AM" + desc = "A popular breakfast drink from New Osaka's bars- for the enterprising day drinker." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "red_city_am" + +/datum/glass_style/drinking_glass/kings_ransom + required_drink_type = /datum/reagent/consumable/ethanol/kings_ransom + name = "King's Ransom" + desc = "A weird drink that manages to marry a number of seemingly conflicting flavours into a single harmonious taste." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "kings_ransom" + +/datum/glass_style/drinking_glass/four_bit + required_drink_type = /datum/reagent/consumable/ethanol/four_bit + name = "Four Bit" + desc = "Straight out of the pits of a Martian hacking convention." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "four_bit" + +/datum/glass_style/drinking_glass/white_hawaiian + required_drink_type = /datum/reagent/consumable/ethanol/white_hawaiian + name = "White Hawaiian" + desc = "One of the infinite variations on the White Russian, this drink gets away from the frozen north and into the heat of the ring of fire with a host of toasty coconut flavours." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "white_hawaiian" + +/datum/glass_style/drinking_glass/maui_sunrise + required_drink_type = /datum/reagent/consumable/ethanol/maui_sunrise + name = "Maui Sunrise" + desc = "Take a sip and be transported to the Aloha state. Metaphorically, of course." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "maui_sunrise" + +/datum/glass_style/drinking_glass/imperial_mai_tai + required_drink_type = /datum/reagent/consumable/ethanol/imperial_mai_tai + name = "Imperial Mai Tai" + desc = "I mean, who springs for orgeat these days anyway? Korta nut's the new big thing, baby." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "imperial_mai_tai" + +/datum/glass_style/drinking_glass/konococo_rumtini + required_drink_type = /datum/reagent/consumable/ethanol/konococo_rumtini + name = "Konococo Rumtini" + desc = "Considered an acceptable breakfast drink in Little Hawaii." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "konococo_rumtini" + +/datum/glass_style/drinking_glass/blue_hawaiian + required_drink_type = /datum/reagent/consumable/ethanol/blue_hawaiian + name = "Blue Hawaiian" + desc = "It's a tropical vacation in a glass." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "blue_hawaiian" + +// Shot glasses + +/datum/glass_style/shot_glass/toxins_special + required_drink_type = /datum/reagent/consumable/ethanol/toxins_special + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "toxinsspecialglass" + +/datum/glass_style/shot_glass/b52 + required_drink_type = /datum/reagent/consumable/ethanol/b52 + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "b52glass" + +/datum/glass_style/shot_glass/hcider + required_drink_type = /datum/reagent/consumable/ethanol/hcider + icon_state = "shotglassbrown" + +/datum/glass_style/shot_glass/bastion_bourbon + required_drink_type = /datum/reagent/consumable/ethanol/bastion_bourbon + icon_state = "shotglassgreen" + +/datum/glass_style/shot_glass/squirt_cider + required_drink_type = /datum/reagent/consumable/ethanol/squirt_cider + icon_state = "shotglassgreen" + +/datum/glass_style/shot_glass/jack_rose + required_drink_type = /datum/reagent/consumable/ethanol/jack_rose + icon_state = "shotglassred" diff --git a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_drinks.dm b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_drinks.dm new file mode 100644 index 000000000000..9074aff95ef5 --- /dev/null +++ b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_drinks.dm @@ -0,0 +1,77 @@ +// Mixed drinks + +/datum/glass_style/drinking_glass/lemonade + required_drink_type = /datum/reagent/consumable/lemonade + name = "pitcher of lemonade" + desc = "This drink leaves you feeling nostalgic for some reason." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "lemonpitcher" + +/datum/glass_style/drinking_glass/arnold_palmer + required_drink_type = /datum/reagent/consumable/tea/arnold_palmer + name = "Arnold Palmer" + desc = "You feel like taking a few golf swings after a few swigs of this." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "arnold_palmer" + +/datum/glass_style/drinking_glass/roy_rogers + required_drink_type = /datum/reagent/consumable/roy_rogers + name = "Roy Rogers" + desc = "90% sugar in a glass." + icon_state = "royrogers" + +/datum/glass_style/drinking_glass/doctor_delight + required_drink_type = /datum/reagent/consumable/doctor_delight + name = "Doctor's Delight" + desc = "The space doctor's favorite. Guaranteed to restore bodily injury; side effects include cravings and hunger." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "doctorsdelightglass" + +/datum/glass_style/drinking_glass/cinderella + required_drink_type = /datum/reagent/consumable/cinderella + name = "Cinderella" + desc = "There is not a single drop of alcohol in this thing." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "cinderella" + +/datum/glass_style/drinking_glass/triple_citrus + required_drink_type = /datum/reagent/consumable/triple_citrus + name = "glass of triple citrus" + desc = "A mixture of citrus juices. Tangy, yet smooth." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "triplecitrus" + +/datum/glass_style/drinking_glass/shirley_temple + required_drink_type = /datum/reagent/consumable/shirley_temple + name = "Shirley Temple" + desc = "Ginger ale with processed grenadine. " + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "shirleytemple" + +/datum/glass_style/drinking_glass/red_queen + required_drink_type = /datum/reagent/consumable/red_queen + name = "Red Queen" + desc = "DRINK ME." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "red_queen" + +/datum/glass_style/drinking_glass/agua_fresca + required_drink_type = /datum/reagent/consumable/agua_fresca + name = "Agua Fresca" + desc = "90% water, but still refreshing." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "aguafresca" + +/datum/glass_style/drinking_glass/cucumberlemonade + required_drink_type = /datum/reagent/consumable/cucumberlemonade + name = "cucumber lemonade" + desc = "The smell of cucumber from lemonade, I'm sure I won't get poisoned." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "cucumber_lemonade" + +/datum/glass_style/drinking_glass/mississippi_queen + required_drink_type = /datum/reagent/consumable/mississippi_queen + name = "Mississippi Queen" + desc = "Mullets and cut-up jorts not included." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "mississippiglass" diff --git a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/smoothies_shakes.dm b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/smoothies_shakes.dm new file mode 100644 index 000000000000..9b39c87062a1 --- /dev/null +++ b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/smoothies_shakes.dm @@ -0,0 +1,100 @@ + +// Shakes and smoothies + +/datum/glass_style/drinking_glass/cherryshake + required_drink_type = /datum/reagent/consumable/cherryshake + name = "cherry shake" + desc = "A cherry flavored milkshake." + icon = 'icons/obj/drinks/shakes.dmi' + icon_state = "cherryshake" + +/datum/glass_style/drinking_glass/bluecherryshake + required_drink_type = /datum/reagent/consumable/bluecherryshake + name = "blue cherry shake" + desc = "An exotic blue milkshake." + icon = 'icons/obj/drinks/shakes.dmi' + icon_state = "bluecherryshake" + +/datum/glass_style/drinking_glass/vanillashake + required_drink_type = /datum/reagent/consumable/vanillashake + name = "vanilla shake" + desc = "A vanilla flavored milkshake." + icon = 'icons/obj/drinks/shakes.dmi' + icon_state = "vanillashake" + +/datum/glass_style/drinking_glass/caramelshake + required_drink_type = /datum/reagent/consumable/caramelshake + name = "caramel shake" + desc = "A caramel flavored milkshake." + icon = 'icons/obj/drinks/shakes.dmi' + icon_state = "caramelshake" + +/datum/glass_style/drinking_glass/choccyshake + required_drink_type = /datum/reagent/consumable/choccyshake + name = "chocolate shake" + desc = "A chocolate flavored milkshake." + icon = 'icons/obj/drinks/shakes.dmi' + icon_state = "choccyshake" + +/datum/glass_style/drinking_glass/strawberryshake + required_drink_type = /datum/reagent/consumable/strawberryshake + name = "strawberry shake" + desc = "A strawberry flavored milkshake." + icon = 'icons/obj/drinks/shakes.dmi' + icon_state = "strawberryshake" + +/datum/glass_style/drinking_glass/bananashake + required_drink_type = /datum/reagent/consumable/bananashake + name = "banana shake" + desc = "A banana flavored milkshake." + icon = 'icons/obj/drinks/shakes.dmi' + icon_state = "bananashake" + +/datum/glass_style/drinking_glass/gibbfloats + required_drink_type = /datum/reagent/consumable/gibbfloats + name = "Gibbfloat" + desc = "Dr. Gibb with ice cream on top." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "gibbfloats" + +/datum/glass_style/drinking_glass/strawberry_banana + required_drink_type = /datum/reagent/consumable/strawberry_banana + name = "strawberry banana smoothie" + desc = "A classic drink which countless souls have bonded over..." + icon = 'icons/obj/drinks/shakes.dmi' + icon_state = "strawberry_banana" + +/datum/glass_style/drinking_glass/berry_blast + required_drink_type = /datum/reagent/consumable/berry_blast + name = "berry blast smoothie" + desc = "A classic drink, freshly made with hand picked berries. Or, maybe not." + icon = 'icons/obj/drinks/shakes.dmi' + icon_state = "berry_blast" + +/datum/glass_style/drinking_glass/funky_monkey + required_drink_type = /datum/reagent/consumable/funky_monkey + name = "funky monkey smoothie" + desc = "A classic drink made with chocolate and banana. No monkeys were harmed, officially." + icon = 'icons/obj/drinks/shakes.dmi' + icon_state = "funky_monkey" + +/datum/glass_style/drinking_glass/green_giant + required_drink_type = /datum/reagent/consumable/green_giant + name = "green giant smoothie" + desc = "A classic drink, if you enjoy juiced wheatgrass and chia seeds." + icon = 'icons/obj/drinks/shakes.dmi' + icon_state = "green_giant" + +/datum/glass_style/drinking_glass/melon_baller + required_drink_type = /datum/reagent/consumable/melon_baller + name = "melon baller smoothie" + desc = "A wonderfully fresh melon smoothie. Guaranteed to brighten your day." + icon = 'icons/obj/drinks/shakes.dmi' + icon_state = "melon_baller" + +/datum/glass_style/drinking_glass/vanilla_dream + required_drink_type = /datum/reagent/consumable/vanilla_dream + name = "vanilla dream smoothie" + desc = "A classic drink made with vanilla and fresh cream." + icon = 'icons/obj/drinks/shakes.dmi' + icon_state = "vanilla_dream" diff --git a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/sodas.dm b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/sodas.dm new file mode 100644 index 000000000000..467b80400fb9 --- /dev/null +++ b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/sodas.dm @@ -0,0 +1,118 @@ +// Soft Drinks/Sodas + +/datum/glass_style/drinking_glass/space_cola + required_drink_type = /datum/reagent/consumable/space_cola + name = "glass of Space Cola" + desc = "A glass of refreshing Space Cola." + icon_state = "spacecola" + +/datum/glass_style/drinking_glass/nuka_cola + required_drink_type = /datum/reagent/consumable/nuka_cola + name = "glass of Nuka Cola" + desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland." + icon = 'icons/obj/drinks/soda.dmi' + icon_state = "nuka_colaglass" + +/datum/glass_style/drinking_glass/rootbeer + required_drink_type = /datum/reagent/consumable/rootbeer + name = "glass of root beer" + desc = "A glass of highly potent, incredibly sugary root beer." + icon_state = "spacecola" + +/datum/glass_style/drinking_glass/grey_bull + required_drink_type = /datum/reagent/consumable/grey_bull + name = "glass of Grey Bull" + desc = "Surprisingly it isn't grey." + icon_state = "grey_bull_glass" + +/datum/glass_style/drinking_glass/spacemountainwind + required_drink_type = /datum/reagent/consumable/spacemountainwind + name = "glass of Space Mountain Wind" + desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind." + icon_state = "Space_mountain_wind_glass" + +/datum/glass_style/drinking_glass/dr_gibb + required_drink_type = /datum/reagent/consumable/dr_gibb + name = "glass of Dr. Gibb" + desc = "Dr. Gibb. Not as dangerous as the container_name might imply." + icon_state = "dr_gibb_glass" + +/datum/glass_style/drinking_glass/space_up + required_drink_type = /datum/reagent/consumable/space_up + name = "glass of Space-Up" + desc = "Space-up. It helps you keep your cool." + icon_state = "space-up_glass" + +/datum/glass_style/drinking_glass/lemon_lime + required_drink_type = /datum/reagent/consumable/lemon_lime + name = "glass of lemon-lime" + desc = "You're pretty certain a real fruit has never actually touched this." + icon_state = "lemonlime" + +/datum/glass_style/drinking_glass/pwr_game + required_drink_type = /datum/reagent/consumable/pwr_game + name = "glass of Pwr Game" + desc = "Goes well with a Vlad's salad." + icon_state = "pwrgame" + +/datum/glass_style/drinking_glass/shamblers + required_drink_type = /datum/reagent/consumable/shamblers + name = "glass of Shambler's juice" + desc = "Mmm mm, shambly." + icon_state = "shamblerjuice" + +/datum/glass_style/drinking_glass/sodawater + required_drink_type = /datum/reagent/consumable/sodawater + name = "glass of soda water" + desc = "Soda water. Why not make a scotch and soda?" + icon_state = "glass_clearcarb" + +/datum/glass_style/drinking_glass/tonic + required_drink_type = /datum/reagent/consumable/tonic + name = "glass of tonic water" + desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." + icon_state = "glass_clearcarb" + +/datum/glass_style/drinking_glass/monkey_energy + required_drink_type = /datum/reagent/consumable/monkey_energy + name = "glass of Monkey Energy" + desc = "You can unleash the ape, but without the pop of the can?" + icon_state = "monkey_energy_glass" + +/datum/glass_style/drinking_glass/grape_soda + required_drink_type = /datum/reagent/consumable/grape_soda + name = "glass of grape juice" + +/datum/glass_style/drinking_glass/cream_soda + required_drink_type = /datum/reagent/consumable/cream_soda + name = "Cream Soda" + desc = "A classic space-American vanilla flavored soft drink." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "cream_soda" + +/datum/glass_style/drinking_glass/sol_dry + required_drink_type = /datum/reagent/consumable/sol_dry + name = "Sol Dry" + desc = "A soothing, mellow drink made from ginger." + icon_state = "soldry" + +/datum/glass_style/drinking_glass/hakka_mate + required_drink_type = /datum/reagent/consumable/hakka_mate + name = "glass of Hakka-Mate" + desc = "The perfect drink for hacking. Just don't pour it on your computer, that'll only slow you down." + icon = 'icons/obj/drinks/drinks.dmi' + icon_state = "hakka_mate" + +/datum/glass_style/drinking_glass/melon_soda + required_drink_type = /datum/reagent/consumable/melon_soda + name = "glass of melon soda" + desc = "As enjoyed by Japanese children and 30-something Japan enthusiasts." + icon = 'icons/obj/drinks/drinks.dmi' + icon_state = "melon_soda" + +/datum/glass_style/drinking_glass/volt_energy + required_drink_type = /datum/reagent/consumable/volt_energy + name = "glass of 24-Volt Energy" + desc = "It's sharp, it's sour, it's electrifying!" + icon = 'icons/obj/drinks/drinks.dmi' + icon_state = "volt_energy" diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index f5ed3d865af2..95ef729d7091 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -375,7 +375,7 @@ exposed_open_turf.air.temperature = max(exposed_open_turf.air.temperature - ((temperature - TCMB) * (heat_capacity * reac_volume * specific_heat) / (heat_capacity + reac_volume * specific_heat)) / heat_capacity, TCMB) // Exchanges environment temperature with reagent. Reagent is at 2.7K with a heat capacity of 40J per unit. if(reac_volume < 5) return - for(var/mob/living/simple_animal/slime/exposed_slime in exposed_turf) + for(var/mob/living/basic/slime/exposed_slime in exposed_turf) exposed_slime.adjustToxLoss(rand(15,30)) /datum/reagent/consumable/condensedcapsaicin @@ -1195,3 +1195,50 @@ affected_mob.investigate_log("has been gibbed by consuming [src] while fat.", INVESTIGATE_DEATHS) affected_mob.inflate_gib() return ..() + +/datum/reagent/consumable/worcestershire + name = "Worcestershire Sauce" + description = "That's \"Woostershire\" sauce, by the way." + nutriment_factor = 2 * REAGENTS_METABOLISM + color = "#572b26" + taste_description = "sweet fish" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + default_container = /obj/item/reagent_containers/condiment/worcestershire + +/datum/reagent/consumable/red_bay + name = "Red Bay Seasoning" + description = "A secret blend of herbs and spices that goes well with anything- according to Martians, at least." + color = "#8E4C00" + taste_description = "spice" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + default_container = /obj/item/reagent_containers/condiment/red_bay + +/datum/reagent/consumable/curry_powder + name = "Curry Powder" + description = "One of humanity's most common spices. Typically used to make curry." + color = "#F6C800" + taste_description = "dry curry" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + default_container = /obj/item/reagent_containers/condiment/curry_powder + +/datum/reagent/consumable/dashi_concentrate + name = "Dashi Concentrate" + description = "A concentrated form of dashi. Simmer with water in a 1:8 ratio to produce a tasty dashi broth." + color = "#372926" + taste_description = "extreme umami" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + default_container = /obj/item/reagent_containers/condiment/dashi_concentrate + +/datum/reagent/consumable/martian_batter + name = "Martian Batter" + description = "A thick batter made with dashi and flour, used for making dishes such as okonomiyaki and takoyaki." + color = "#D49D26" + taste_description = "umami dough" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/grounding_solution + name = "Grounding Solution" + description = "A food-safe ionic solution designed to neutralise the enigmatic \"liquid electricity\" that is common to food from Sprout, forming harmless salt on contact." + color = "#efeff0" + taste_description = "metallic salt" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 741f644b29e6..9519846b59b6 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1066,10 +1066,12 @@ ph = 8.7 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_NO_RANDOM_RECIPE addiction_types = list(/datum/addiction/stimulants = 4) //0.8 per 2 seconds - metabolized_traits = list(TRAIT_BATON_RESISTANCE, TRAIT_ANALGESIA) + metabolized_traits = list(TRAIT_BATON_RESISTANCE, TRAIT_ANALGESIA, TRAIT_CANT_STAMCRIT) /datum/reagent/medicine/stimulants/on_mob_metabolize(mob/living/affected_mob) ..() + if(HAS_TRAIT(affected_mob, TRAIT_INCAPACITATED)) + affected_mob.exit_stamina_stun() affected_mob.add_movespeed_modifier(/datum/movespeed_modifier/reagent/stimulants) /datum/reagent/medicine/stimulants/on_mob_end_metabolize(mob/living/affected_mob) @@ -1084,7 +1086,7 @@ affected_mob.adjustBruteLoss(-1 * REM * seconds_per_tick, FALSE, required_bodytype = affected_bodytype) affected_mob.adjustFireLoss(-1 * REM * seconds_per_tick, FALSE, required_bodytype = affected_bodytype) affected_mob.AdjustAllImmobility(-60 * REM * seconds_per_tick) - affected_mob.stamina.adjust(5 * REM * seconds_per_tick, TRUE) + affected_mob.stamina.adjust(10 * REM * seconds_per_tick, TRUE) ..() . = TRUE @@ -1294,12 +1296,12 @@ /datum/reagent/medicine/changelingadrenaline/on_mob_metabolize(mob/living/affected_mob) ..() - affected_mob.add_traits(list(TRAIT_SLEEPIMMUNE, TRAIT_BATON_RESISTANCE), type) + affected_mob.add_traits(list(TRAIT_SLEEPIMMUNE, TRAIT_BATON_RESISTANCE, TRAIT_CANT_STAMCRIT), type) affected_mob.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) /datum/reagent/medicine/changelingadrenaline/on_mob_end_metabolize(mob/living/affected_mob) ..() - affected_mob.remove_traits(list(TRAIT_SLEEPIMMUNE, TRAIT_BATON_RESISTANCE), type) + affected_mob.remove_traits(list(TRAIT_SLEEPIMMUNE, TRAIT_BATON_RESISTANCE, TRAIT_CANT_STAMCRIT), type) affected_mob.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) affected_mob.remove_status_effect(/datum/status_effect/dizziness) affected_mob.remove_status_effect(/datum/status_effect/jitter) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index ffa7b5b6d4a5..8df7408e8892 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -213,7 +213,7 @@ if(reac_volume >= 5) exposed_turf.MakeSlippery(TURF_WET_WATER, 10 SECONDS, min(reac_volume*1.5 SECONDS, 60 SECONDS)) - for(var/mob/living/simple_animal/slime/exposed_slime in exposed_turf) + for(var/mob/living/basic/slime/exposed_slime in exposed_turf) exposed_slime.apply_water() var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in exposed_turf) @@ -1370,7 +1370,7 @@ continue movable_content.wash(clean_types) - for(var/mob/living/simple_animal/slime/exposed_slime in exposed_turf) + for(var/mob/living/basic/slime/exposed_slime in exposed_turf) exposed_slime.adjustToxLoss(rand(5,10)) /datum/reagent/space_cleaner/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message=TRUE, touch_protection=0) @@ -2533,15 +2533,13 @@ if(200 to INFINITY) newsize = 3.5*RESIZE_DEFAULT_SIZE - affected_mob.resize = newsize/current_size + affected_mob.update_transform(newsize/current_size) current_size = newsize - affected_mob.update_transform() ..() /datum/reagent/growthserum/on_mob_end_metabolize(mob/living/affected_mob) - affected_mob.resize = RESIZE_DEFAULT_SIZE/current_size + affected_mob.update_transform(RESIZE_DEFAULT_SIZE/current_size) current_size = RESIZE_DEFAULT_SIZE - affected_mob.update_transform() ..() /datum/reagent/plastic_polymers diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 4e57b4dc2409..796c9cf19e06 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -264,7 +264,7 @@ . = ..() if(reac_volume < 5) return - for(var/mob/living/simple_animal/slime/exposed_slime in exposed_turf) + for(var/mob/living/basic/slime/exposed_slime in exposed_turf) exposed_slime.adjustToxLoss(rand(15,30)) #undef CRYO_SPEED_PREFACTOR diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 5400e381c529..aad8860acaeb 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -265,7 +265,7 @@ /datum/reagent/toxin/zombiepowder/on_mob_metabolize(mob/living/holder_mob) . = ..() holder_mob.adjustOxyLoss(0.5*REM, FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) - if(data?["method"] & INGEST) + if((data?["method"] & INGEST) && holder_mob.stat != DEAD) holder_mob.fakedeath(type) /datum/reagent/toxin/zombiepowder/on_mob_end_metabolize(mob/living/holder_mob) @@ -292,7 +292,8 @@ if(5 to 8) affected_mob.stamina.adjust(-40 * REM * seconds_per_tick, 0) if(9 to INFINITY) - affected_mob.fakedeath(type) + if(affected_mob.stat != DEAD) + affected_mob.fakedeath(type) ..() return TRUE @@ -672,9 +673,8 @@ /datum/reagent/toxin/venom/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) var/newsize = 1.1 * RESIZE_DEFAULT_SIZE - affected_mob.resize = newsize/current_size + affected_mob.update_transform(newsize/current_size) current_size = newsize - affected_mob.update_transform() toxpwr = 0.1 * volume affected_mob.adjustBruteLoss((0.3 * volume) * REM * seconds_per_tick, FALSE, required_bodytype = affected_bodytype) @@ -686,9 +686,8 @@ ..() /datum/reagent/toxin/venom/on_mob_end_metabolize(mob/living/affected_mob) - affected_mob.resize = RESIZE_DEFAULT_SIZE/current_size + affected_mob.update_transform(RESIZE_DEFAULT_SIZE/current_size) current_size = RESIZE_DEFAULT_SIZE - affected_mob.update_transform() ..() /datum/reagent/toxin/fentanyl diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 3f27ff2497bc..0f99c7c4321f 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -31,7 +31,7 @@ required_container = /obj/item/slime_extract/grey /datum/chemical_reaction/slime/slimespawn/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) - var/mob/living/simple_animal/slime/S = new(get_turf(holder.my_atom), "grey") + var/mob/living/basic/slime/S = new(get_turf(holder.my_atom), /datum/slime_color/grey) S.visible_message(span_danger("Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!")) ..() @@ -46,7 +46,7 @@ /datum/chemical_reaction/slime/slimemonkey/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) for(var/i in 1 to 3) - new /obj/item/food/monkeycube(get_turf(holder.my_atom)) + new /obj/item/stack/biomass(get_turf(holder.my_atom)) ..() //Green @@ -313,13 +313,13 @@ reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS /datum/chemical_reaction/slime/slimebloodlust/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) - for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(holder.my_atom), null)) - if(slime.docile) //Undoes docility, but doesn't make rabid. + for(var/mob/living/basic/slime/slime in viewers(get_turf(holder.my_atom), null)) + if(slime.has_slime_trait(/datum/slime_trait/docility)) //Undoes docility, but doesn't make rabid. slime.visible_message(span_danger("[slime] forgets its training, becoming wild once again!")) - slime.docile = FALSE + slime.remove_trait(/datum/slime_trait/docility) slime.update_name() continue - slime.rabid = 1 + ADD_TRAIT(slime, TRAIT_SLIME_RABID, "bloodlust") slime.visible_message(span_danger("The [slime] is driven into a frenzy!")) ..() @@ -527,7 +527,7 @@ S.active = TRUE addtimer(CALLBACK(S, TYPE_PROC_REF(/obj/item/grenade, detonate)), rand(15,60)) else - var/mob/living/simple_animal/slime/random/S = new (get_turf(holder.my_atom)) + var/mob/living/basic/slime/random/S = new (get_turf(holder.my_atom)) S.visible_message(span_danger("Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!")) ..() diff --git a/code/modules/reagents/reagent_containers/condiment.dm b/code/modules/reagents/reagent_containers/condiment.dm index 0814b1364c9e..28db9519a016 100644 --- a/code/modules/reagents/reagent_containers/condiment.dm +++ b/code/modules/reagents/reagent_containers/condiment.dm @@ -317,6 +317,51 @@ list_reagents = list(/datum/reagent/consumable/ketchup = 50) fill_icon_thresholds = null +/obj/item/reagent_containers/condiment/worcestershire + name = "worcestershire sauce" + desc = "A fermented sauce of legend from old England. Makes almost anything better." + icon_state = "worcestershire" + list_reagents = list(/datum/reagent/consumable/worcestershire = 50) + fill_icon_thresholds = null + +/obj/item/reagent_containers/condiment/red_bay + name = "\improper Red Bay seasoning" + desc = "Mars' favourite seasoning." + icon_state = "red_bay" + list_reagents = list(/datum/reagent/consumable/red_bay = 50) + fill_icon_thresholds = null + +/obj/item/reagent_containers/condiment/curry_powder + name = "curry powder" + desc = "It's this yellow magic that makes curry taste like curry." + icon_state = "curry_powder" + list_reagents = list(/datum/reagent/consumable/curry_powder = 50) + fill_icon_thresholds = null + +/obj/item/reagent_containers/condiment/dashi_concentrate + name = "dashi concentrate" + desc = "A bottle of Amagi brand dashi concentrate. Simmer with water in a 1:8 ratio for a perfect dashi broth." + icon_state = "dashi_concentrate" + list_reagents = list(/datum/reagent/consumable/dashi_concentrate = 50) + fill_icon_thresholds = null + +/obj/item/reagent_containers/condiment/coconut_milk + name = "coconut milk" + desc = "It's coconut milk. Toasty!" + icon_state = "coconut_milk" + inhand_icon_state = "carton" + lefthand_file = 'icons/mob/inhands/items/drinks_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/drinks_righthand.dmi' + list_reagents = list(/datum/reagent/consumable/coconut_milk = 50) + fill_icon_thresholds = null + +/obj/item/reagent_containers/condiment/grounding_solution + name = "grounding solution" + desc = "A food-safe ionic solution designed to neutralise the enigmatic \"liquid electricity\" that is common to food from Sprout, forming harmless salt on contact." + icon_state = "grounding_solution" + list_reagents = list(/datum/reagent/consumable/grounding_solution = 50) + fill_icon_thresholds = null + //technically condiment packs but they are non transparent /obj/item/reagent_containers/condiment/creamer diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index 9ac989742b2b..43ca9fec4e2f 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -344,7 +344,7 @@ /obj/item/reagent_containers/cup/bucket name = "bucket" desc = "It's a bucket." - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/service/janitor.dmi' worn_icon = 'icons/mob/clothing/head/utility.dmi' icon_state = "bucket" inhand_icon_state = "bucket" diff --git a/code/modules/reagents/reagent_containers/cups/drinkingglass.dm b/code/modules/reagents/reagent_containers/cups/drinkingglass.dm index 280da37f3275..57f48313d372 100644 --- a/code/modules/reagents/reagent_containers/cups/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/cups/drinkingglass.dm @@ -100,3 +100,8 @@ /obj/item/reagent_containers/cup/glass/drinkingglass/filled/nuka_cola name = "Nuka Cola" list_reagents = list(/datum/reagent/consumable/nuka_cola = 50) + +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/pina_colada + name = "Pina Colada" + list_reagents = list(/datum/reagent/consumable/ethanol/pina_colada = 50) + diff --git a/code/modules/reagents/reagent_containers/cups/drinks.dm b/code/modules/reagents/reagent_containers/cups/drinks.dm index b2eb1e4d1991..7ff6ca1ab291 100644 --- a/code/modules/reagents/reagent_containers/cups/drinks.dm +++ b/code/modules/reagents/reagent_containers/cups/drinks.dm @@ -138,14 +138,14 @@ desc = "Careful, cold ice, do not chew." custom_price = PAYCHECK_LOWER * 0.6 icon_state = "icecup" - //list_reagents = list(/datum/reagent/consumable/ice = 30) //Monkestation Removal: Ice was Instantly melting from vending machines + //list_reagents = list(/datum/reagent/consumable/ice = 30) Monkestation Removal: Ice was Instantly melting from vending machines spillable = TRUE isGlass = FALSE /obj/item/reagent_containers/cup/glass/ice/prison name = "dirty ice cup" desc = "Either Nanotrasen's water supply is contaminated, or this machine actually vends lemon, chocolate, and cherry snow cones." - list_reagents = list(/datum/reagent/consumable/ice = 25, /datum/reagent/consumable/liquidgibs = 5) + //list_reagents = list(/datum/reagent/consumable/ice = 25, /datum/reagent/consumable/liquidgibs = 5) Monkestation Removal: Ice was Instantly melting from vending machines /obj/item/reagent_containers/cup/glass/mug // parent type is literally just so empty mug sprites are a thing name = "mug" diff --git a/code/modules/reagents/reagent_containers/cups/glassbottle.dm b/code/modules/reagents/reagent_containers/cups/glassbottle.dm index 8568f1d8e3cc..659b236c7cea 100644 --- a/code/modules/reagents/reagent_containers/cups/glassbottle.dm +++ b/code/modules/reagents/reagent_containers/cups/glassbottle.dm @@ -712,6 +712,30 @@ list_reagents = list(/datum/reagent/consumable/ethanol/mushi_kombucha = 30) isGlass = FALSE +/obj/item/reagent_containers/cup/glass/bottle/hakka_mate + name = "Hakka-Mate" + desc = "Hakka-Mate: it's an acquired taste." + icon_state = "hakka_mate_bottle" + list_reagents = list(/datum/reagent/consumable/hakka_mate = 30) + +/obj/item/reagent_containers/cup/glass/bottle/shochu + name = "Shu-Kouba Straight Shochu" + desc = "A boozier form of shochu designed for mixing. Comes straight from Mars' Dusty City itself, Shu-Kouba." + icon_state = "shochu_bottle" + list_reagents = list(/datum/reagent/consumable/ethanol/shochu = 100) + +/obj/item/reagent_containers/cup/glass/bottle/yuyake + name = "Moonlabor Yūyake" + desc = "The distilled essence of disco and flared pants, captured like lightning in a bottle." + icon_state = "yuyake_bottle" + list_reagents = list(/datum/reagent/consumable/ethanol/yuyake = 100) + +/obj/item/reagent_containers/cup/glass/bottle/coconut_rum + name = "Breezy Shoals Coconut Rum" + desc = "Live the breezy life with Breezy Shoals, made with only the *finest Caribbean rum." + icon_state = "coconut_rum_bottle" + list_reagents = list(/datum/reagent/consumable/ethanol/coconut_rum = 100) + ////////////////////////// MOLOTOV /////////////////////// /obj/item/reagent_containers/cup/glass/bottle/molotov name = "molotov cocktail" @@ -792,7 +816,7 @@ /obj/item/reagent_containers/cup/glass/bottle/pruno name = "pruno mix" desc = "A trash bag filled with fruit, sugar, yeast, and water, pulped together into a pungent slurry to be fermented in an enclosed space, traditionally the toilet. Security would love to confiscate this, one of the many things wrong with them." - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/service/janitor.dmi' icon_state = "trashbag" list_reagents = list(/datum/reagent/consumable/prunomix = 50) var/fermentation_time = 30 SECONDS /// time it takes to ferment diff --git a/code/modules/reagents/reagent_containers/cups/soda.dm b/code/modules/reagents/reagent_containers/cups/soda.dm index 3a84373471d2..da708319d446 100644 --- a/code/modules/reagents/reagent_containers/cups/soda.dm +++ b/code/modules/reagents/reagent_containers/cups/soda.dm @@ -251,6 +251,21 @@ list_reagents = list(/datum/reagent/consumable/shamblers = 30) drink_type = SUGAR | JUNKFOOD +/obj/item/reagent_containers/cup/soda_cans/shamblers/eldritch + name = "Shambler's juice Eldritch Energy!" + desc = "~J'I'CE!~" + icon_state = "shamblerseldritch" + volume = 40 + list_reagents = list(/datum/reagent/consumable/shamblers = 30, /datum/reagent/eldritch = 5) + drink_type = SUGAR | JUNKFOOD + +/obj/item/reagent_containers/cup/soda_cans/wellcheers + name = "Wellcheers Juice" + desc = "A strange purple drink, smelling of saltwater. Somewhere in the distance, you hear seagulls." + icon_state = "wellcheers" + list_reagents = list(/datum/reagent/consumable/wellcheers = 30) + drink_type = SUGAR | JUNKFOOD + /obj/item/reagent_containers/cup/soda_cans/grey_bull name = "Grey Bull" desc = "Grey Bull, it gives you gloves!" @@ -267,8 +282,51 @@ list_reagents = list(/datum/reagent/consumable/monkey_energy = 50) drink_type = SUGAR | JUNKFOOD +/obj/item/reagent_containers/cup/soda_cans/volt_energy + name = "24-Volt Energy" + desc = "Recharge, with 24-Volt Energy!" + icon_state = "volt_energy" + list_reagents = list(/datum/reagent/consumable/volt_energy = 30) + drink_type = SUGAR | JUNKFOOD + +/obj/item/reagent_containers/cup/soda_cans/melon_soda + name = "Kansumi Melon Soda" + desc = "Japan's favourite melon soda, now available in can form!" + icon_state = "melon_soda" + list_reagents = list(/datum/reagent/consumable/melon_soda = 30) + drink_type = SUGAR | JUNKFOOD + /obj/item/reagent_containers/cup/soda_cans/air name = "canned air" desc = "There is no air shortage. Do not drink." icon_state = "air" list_reagents = list(/datum/reagent/nitrogen = 24, /datum/reagent/oxygen = 6) + +/obj/item/reagent_containers/cup/soda_cans/beer + name = "space beer" + desc = "Canned beer. In space." + icon_state = "space_beer" + volume = 40 + list_reagents = list(/datum/reagent/consumable/ethanol/beer = 40) + drink_type = GRAIN + +/obj/item/reagent_containers/cup/soda_cans/beer/rice + name = "rice beer" + desc = "A light, rice-based lagered beer popular on Mars. Considered a hate crime against Bavarians under the Reinheitsgebot Act of 1516." + icon_state = "ebisu" + list_reagents = list(/datum/reagent/consumable/ethanol/rice_beer = 40) + +/obj/item/reagent_containers/cup/soda_cans/beer/rice/Initialize(mapload) + . = ..() + var/brand = pick("Ebisu Super Dry", "Shimauma Ichiban", "Moonlabor Malt's") + name = "[brand]" + switch(brand) + if("Ebisu Super Dry") + icon_state = "ebisu" + desc = "Mars' favourite rice beer brand, 200 years running." + if("Shimauma Ichiban") + icon_state = "shimauma" + desc = "Mars' most middling rice beer brand. Not as popular as Ebisu, but it's comfortable in second place." + if("Moonlabor Malt's") + icon_state = "moonlabor" + desc = "Mars' underdog rice beer brand. Popular amongst the Yakuza, for reasons unknown." diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 147b55067c75..ea56463d1fba 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -16,6 +16,8 @@ slot_flags = ITEM_SLOT_BELT var/ignore_flags = NONE var/infinite = FALSE + /// If TRUE, won't play a noise when injecting. + var/stealthy = FALSE /obj/item/reagent_containers/hypospray/attack_paw(mob/user, list/modifiers) return attack_hand(user, modifiers) @@ -41,6 +43,8 @@ if(reagents.total_volume && (ignore_flags || affected_mob.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE))) // Ignore flag should be checked first or there will be an error message. to_chat(affected_mob, span_warning("You feel a tiny prick!")) to_chat(user, span_notice("You inject [affected_mob] with [src].")) + if(!stealthy) + playsound(affected_mob, 'sound/items/hypospray.ogg', 50, TRUE) var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1) diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 93e5255f85eb..419455054e33 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -1,7 +1,7 @@ /obj/item/reagent_containers/spray name = "spray bottle" desc = "A spray bottle, with an unscrewable top." - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/service/janitor.dmi' icon_state = "sprayer_large" inhand_icon_state = "cleaner" worn_icon_state = "spraybottle" diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 5e2b6d631be8..1fe250219162 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -9,7 +9,7 @@ max_integrity = 200 resistance_flags = FIRE_PROOF interaction_flags_machine = INTERACT_MACHINE_OPEN | INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON - obj_flags = CAN_BE_HIT | USES_TGUI + obj_flags = CAN_BE_HIT /// The internal air reservoir of the disposal var/datum/gas_mixture/air_contents diff --git a/code/modules/religion/religion_structures.dm b/code/modules/religion/religion_structures.dm index 1e542952fc0a..a7c654572ace 100644 --- a/code/modules/religion/religion_structures.dm +++ b/code/modules/religion/religion_structures.dm @@ -18,6 +18,7 @@ reflect_sect_in_icons() GLOB.chaplain_altars += src AddElement(/datum/element/climbable) + AddElement(/datum/element/elevation, pixel_shift = 12) /obj/structure/altar_of_gods/Destroy() GLOB.chaplain_altars -= src diff --git a/code/modules/religion/sparring/sparring_contract.dm b/code/modules/religion/sparring/sparring_contract.dm index 6c37f0cac2e7..4f1f17e6837e 100644 --- a/code/modules/religion/sparring/sparring_contract.dm +++ b/code/modules/religion/sparring/sparring_contract.dm @@ -39,6 +39,7 @@ data["set_area"] = arena?.name data["set_stakes"] = stakes_condition data["possible_areas"] = get_possible_areas() + data["stakes_holy_match"] = STAKES_HOLY_MATCH return data diff --git a/code/modules/research/designs/autolathe/medsci_designs.dm b/code/modules/research/designs/autolathe/medsci_designs.dm index e0b03384044b..599babb107f2 100644 --- a/code/modules/research/designs/autolathe/medsci_designs.dm +++ b/code/modules/research/designs/autolathe/medsci_designs.dm @@ -36,17 +36,6 @@ departmental_flags = DEPARTMENT_BITFLAG_MEDICAL // Science Designs -/datum/design/slime_scanner - name = "Slime Scanner" - id = "slime_scanner" - build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) - build_path = /obj/item/slime_scanner - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_XENOBIOLOGY, - ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE /datum/design/petridish name = "Petri Dish" diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 84c5a3ac80ab..05f0defdf8b7 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -46,16 +46,6 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SCIENCE -/datum/design/board/xenobiocamera - name = "Xenobiology Console Board" - desc = "Allows for the construction of circuit boards used to build xenobiology camera computers." - id = "xenobioconsole" - build_path = /obj/item/circuitboard/computer/xenobiology - category = list( - RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_RESEARCH - ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE - /datum/design/board/aiupload name = "AI Upload Board" desc = "Allows for the construction of circuit boards used to build an AI Upload Console." diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 2959c9af5de0..4c9bfc3a262a 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -522,16 +522,6 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE -/datum/design/board/monkey_recycler - name = "Monkey Recycler Board" - desc = "The circuit board for a monkey recycler." - id = "monkey_recycler" - build_path = /obj/item/circuitboard/machine/monkey_recycler - category = list( - RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH - ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE - /datum/design/board/seed_extractor name = "Seed Extractor Board" desc = "The circuit board for a seed extractor." diff --git a/code/modules/research/ordnance/tank_compressor.dm b/code/modules/research/ordnance/tank_compressor.dm index 44d1505b0865..52cadfa08e20 100644 --- a/code/modules/research/ordnance/tank_compressor.dm +++ b/code/modules/research/ordnance/tank_compressor.dm @@ -85,9 +85,6 @@ update_appearance() return TRUE -/obj/machinery/atmospherics/components/binary/circulator/get_node_connects() - return list(turn(dir, 180), dir) // airs[2] is input which is facing dir, airs[1] is output which is facing the other side of dir - /obj/machinery/atmospherics/components/binary/tank_compressor/screwdriver_act(mob/living/user, obj/item/tool) if(active || inserted_tank) return FALSE diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 8b5fc4ff97ed..f689ab713294 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -105,7 +105,6 @@ "shaker", "shot_glass", "signaler", - "slime_scanner", "solar_panel", "solar_tracker", "space_heater", @@ -474,13 +473,19 @@ "gibber", "griddle", "microwave", - "monkey_recycler", "oven", "processor", "range", // should be in a further node, probably "reagentgrinder", "smartfridge", "stove", + "biomass_recycler", + "corral_corner", + "slime_extract_requestor", + "slime_market_pad", + "slime_market", + "slimevac", + ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) discount_experiments = list(/datum/experiment/scanning/random/cytology = 3000) //Big discount to reinforce doing it. @@ -707,7 +712,6 @@ "beacon", "bluespace_crystal", "telesci_gps", - "xenobioconsole", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) diff --git a/code/modules/research/xenobiology/crossbreeding/__corecross.dm b/code/modules/research/xenobiology/crossbreeding/__corecross.dm index b682bed7cdfa..4a8ff0e6ce95 100644 --- a/code/modules/research/xenobiology/crossbreeding/__corecross.dm +++ b/code/modules/research/xenobiology/crossbreeding/__corecross.dm @@ -89,6 +89,8 @@ To add a crossbreed: if("adamantine") itemcolor = "#008B8B" add_atom_colour(itemcolor, FIXED_COLOUR_PRIORITY) + if(colour == "rainbow") + rainbow_effect() /obj/item/slimecrossbeaker //To be used as a result for extract reactions that make chemicals. name = "result extract" diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm index 9a807201f669..03ed99dceccb 100644 --- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm +++ b/code/modules/research/xenobiology/crossbreeding/_clothing.dm @@ -74,7 +74,7 @@ Slimecrossing Armor if(!IsAvailable(feedback = TRUE)) return var/obj/item/clothing/glasses/prism_glasses/glasses = target - var/new_color = input(owner, "Choose the lens color:", "Color change",glasses.glasses_color) as color|null + var/new_color = tgui_color_picker(owner, "Choose the lens color:", "Color change", glasses.glasses_color) if(!new_color) return glasses.glasses_color = new_color diff --git a/code/modules/research/xenobiology/crossbreeding/_misc.dm b/code/modules/research/xenobiology/crossbreeding/_misc.dm index ed9b9983ae33..9f57486f5301 100644 --- a/code/modules/research/xenobiology/crossbreeding/_misc.dm +++ b/code/modules/research/xenobiology/crossbreeding/_misc.dm @@ -86,17 +86,12 @@ Slimecrossing Items return . | ..() //Hypercharged slime cell - Charged Yellow -/obj/item/stock_parts/cell/high/slime_hypercharged +/obj/item/stock_parts/cell/emproof/slime/hypercharged // monke edit: make hypercharged slime cells EMP-proof, by changing their parent from cell/high to cell/emproof name = "hypercharged slime core" - desc = "A charged yellow slime extract, infused with plasma. It almost hurts to touch." - icon = 'icons/mob/simple/slimes.dmi' - icon_state = "yellow slime extract" + desc = "A charged yellow slime extract, infused with plasma. It almost hurts to touch. Its organic nature makes it immune to EMPs." rating = 7 - custom_materials = null maxcharge = 50000 chargerate = 2500 - charge_light_type = null - connector_type = "slimecore" //Barrier cube - Chilling Grey /obj/item/barriercube diff --git a/code/modules/research/xenobiology/crossbreeding/_mobs.dm b/code/modules/research/xenobiology/crossbreeding/_mobs.dm index 24e44f0a389b..851d9f7f8d0b 100644 --- a/code/modules/research/xenobiology/crossbreeding/_mobs.dm +++ b/code/modules/research/xenobiology/crossbreeding/_mobs.dm @@ -16,7 +16,7 @@ Slimecrossing Mobs convert_damage = TRUE convert_damage_type = CLONE - possible_shapes = list(/mob/living/simple_animal/slime/transformed_slime) + possible_shapes = list(/mob/living/basic/slime) /// If TRUE, we self-delete (remove ourselves) the next time we turn back into a human var/remove_on_restore = FALSE @@ -29,14 +29,6 @@ Slimecrossing Mobs if(remove_on_restore) qdel(src) -/// Transformed slime - from Burning Black -/mob/living/simple_animal/slime/transformed_slime - -// Just in case. -/mob/living/simple_animal/slime/transformed_slime/Reproduce() - to_chat(src, span_warning("I can't reproduce...")) // Mood - return - //Slime corgi - Chilling Pink /mob/living/basic/pet/dog/corgi/puppy/slime name = "\improper slime corgi puppy" diff --git a/code/modules/research/xenobiology/crossbreeding/_potions.dm b/code/modules/research/xenobiology/crossbreeding/_potions.dm index 0b5368f53728..1e6205dc8039 100644 --- a/code/modules/research/xenobiology/crossbreeding/_potions.dm +++ b/code/modules/research/xenobiology/crossbreeding/_potions.dm @@ -183,7 +183,7 @@ Slimecrossing Potions icon = 'icons/obj/medical/chemical.dmi' icon_state = "potsilver" -/obj/item/slimepotion/slime_reviver/attack(mob/living/simple_animal/slime/revive_target, mob/user) +/obj/item/slimepotion/slime_reviver/attack(mob/living/basic/slime/revive_target, mob/user) if(!isslime(revive_target)) to_chat(user, span_warning("The potion only works on slimes!")) return ..() @@ -207,7 +207,7 @@ Slimecrossing Potions icon = 'icons/obj/medical/chemical.dmi' icon_state = "potcyan" -/obj/item/slimepotion/slime/chargedstabilizer/attack(mob/living/simple_animal/slime/stabilize_target, mob/user) +/obj/item/slimepotion/slime/chargedstabilizer/attack(mob/living/basic/slime/stabilize_target, mob/user) if(!isslime(stabilize_target)) to_chat(user, span_warning("The stabilizer only works on slimes!")) return ..() diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index a68a6fafae35..a7c6c3baed07 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -470,10 +470,8 @@ colour = "grey" /datum/status_effect/stabilized/grey/tick() - for(var/mob/living/simple_animal/slime/S in range(1, get_turf(owner))) - if(!(owner in S.Friends)) - to_chat(owner, span_notice("[linked_extract] pulses gently as it communicates with [S].")) - S.set_friendship(owner, 1) + for(var/mob/living/basic/slime/S in range(1, get_turf(owner))) + SEND_SIGNAL(S, COMSIG_FRIENDSHIP_CHANGE, owner, 1) return ..() /datum/status_effect/stabilized/orange diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index 1bbdd4b14820..794d631c8ce5 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -96,6 +96,7 @@ Slimecrossing Weapons item_flags = ABSTRACT | DROPDEL w_class = WEIGHT_CLASS_HUGE slot_flags = NONE + antimagic_flags = NONE force = 5 max_charges = 1 //Recharging costs blood. recharge_rate = 1 diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm index 14d2f980eb43..b2d8eaaed28f 100644 --- a/code/modules/research/xenobiology/crossbreeding/burning.dm +++ b/code/modules/research/xenobiology/crossbreeding/burning.dm @@ -32,11 +32,10 @@ Burning extracts: effect_desc = "Creates a hungry and speedy slime that will love you forever." /obj/item/slimecross/burning/grey/do_effect(mob/user) - var/mob/living/simple_animal/slime/S = new(get_turf(user),"grey") + var/mob/living/basic/slime/S = new(get_turf(user)) S.visible_message(span_danger("A baby slime emerges from [src], and it nuzzles [user] before burbling hungrily!")) - S.set_friendship(user, 20) //Gas, gas, gas + SEND_SIGNAL(S, COMSIG_FRIENDSHIP_CHANGE, user, 110) S.bodytemperature = T0C + 400 //We gonna step on the gas. - S.set_nutrition(S.get_hunger_nutrition()) //Tonight, we fight! ..() /obj/item/slimecross/burning/orange @@ -197,14 +196,16 @@ Burning extracts: /obj/item/slimecross/burning/red/do_effect(mob/user) user.visible_message(span_danger("[src] pulses a hazy red aura for a moment, which wraps around [user]!")) - for(var/mob/living/simple_animal/slime/S in view(7, get_turf(user))) + for(var/mob/living/basic/slime/S in view(7, get_turf(user))) + /* if(user in S.Friends) var/friendliness = S.Friends[user] S.clear_friends() S.set_friendship(user, friendliness) else S.clear_friends() - S.rabid = 1 + */ + ADD_TRAIT(S, TRAIT_SLIME_RABID, "burning-red") S.visible_message(span_danger("The [S] is driven into a dangerous frenzy!")) ..() diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm index e41741840b20..5e14557999cd 100644 --- a/code/modules/research/xenobiology/crossbreeding/charged.dm +++ b/code/modules/research/xenobiology/crossbreeding/charged.dm @@ -81,7 +81,7 @@ Charged extracts: effect_desc = "Creates a hypercharged slime cell battery, which has high capacity but takes longer to recharge." /obj/item/slimecross/charged/yellow/do_effect(mob/user) - new /obj/item/stock_parts/cell/high/slime_hypercharged(get_turf(user)) + new /obj/item/stock_parts/cell/emproof/slime/hypercharged(user.drop_location()) // monke edit: make hypercharged slime cells EMP-proof, by changing their parent from cell/high to cell/emproof user.visible_message(span_notice("[src] sparks violently, and swells with electric power!")) ..() @@ -276,6 +276,6 @@ Charged extracts: /obj/item/slimecross/charged/rainbow/do_effect(mob/user) user.visible_message(span_warning("[src] swells and splits into three new slimes!")) for(var/i in 1 to 3) - var/mob/living/simple_animal/slime/S = new(get_turf(user)) - S.random_colour() + var/mob/living/basic/slime/S = new(get_turf(user)) + S.start_mutating(TRUE) return ..() diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm index 18f5a2849cab..9c37d0df7b87 100644 --- a/code/modules/research/xenobiology/crossbreeding/chilling.dm +++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm @@ -231,9 +231,9 @@ Chilling extracts: /obj/item/slimecross/chilling/red/do_effect(mob/user) var/slimesfound = FALSE - for(var/mob/living/simple_animal/slime/S in view(get_turf(user), 7)) + for(var/mob/living/basic/slime/S in view(get_turf(user), 7)) slimesfound = TRUE - S.docile = TRUE + S.add_trait(/datum/slime_trait/docility) if(slimesfound) user.visible_message(span_notice("[src] lets out a peaceful ring as it shatters, and nearby slimes seem calm.")) else diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm index 710cf90dd71e..425e8026f896 100644 --- a/code/modules/research/xenobiology/crossbreeding/industrial.dm +++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm @@ -54,7 +54,7 @@ Industrial extracts: /obj/item/slimecross/industrial/grey colour = "grey" effect_desc = "Produces monkey cubes." - itempath = /obj/item/food/monkeycube + itempath = /obj/item/stack/biomass itemamount = 5 /obj/item/slimecross/industrial/orange diff --git a/code/modules/research/xenobiology/crossbreeding/prismatic.dm b/code/modules/research/xenobiology/crossbreeding/prismatic.dm index 9cfc4542d526..5d6567ed15a6 100644 --- a/code/modules/research/xenobiology/crossbreeding/prismatic.dm +++ b/code/modules/research/xenobiology/crossbreeding/prismatic.dm @@ -115,7 +115,7 @@ Prismatic extracts: colour = "rainbow" /obj/item/slimecross/prismatic/rainbow/attack_self(mob/user) - var/newcolor = input(user, "Choose the slime color:", "Color change",paintcolor) as color|null + var/newcolor = tgui_color_picker(user, "Choose the slime color:", "Color change", paintcolor) if(user.get_active_held_item() != src || user.stat != CONSCIOUS || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) return if(!newcolor) diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm index 6460b3a849fe..a0b357d7bdcf 100644 --- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm +++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm @@ -197,8 +197,8 @@ Regenerative extracts: /obj/item/slimecross/regenerative/green/core_effect(mob/living/target, mob/user) if(isslime(target)) target.visible_message(span_warning("The [target] suddenly changes color!")) - var/mob/living/simple_animal/slime/S = target - S.random_colour() + var/mob/living/basic/slime/S = target + S.start_mutating(TRUE) if(isjellyperson(target)) target.reagents.add_reagent(/datum/reagent/mutationtoxin/jelly,5) @@ -237,7 +237,7 @@ Regenerative extracts: /obj/item/slimecross/regenerative/black/core_effect_before(mob/living/target, mob/user) var/dummytype = target.type if(ismegafauna(target)) //Prevents megafauna duping in a lame way - dummytype = /mob/living/simple_animal/slime + dummytype = /mob/living/basic/slime to_chat(user, span_warning("The milky goo flows over [target], falling into a weak puddle.")) var/mob/living/dummy = new dummytype(target.loc) to_chat(target, span_notice("The milky goo flows from your skin, forming an imperfect copy of you.")) diff --git a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm index cb903c84d625..f22e6109fb35 100644 --- a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm +++ b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm @@ -249,7 +249,7 @@ /datum/reagent/consumable/ice = -2) //Brrr! virus_suspectibility = 0 - resulting_atoms = list(/mob/living/simple_animal/slime = 1) + resulting_atoms = list(/mob/living/basic/slime = 1) /datum/micro_organism/cell_line/blob_spore //shitty cell line to dilute the pool, feel free to make easier to grow if it doesn't interfer with growing the powerful mobs enough. desc = "Immature blob spores" diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm deleted file mode 100644 index d3b1b581c019..000000000000 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ /dev/null @@ -1,453 +0,0 @@ -//Xenobio control console -/mob/camera/ai_eye/remote/xenobio - visible_icon = TRUE - icon = 'icons/mob/silicon/cameramob.dmi' - icon_state = "generic_camera" - var/allowed_area = null - -/mob/camera/ai_eye/remote/xenobio/Initialize(mapload) - var/area/A = get_area(loc) - allowed_area = A.name - . = ..() - -/mob/camera/ai_eye/remote/xenobio/setLoc(turf/destination, force_update = FALSE) - var/area/new_area = get_area(destination) - if(new_area && new_area.name == allowed_area || new_area && (new_area.area_flags & XENOBIOLOGY_COMPATIBLE)) - return ..() - else - return - -/mob/camera/ai_eye/remote/xenobio/can_z_move(direction, turf/start, turf/destination, z_move_flags = NONE, mob/living/rider) - . = ..() - if(!.) - return - var/area/new_area = get_area(.) - if(new_area.name != allowed_area && !(new_area.area_flags & XENOBIOLOGY_COMPATIBLE)) - return FALSE - -/obj/machinery/computer/camera_advanced/xenobio - name = "Slime management console" - desc = "A computer used for remotely handling slimes." - networks = list("ss13") - circuit = /obj/item/circuitboard/computer/xenobiology - - var/obj/machinery/monkey_recycler/connected_recycler - var/list/stored_slimes - var/obj/item/slimepotion/slime/current_potion - var/max_slimes = 5 - var/monkeys = 0 - - icon_screen = "slime_comp" - icon_keyboard = "rd_key" - - light_color = LIGHT_COLOR_PINK - -/obj/machinery/computer/camera_advanced/xenobio/Initialize(mapload) - . = ..() - actions += new /datum/action/innate/slime_place(src) - actions += new /datum/action/innate/slime_pick_up(src) - actions += new /datum/action/innate/feed_slime(src) - actions += new /datum/action/innate/monkey_recycle(src) - actions += new /datum/action/innate/slime_scan(src) - actions += new /datum/action/innate/feed_potion(src) - actions += new /datum/action/innate/hotkey_help(src) - - stored_slimes = list() - for(var/obj/machinery/monkey_recycler/recycler in GLOB.monkey_recyclers) - if(get_area(recycler.loc) == get_area(loc)) - connected_recycler = recycler - connected_recycler.connected += src - -/obj/machinery/computer/camera_advanced/xenobio/Destroy() - QDEL_NULL(current_potion) - for(var/thing in stored_slimes) - var/mob/living/simple_animal/slime/S = thing - S.forceMove(drop_location()) - stored_slimes.Cut() - if(connected_recycler) - connected_recycler.connected -= src - connected_recycler = null - return ..() - -/obj/machinery/computer/camera_advanced/xenobio/handle_atom_del(atom/A) - if(A == current_potion) - current_potion = null - if(A in stored_slimes) - stored_slimes -= A - return ..() - -/obj/machinery/computer/camera_advanced/xenobio/CreateEye() - eyeobj = new /mob/camera/ai_eye/remote/xenobio(get_turf(src)) - eyeobj.origin = src - eyeobj.visible_icon = TRUE - eyeobj.icon = 'icons/mob/silicon/cameramob.dmi' - eyeobj.icon_state = "generic_camera" - -/obj/machinery/computer/camera_advanced/xenobio/GrantActions(mob/living/user) - ..() - RegisterSignal(user, COMSIG_XENO_SLIME_CLICK_CTRL, PROC_REF(XenoSlimeClickCtrl)) - RegisterSignal(user, COMSIG_XENO_TURF_CLICK_CTRL, PROC_REF(XenoTurfClickCtrl)) - RegisterSignal(user, COMSIG_XENO_MONKEY_CLICK_CTRL, PROC_REF(XenoMonkeyClickCtrl)) - RegisterSignal(user, COMSIG_XENO_SLIME_CLICK_ALT, PROC_REF(XenoSlimeClickAlt)) - RegisterSignal(user, COMSIG_XENO_SLIME_CLICK_SHIFT, PROC_REF(XenoSlimeClickShift)) - RegisterSignal(user, COMSIG_XENO_TURF_CLICK_SHIFT, PROC_REF(XenoTurfClickShift)) - - //Checks for recycler on every interact, prevents issues with load order on certain maps. - if(!connected_recycler) - for(var/obj/machinery/monkey_recycler/recycler in GLOB.monkey_recyclers) - if(get_area(recycler.loc) == get_area(loc)) - connected_recycler = recycler - connected_recycler.connected += src - -/obj/machinery/computer/camera_advanced/xenobio/remove_eye_control(mob/living/user) - UnregisterSignal(user, COMSIG_XENO_SLIME_CLICK_CTRL) - UnregisterSignal(user, COMSIG_XENO_TURF_CLICK_CTRL) - UnregisterSignal(user, COMSIG_XENO_MONKEY_CLICK_CTRL) - UnregisterSignal(user, COMSIG_XENO_SLIME_CLICK_ALT) - UnregisterSignal(user, COMSIG_XENO_SLIME_CLICK_SHIFT) - UnregisterSignal(user, COMSIG_XENO_TURF_CLICK_SHIFT) - ..() - -/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/food/monkeycube)) - monkeys++ - to_chat(user, span_notice("You feed [O] to [src]. It now has [monkeys] monkey cubes stored.")) - qdel(O) - return - else if(istype(O, /obj/item/storage/bag)) - var/obj/item/storage/P = O - var/loaded = FALSE - for(var/obj/G in P.contents) - if(istype(G, /obj/item/food/monkeycube)) - loaded = TRUE - monkeys++ - qdel(G) - if(loaded) - to_chat(user, span_notice("You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.")) - return - else if(istype(O, /obj/item/slimepotion/slime)) - var/replaced = FALSE - if(user && !user.transferItemToLoc(O, src)) - return - if(!QDELETED(current_potion)) - current_potion.forceMove(drop_location()) - replaced = TRUE - current_potion = O - to_chat(user, span_notice("You load [O] in the console's potion slot[replaced ? ", replacing the one that was there before" : ""].")) - return - ..() - -/obj/machinery/computer/camera_advanced/xenobio/multitool_act(mob/living/user, obj/item/multitool/I) - . = ..() - if (istype(I) && istype(I.buffer,/obj/machinery/monkey_recycler)) - to_chat(user, span_notice("You link [src] with [I.buffer] in [I] buffer.")) - connected_recycler = I.buffer - connected_recycler.connected += src - return TRUE - -/datum/action/innate/slime_place - name = "Place Slimes" - button_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "slime_down" - -/datum/action/innate/slime_place/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/ai_eye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/simple_animal/slime/S in X.stored_slimes) - S.forceMove(remote_eye.loc) - S.visible_message(span_notice("[S] warps in!")) - X.stored_slimes -= S - else - to_chat(owner, span_warning("Target is not near a camera. Cannot proceed.")) - -/datum/action/innate/slime_pick_up - name = "Pick up Slime" - button_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "slime_up" - -/datum/action/innate/slime_pick_up/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/ai_eye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/simple_animal/slime/S in remote_eye.loc) - if(X.stored_slimes.len >= X.max_slimes) - break - if(!S.ckey) - if(S.buckled) - S.Feedstop(silent = TRUE) - S.visible_message(span_notice("[S] vanishes in a flash of light!")) - S.forceMove(X) - X.stored_slimes += S - else - to_chat(owner, span_warning("Target is not near a camera. Cannot proceed.")) - - -/datum/action/innate/feed_slime - name = "Feed Slimes" - button_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "monkey_down" - -/datum/action/innate/feed_slime/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/ai_eye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - if(X.monkeys >= 1) - var/mob/living/carbon/human/species/monkey/food = new /mob/living/carbon/human/species/monkey(remote_eye.loc, TRUE, owner) - if (!QDELETED(food)) - food.LAssailant = WEAKREF(C) - X.monkeys-- - X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors - remote_eye.auto_attach_slime(food) // monke edit: hungry slimes that aren't feeding will now immediately latch onto monkeys placed on top of them - to_chat(owner, span_notice("[X] now has [X.monkeys] monkeys stored.")) - else - to_chat(owner, span_warning("[X] needs to have at least 1 monkey stored. Currently has [X.monkeys] monkeys stored.")) - else - to_chat(owner, span_warning("Target is not near a camera. Cannot proceed.")) - - -/datum/action/innate/monkey_recycle - name = "Recycle Monkeys" - button_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "monkey_up" - -/datum/action/innate/monkey_recycle/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/ai_eye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - var/obj/machinery/monkey_recycler/recycler = X.connected_recycler - - if(!recycler) - to_chat(owner, span_warning("There is no connected monkey recycler. Use a multitool to link one.")) - return - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/carbon/human/M in remote_eye.loc) - if(!ismonkey(M)) - continue - if(M.stat) - M.visible_message(span_notice("[M] vanishes as [M.p_theyre()] reclaimed for recycling!")) - recycler.use_power(500) - X.monkeys += recycler.cube_production - X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors - qdel(M) - to_chat(owner, span_notice("[X] now has [X.monkeys] monkeys available.")) - else - to_chat(owner, span_warning("Target is not near a camera. Cannot proceed.")) - -/datum/action/innate/slime_scan - name = "Scan Slime" - button_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "slime_scan" - -/datum/action/innate/slime_scan/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/ai_eye/remote/xenobio/remote_eye = C.remote_control - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/simple_animal/slime/S in remote_eye.loc) - slime_scan(S, C) - else - to_chat(owner, span_warning("Target is not near a camera. Cannot proceed.")) - -/datum/action/innate/feed_potion - name = "Apply Potion" - button_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "slime_potion" - -/datum/action/innate/feed_potion/Activate() - if(!target || !isliving(owner)) - return - - var/mob/living/C = owner - var/mob/camera/ai_eye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - - if(QDELETED(X.current_potion)) - to_chat(owner, span_warning("No potion loaded.")) - return - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/simple_animal/slime/S in remote_eye.loc) - X.current_potion.attack(S, C) - break - else - to_chat(owner, span_warning("Target is not near a camera. Cannot proceed.")) - -/datum/action/innate/hotkey_help - name = "Hotkey Help" - button_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "hotkey_help" - -/datum/action/innate/hotkey_help/Activate() - if(!target || !isliving(owner)) - return - to_chat(owner, "Click shortcuts:") - to_chat(owner, "Shift-click a slime to pick it up, or the floor to drop all held slimes.") - to_chat(owner, "Ctrl-click a slime to scan it.") - to_chat(owner, "Alt-click a slime to feed it a potion.") - to_chat(owner, "Ctrl-click or a dead monkey to recycle it, or the floor to place a new monkey.") - -// -// Alternate clicks for slime, monkey and open turf if using a xenobio console - - -//Feeds a potion to slime -/mob/living/simple_animal/slime/AltClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_ALT, src) - ..() - -//Picks up slime -/mob/living/simple_animal/slime/ShiftClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_SHIFT, src) - ..() - -//Place slimes -/turf/open/ShiftClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_TURF_CLICK_SHIFT, src) - ..() - -//scans slimes -/mob/living/simple_animal/slime/CtrlClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_CTRL, src) - ..() - -//picks up dead monkies -/mob/living/carbon/human/species/monkey/CtrlClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_MONKEY_CLICK_CTRL, src) - ..() - -//places monkies -/turf/open/CtrlClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_TURF_CLICK_CTRL, src) - ..() - -// Scans slime -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickCtrl(mob/living/user, mob/living/simple_animal/slime/S) - SIGNAL_HANDLER - if(!GLOB.cameranet.checkTurfVis(S.loc)) - to_chat(user, span_warning("Target is not near a camera. Cannot proceed.")) - return - var/mob/living/C = user - var/mob/camera/ai_eye/remote/xenobio/E = C.remote_control - var/area/mobarea = get_area(S.loc) - if(mobarea.name == E.allowed_area || (mobarea.area_flags & XENOBIOLOGY_COMPATIBLE)) - slime_scan(S, C) - -//Feeds a potion to slime -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickAlt(mob/living/user, mob/living/simple_animal/slime/S) - SIGNAL_HANDLER - if(!GLOB.cameranet.checkTurfVis(S.loc)) - to_chat(user, span_warning("Target is not near a camera. Cannot proceed.")) - return - var/mob/living/C = user - var/mob/camera/ai_eye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/mobarea = get_area(S.loc) - if(QDELETED(X.current_potion)) - to_chat(C, span_warning("No potion loaded.")) - return - if(mobarea.name == E.allowed_area || (mobarea.area_flags & XENOBIOLOGY_COMPATIBLE)) - INVOKE_ASYNC(X.current_potion, TYPE_PROC_REF(/obj/item/slimepotion/slime, attack), S, C) - -//Picks up slime -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickShift(mob/living/user, mob/living/simple_animal/slime/S) - SIGNAL_HANDLER - if(!GLOB.cameranet.checkTurfVis(S.loc)) - to_chat(user, span_warning("Target is not near a camera. Cannot proceed.")) - return - var/mob/living/C = user - var/mob/camera/ai_eye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/mobarea = get_area(S.loc) - if(mobarea.name == E.allowed_area || (mobarea.area_flags & XENOBIOLOGY_COMPATIBLE)) - if(X.stored_slimes.len >= X.max_slimes) - to_chat(C, span_warning("Slime storage is full.")) - return - if(S.ckey) - to_chat(C, span_warning("The slime wiggled free!")) - return - if(S.buckled) - S.Feedstop(silent = TRUE) - S.visible_message(span_notice("[S] vanishes in a flash of light!")) - S.forceMove(X) - X.stored_slimes += S - -//Place slimes -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoTurfClickShift(mob/living/user, turf/open/T) - SIGNAL_HANDLER - - if(!GLOB.cameranet.checkTurfVis(T)) - to_chat(user, span_warning("Target is not near a camera. Cannot proceed.")) - return - var/mob/living/C = user - var/mob/camera/ai_eye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/turfarea = get_area(T) - if(turfarea.name == E.allowed_area || (turfarea.area_flags & XENOBIOLOGY_COMPATIBLE)) - for(var/mob/living/simple_animal/slime/S in X.stored_slimes) - S.forceMove(T) - S.visible_message(span_notice("[S] warps in!")) - X.stored_slimes -= S - -//Place monkey -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoTurfClickCtrl(mob/living/user, turf/open/T) - SIGNAL_HANDLER - if(!GLOB.cameranet.checkTurfVis(T)) - to_chat(user, span_warning("Target is not near a camera. Cannot proceed.")) - return - var/mob/living/C = user - var/mob/camera/ai_eye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/turfarea = get_area(T) - if(turfarea.name == E.allowed_area || (turfarea.area_flags & XENOBIOLOGY_COMPATIBLE)) - if(X.monkeys >= 1) - var/mob/living/carbon/human/food = new /mob/living/carbon/human/species/monkey(T, TRUE, C) - if (!QDELETED(food)) - food.LAssailant = WEAKREF(C) - X.monkeys-- - X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors - E.auto_attach_slime(food) // monke edit: hungry slimes that aren't feeding will now immediately latch onto monkeys placed on top of them - to_chat(C, span_notice("[X] now has [X.monkeys] monkeys stored.")) - else - to_chat(C, span_warning("[X] needs to have at least 1 monkey stored. Currently has [X.monkeys] monkeys stored.")) - -//Pick up monkey -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoMonkeyClickCtrl(mob/living/user, mob/living/carbon/human/M) - SIGNAL_HANDLER - if(!ismonkey(M)) - return - if(!isturf(M.loc) || !GLOB.cameranet.checkTurfVis(M.loc)) - to_chat(user, span_warning("Target is not near a camera. Cannot proceed.")) - return - var/mob/living/C = user - var/mob/camera/ai_eye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/mobarea = get_area(M.loc) - if(!X.connected_recycler) - to_chat(C, span_warning("There is no connected monkey recycler. Use a multitool to link one.")) - return - if(mobarea.name == E.allowed_area || (mobarea.area_flags & XENOBIOLOGY_COMPATIBLE)) - if(!M.stat) - return - M.visible_message(span_notice("[M] vanishes as [p_theyre()] reclaimed for recycling!")) - X.connected_recycler.use_power(500) - X.monkeys += connected_recycler.cube_production - X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors - qdel(M) - to_chat(C, span_notice("[X] now has [X.monkeys] monkeys available.")) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 873576a46bdc..f2606e0310aa 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -3,8 +3,8 @@ /obj/item/slime_extract name = "slime extract" desc = "Goo extracted from a slime. Legends claim these to have \"magical powers\"." - icon = 'icons/mob/simple/slimes.dmi' - icon_state = "grey slime extract" + icon = 'monkestation/code/modules/slimecore/icons/slimes.dmi' + icon_state = "grey_slime_extract" force = 0 w_class = WEIGHT_CLASS_TINY throwforce = 0 @@ -17,6 +17,8 @@ var/list/activate_reagents = list() ///Reagents required for activation var/recurring = FALSE + var/tier = 1 + /obj/item/slime_extract/examine(mob/user) . = ..() if(Uses > 1) @@ -58,45 +60,16 @@ to_chat(user, span_warning("Nothing happened... This slime extract cannot be activated this way.")) return FALSE -/** -* Core-crossing: Feeding adult slimes extracts to obtain a much more powerful, single extract. -* -* By using a valid core on a living adult slime, then feeding it nine more of the same type, you can mutate it into more useful items. Not every slime type has an implemented core cross. -*/ -/obj/item/slime_extract/attack(mob/living/simple_animal/slime/M, mob/user) - if(!isslime(M)) - return ..() - if(M.stat) - to_chat(user, span_warning("The slime is dead!")) - return - if(!M.is_adult) - to_chat(user, span_warning("The slime must be an adult to cross its core!")) - return - if(M.effectmod && M.effectmod != effectmod) - to_chat(user, span_warning("The slime is already being crossed with a different extract!")) - return - - if(!M.effectmod) - M.effectmod = effectmod - - M.applied++ - qdel(src) - to_chat(user, span_notice("You feed the slime [src], [M.applied == 1 ? "starting to mutate its core." : "further mutating its core."]")) - playsound(M, 'sound/effects/attackblob.ogg', 50, TRUE) - - if(M.applied >= SLIME_EXTRACT_CROSSING_REQUIRED) - M.spawn_corecross() - /obj/item/slime_extract/grey name = "grey slime extract" - icon_state = "grey slime extract" + icon_state = "grey_slime_extract" effectmod = "reproductive" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) /obj/item/slime_extract/grey/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) if(SLIME_ACTIVATE_MINOR) - var/obj/item/food/monkeycube/M = new + var/obj/item/stack/biomass/M = new if(!user.put_in_active_hand(M)) M.forceMove(user.drop_location()) playsound(user, 'sound/effects/splat.ogg', 50, TRUE) @@ -105,7 +78,7 @@ if(SLIME_ACTIVATE_MAJOR) to_chat(user, span_notice("Your [name] starts pulsing...")) if(do_after(user, 40, target = user)) - var/mob/living/simple_animal/slime/S = new(get_turf(user), "grey") + var/mob/living/basic/slime/S = new(get_turf(user)) playsound(user, 'sound/effects/splat.ogg', 50, TRUE) to_chat(user, span_notice("You spit out [S].")) return 350 @@ -114,9 +87,10 @@ /obj/item/slime_extract/gold name = "gold slime extract" - icon_state = "gold slime extract" + icon_state = "gold_slime_extract" effectmod = "symbiont" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) + tier = 4 @@ -145,9 +119,10 @@ /obj/item/slime_extract/silver name = "silver slime extract" - icon_state = "silver slime extract" + icon_state = "silver_slime_extract" effectmod = "consuming" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) + tier = 2 @@ -173,7 +148,7 @@ /obj/item/slime_extract/metal name = "metal slime extract" - icon_state = "metal slime extract" + icon_state = "metal_slime_extract" effectmod = "industrial" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -197,7 +172,7 @@ /obj/item/slime_extract/purple name = "purple slime extract" - icon_state = "purple slime extract" + icon_state = "purple_slime_extract" effectmod = "regenerative" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) @@ -216,9 +191,10 @@ /obj/item/slime_extract/darkpurple name = "dark purple slime extract" - icon_state = "dark purple slime extract" + icon_state = "dark_purple_slime_extract" effectmod = "self-sustaining" activate_reagents = list(/datum/reagent/toxin/plasma) + tier = 2 /obj/item/slime_extract/darkpurple/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -239,7 +215,7 @@ /obj/item/slime_extract/orange name = "orange slime extract" - icon_state = "orange slime extract" + icon_state = "orange_slime_extract" effectmod = "burning" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -259,9 +235,10 @@ /obj/item/slime_extract/yellow name = "yellow slime extract" - icon_state = "yellow slime extract" + icon_state = "yellow_slime_extract" effectmod = "charged" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) + tier = 2 /obj/item/slime_extract/yellow/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -282,9 +259,10 @@ /obj/item/slime_extract/red name = "red slime extract" - icon_state = "red slime extract" + icon_state = "red_slime_extract" effectmod = "sanguine" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) + tier = 3 /obj/item/slime_extract/red/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -295,14 +273,14 @@ if(SLIME_ACTIVATE_MAJOR) user.visible_message(span_warning("[user]'s skin flashes red for a moment..."), span_warning("Your skin flashes red as you emit rage-inducing pheromones...")) - for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(user), null)) - slime.rabid = TRUE + for(var/mob/living/basic/slime/slime in viewers(get_turf(user), null)) + ADD_TRAIT(slime, TRAIT_SLIME_RABID, "red-extract") slime.visible_message(span_danger("The [slime] is driven into a frenzy!")) return 600 /obj/item/slime_extract/blue name = "blue slime extract" - icon_state = "blue slime extract" + icon_state = "blue_slime_extract" effectmod = "stabilized" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -322,9 +300,10 @@ /obj/item/slime_extract/darkblue name = "dark blue slime extract" - icon_state = "dark blue slime extract" + icon_state = "dark_blue_slime_extract" effectmod = "chilling" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) + tier = 2 /obj/item/slime_extract/darkblue/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -345,9 +324,10 @@ /obj/item/slime_extract/pink name = "pink slime extract" - icon_state = "pink slime extract" + icon_state = "pink_slime_extract" effectmod = "gentle" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) + tier = 4 /obj/item/slime_extract/pink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -373,9 +353,10 @@ /obj/item/slime_extract/green name = "green slime extract" - icon_state = "green slime extract" + icon_state = "green_slime_extract" effectmod = "mutative" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/uranium/radium) + tier = 4 /obj/item/slime_extract/green/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -397,9 +378,10 @@ /obj/item/slime_extract/lightpink name = "light pink slime extract" - icon_state = "light pink slime extract" + icon_state = "light_pink_slime_extract" effectmod = "loyal" activate_reagents = list(/datum/reagent/toxin/plasma) + tier = 5 /obj/item/slime_extract/lightpink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -421,9 +403,10 @@ /obj/item/slime_extract/black name = "black slime extract" - icon_state = "black slime extract" + icon_state = "black_slime_extract" effectmod = "transformative" activate_reagents = list(/datum/reagent/toxin/plasma) + tier = 5 /obj/item/slime_extract/black/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -441,9 +424,10 @@ /obj/item/slime_extract/oil name = "oil slime extract" - icon_state = "oil slime extract" + icon_state = "oil_slime_extract" effectmod = "detonating" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) + tier = 5 /obj/item/slime_extract/oil/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -465,9 +449,10 @@ /obj/item/slime_extract/adamantine name = "adamantine slime extract" - icon_state = "adamantine slime extract" + icon_state = "adamantine_slime_extract" effectmod = "crystalline" activate_reagents = list(/datum/reagent/toxin/plasma) + tier = 5 /obj/item/slime_extract/adamantine/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -494,13 +479,14 @@ /obj/item/slime_extract/bluespace name = "bluespace slime extract" - icon_state = "bluespace slime extract" + icon_state = "bluespace_slime_extract" effectmod = "warping" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) var/teleport_ready = FALSE var/teleport_x = 0 var/teleport_y = 0 var/teleport_z = 0 + tier = 6 /obj/item/slime_extract/bluespace/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -530,9 +516,10 @@ /obj/item/slime_extract/pyrite name = "pyrite slime extract" - icon_state = "pyrite slime extract" + icon_state = "pyrite_slime_extract" effectmod = "prismatic" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) + tier = 3 /obj/item/slime_extract/pyrite/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -557,9 +544,10 @@ /obj/item/slime_extract/cerulean name = "cerulean slime extract" - icon_state = "cerulean slime extract" + icon_state = "cerulean_slime_extract" effectmod = "recurring" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) + tier = 3 /obj/item/slime_extract/cerulean/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -577,9 +565,10 @@ /obj/item/slime_extract/sepia name = "sepia slime extract" - icon_state = "sepia slime extract" + icon_state = "sepia_slime_extract" effectmod = "lengthened" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) + tier = 3 /obj/item/slime_extract/sepia/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -599,9 +588,10 @@ /obj/item/slime_extract/rainbow name = "rainbow slime extract" - icon_state = "rainbow slime extract" + icon_state = "rainbow_slime_extract" effectmod = "hyperchromatic" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,"lesser plasma",/datum/reagent/toxin/slimejelly,"holy water and uranium") //Curse this snowflake reagent list. + tier = 6 /obj/item/slime_extract/rainbow/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -653,21 +643,20 @@ icon = 'icons/obj/medical/chemical.dmi' icon_state = "potsilver" -/obj/item/slimepotion/slime/docility/attack(mob/living/simple_animal/slime/M, mob/user) +/obj/item/slimepotion/slime/docility/attack(mob/living/basic/slime/M, mob/user) if(!isslime(M)) to_chat(user, span_warning("The potion only works on slimes!")) return ..() if(M.stat) to_chat(user, span_warning("The slime is dead!")) return - if(M.rabid) //Stops being rabid, but doesn't become truly docile. + if(HAS_TRAIT(M, TRAIT_SLIME_RABID)) //Stops being rabid, but doesn't become truly docile. to_chat(M, span_warning("You absorb the potion, and your rabid hunger finally settles to a normal desire to feed.")) to_chat(user, span_notice("You feed the slime the potion, calming its rabid rage.")) - M.rabid = FALSE + REMOVE_TRAIT(M, TRAIT_SLIME_RABID, null) qdel(src) return - M.docile = 1 - M.set_nutrition(700) + M.add_trait(/datum/slime_trait/docility) to_chat(M, span_warning("You absorb the potion and feel your intense desire to feed melt away.")) to_chat(user, span_notice("You feed the slime the potion, removing its hunger and calming it.")) var/newname = sanitize_name(tgui_input_text(user, "Would you like to give the slime a name?", "Name your new pet", "Pet Slime", MAX_NAME_LEN)) @@ -703,7 +692,15 @@ balloon_alert(user, "offering...") being_used = TRUE - var/list/candidates = poll_candidates_for_mob("Do you want to play as [dumb_mob.name]?", ROLE_SENTIENCE, ROLE_SENTIENCE, 5 SECONDS, dumb_mob, POLL_IGNORE_SENTIENCE_POTION) // see poll_ignore.dm + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob( + "Do you want to play as [dumb_mob.name]", + role = ROLE_SENTIENCE, + poll_time = 5 SECONDS, + target_mob = dumb_mob, + ignore_category = POLL_IGNORE_SENTIENCE_POTION, + pic_source = dumb_mob, + role_name_text = "sentient mob" + ) if(!LAZYLEN(candidates)) balloon_alert(user, "try again later!") being_used = FALSE @@ -791,22 +788,18 @@ icon = 'icons/obj/medical/chemical.dmi' icon_state = "potred" -/obj/item/slimepotion/slime/steroid/attack(mob/living/simple_animal/slime/M, mob/user) +/obj/item/slimepotion/slime/steroid/attack(mob/living/basic/slime/M, mob/user) if(!isslime(M))//If target is not a slime. to_chat(user, span_warning("The steroid only works on baby slimes!")) return ..() - if(M.is_adult) //Can't steroidify adults - to_chat(user, span_warning("Only baby slimes can use the steroid!")) - return if(M.stat) to_chat(user, span_warning("The slime is dead!")) return - if(M.cores >= 5) - to_chat(user, span_warning("The slime already has the maximum amount of extract!")) + if(M.ooze_production >= 50) + to_chat(user, span_warning("The slime is already producing too much ooze!")) return - - to_chat(user, span_notice("You feed the slime the steroid. It will now produce one more extract.")) - M.cores++ + to_chat(user, span_notice("You feed the slime the steroid. It will now produce more ooze.")) + M.ooze_production++ qdel(src) /obj/item/slimepotion/enhancer @@ -821,7 +814,7 @@ icon = 'icons/obj/medical/chemical.dmi' icon_state = "potcyan" -/obj/item/slimepotion/slime/stabilizer/attack(mob/living/simple_animal/slime/M, mob/user) +/obj/item/slimepotion/slime/stabilizer/attack(mob/living/basic/slime/M, mob/user) if(!isslime(M)) to_chat(user, span_warning("The stabilizer only works on slimes!")) return ..() @@ -842,14 +835,14 @@ icon = 'icons/obj/medical/chemical.dmi' icon_state = "potgreen" -/obj/item/slimepotion/slime/mutator/attack(mob/living/simple_animal/slime/M, mob/user) +/obj/item/slimepotion/slime/mutator/attack(mob/living/basic/slime/M, mob/user) if(!isslime(M)) to_chat(user, span_warning("The mutator only works on slimes!")) return ..() if(M.stat) to_chat(user, span_warning("The slime is dead!")) return - if(M.mutator_used) + if(HAS_TRAIT(M, TRAIT_MUTATOR_USED)) to_chat(user, span_warning("This slime has already consumed a mutator, any more would be far too unstable!")) return if(M.mutation_chance == 100) @@ -858,7 +851,7 @@ to_chat(user, span_notice("You feed the slime the mutator. It is now more likely to mutate.")) M.mutation_chance = clamp(M.mutation_chance+12,0,100) - M.mutator_used = TRUE + ADD_TRAIT(M, TRAIT_MUTATOR_USED, "slime-mutator") qdel(src) /obj/item/slimepotion/speed diff --git a/code/modules/shuttle/battlecruiser_starfury.dm b/code/modules/shuttle/battlecruiser_starfury.dm index ce520aa1fcaa..b9eabc003a84 100644 --- a/code/modules/shuttle/battlecruiser_starfury.dm +++ b/code/modules/shuttle/battlecruiser_starfury.dm @@ -135,7 +135,7 @@ */ /proc/summon_battlecruiser(datum/team/battlecruiser/team) - var/list/candidates = poll_ghost_candidates("Do you wish to be considered for battlecruiser crew?", ROLE_TRAITOR) + var/list/candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for battlecruiser crew?", check_jobban = ROLE_TRAITOR, pic_source = /obj/machinery/sleeper/syndie, role_name_text = "battlecruiser crew") shuffle_inplace(candidates) var/datum/map_template/ship = SSmapping.map_templates["battlecruiser_starfury.dmm"] @@ -163,7 +163,7 @@ for(var/turf/open/spawned_turf as anything in ship.get_affected_turfs(battlecruiser_loading_turf)) //not as anything to filter out closed turfs for(var/obj/effect/mob_spawn/ghost_role/human/syndicate/battlecruiser/spawner in spawned_turf) spawner.antag_team = team - if(candidates.len > 0) + if(length(candidates) > 0) var/mob/our_candidate = candidates[1] spawner.create_from_ghost(our_candidate) spawner.antag_team.players_spawned += (our_candidate.ckey) diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index 9e5f5a32c24b..2a3ec71d926a 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -189,7 +189,7 @@ if(current_user.client) current_user.client.images -= the_eye.placed_images - QDEL_LIST(the_eye.placed_images) + LAZYCLEARLIST(the_eye.placed_images) for(var/image/place_spots as anything in the_eye.placement_images) var/image/newI = image('icons/effects/alphacolors.dmi', the_eye.loc, "blue") @@ -306,8 +306,8 @@ /mob/camera/ai_eye/remote/shuttle_docker visible_icon = FALSE use_static = FALSE - var/list/placement_images = list() - var/list/placed_images = list() + var/list/image/placement_images = list() + var/list/image/placed_images = list() /mob/camera/ai_eye/remote/shuttle_docker/Initialize(mapload, obj/machinery/computer/camera_advanced/origin) src.origin = origin diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 0d968ed817fb..a02524e06447 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -21,26 +21,22 @@ All ShuttleMove procs go here return var/shuttle_dir = shuttle.dir - for(var/i in contents) - var/atom/movable/thing = i - if(ismob(thing)) - if(isliving(thing)) - var/mob/living/M = thing - if(M.buckled) - M.buckled.unbuckle_mob(M, 1) - if(M.pulledby) - M.pulledby.stop_pulling() - M.stop_pulling() - M.visible_message(span_warning("[shuttle] slams into [M]!")) - SSblackbox.record_feedback("tally", "shuttle_gib", 1, M.type) - log_shuttle("[key_name(M)] was shuttle gibbed by [shuttle].") - M.investigate_log("has been gibbed by [shuttle].", INVESTIGATE_DEATHS) - M.gib() - - - else //non-living mobs shouldn't be affected by shuttles, which is why this is an else - if(istype(thing, /obj/effect/abstract) || istype(thing, /obj/singularity) || istype(thing, /obj/energy_ball)) + for(var/atom/movable/thing as anything in contents) + if(thing.resistance_flags & SHUTTLE_CRUSH_PROOF) + continue + if(isliving(thing)) + var/mob/living/living_thing = thing + if(living_thing.incorporeal_move) // Don't crush incorporeal things continue + living_thing.buckled?.unbuckle_mob(living_thing, force = TRUE) + living_thing.pulledby?.stop_pulling() + living_thing.stop_pulling() + living_thing.visible_message(span_warning("[shuttle] slams into [living_thing]!")) + SSblackbox.record_feedback("tally", "shuttle_gib", 1, living_thing.type) + log_shuttle("[key_name(living_thing)] was shuttle gibbed by [shuttle].") + living_thing.investigate_log("has been gibbed by [shuttle].", INVESTIGATE_DEATHS) + living_thing.gib() + else if(!ismob(thing)) if(!thing.anchored) step(thing, shuttle_dir) else diff --git a/code/modules/spells/spell_types/pointed/mind_transfer.dm b/code/modules/spells/spell_types/pointed/mind_transfer.dm index f0e0a9adb2c5..ba97d8b0fabb 100644 --- a/code/modules/spells/spell_types/pointed/mind_transfer.dm +++ b/code/modules/spells/spell_types/pointed/mind_transfer.dm @@ -55,9 +55,19 @@ if(!isliving(cast_on)) to_chat(owner, span_warning("You can only swap minds with living beings!")) return FALSE + + if(HAS_TRAIT(cast_on, TRAIT_MIND_TEMPORARILY_GONE)) + to_chat(owner, span_warning("This creature's mind is somewhere else entirely!")) + return FALSE + + if(HAS_TRAIT(cast_on, TRAIT_NO_MINDSWAP)) + to_chat(owner, span_warning("This type of magic can't operate on [cast_on.p_their()] mind!")) + return FALSE + if(is_type_in_typecache(cast_on, blacklisted_mobs)) to_chat(owner, span_warning("This creature is too [pick("powerful", "strange", "arcane", "obscene")] to control!")) return FALSE + if(isguardian(cast_on)) var/mob/living/basic/guardian/stand = cast_on if(stand.summoner && stand.summoner == owner) diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index f441643ba768..55d42f4993d1 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -323,6 +323,8 @@ var/digitigrade_id /// Used solely by digitigrade limbs to remember what their old limb ID was. var/old_limb_id + /// Used by the bloodysoles component to make footprints + var/footprint_sprite = FOOTPRINT_SPRITE_SHOES biological_state = BIO_STANDARD_JOINTED /obj/item/bodypart/leg/Destroy() @@ -407,6 +409,7 @@ unarmed_damage_low = 2 unarmed_damage_high = 3 unarmed_stun_threshold = 4 + footprint_sprite = FOOTPRINT_SPRITE_PAWS /obj/item/bodypart/leg/left/alien icon = 'icons/mob/species/alien/bodyparts.dmi' @@ -501,6 +504,7 @@ unarmed_damage_low = 2 unarmed_damage_high = 3 unarmed_stun_threshold = 4 + footprint_sprite = FOOTPRINT_SPRITE_PAWS /obj/item/bodypart/leg/right/alien icon = 'icons/mob/species/alien/bodyparts.dmi' diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm index f0d40f495c75..076b4b4d630e 100644 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm @@ -174,10 +174,10 @@ /obj/item/bodypart/chest/robot/get_cell() return cell -/obj/item/bodypart/chest/robot/handle_atom_del(atom/chest_atom) - if(chest_atom == cell) +/obj/item/bodypart/chest/robot/Exited(atom/movable/gone, direction) + . = ..() + if(gone == cell) cell = null - return ..() /obj/item/bodypart/chest/robot/Destroy() QDEL_NULL(cell) @@ -225,8 +225,6 @@ screwtool.play_tool_sound(src) to_chat(user, span_notice("Remove [cell] from [src].")) cell.forceMove(drop_location()) - cell = null - /obj/item/bodypart/chest/robot/examine(mob/user) . = ..() @@ -246,11 +244,8 @@ if(wired) new /obj/item/stack/cable_coil(drop_loc, 1) wired = FALSE - if(cell) - cell.forceMove(drop_loc) - cell = null - ..() - + cell?.forceMove(drop_loc) + return ..() /obj/item/bodypart/head/robot name = "cyborg head" @@ -285,12 +280,12 @@ var/obj/item/assembly/flash/handheld/flash1 = null var/obj/item/assembly/flash/handheld/flash2 = null -/obj/item/bodypart/head/robot/handle_atom_del(atom/head_atom) - if(head_atom == flash1) +/obj/item/bodypart/head/robot/Exited(atom/movable/gone, direction) + . = ..() + if(gone == flash1) flash1 = null - if(head_atom == flash2) + if(gone == flash2) flash2 = null - return ..() /obj/item/bodypart/head/robot/Destroy() QDEL_NULL(flash1) @@ -336,28 +331,17 @@ if(flash1 || flash2) prytool.play_tool_sound(src) to_chat(user, span_notice("You remove the flash from [src].")) - if(flash1) - flash1.forceMove(drop_location()) - flash1 = null - if(flash2) - flash2.forceMove(drop_location()) - flash2 = null + flash1?.forceMove(drop_location()) + flash2?.forceMove(drop_location()) else to_chat(user, span_warning("There is no flash to remove from [src].")) return TRUE - /obj/item/bodypart/head/robot/drop_organs(mob/user, violent_removal) var/atom/drop_loc = drop_location() - if(flash1) - flash1.forceMove(drop_loc) - flash1 = null - if(flash2) - flash2.forceMove(drop_loc) - flash2 = null - ..() - - + flash1?.forceMove(drop_loc) + flash2?.forceMove(drop_loc) + return ..() // Prosthetics - Cheap, mediocre, and worse than organic limbs // The fact they dont have a internal biotype means theyre a lot weaker defensively, diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm index 233afcd9b19b..08622f070176 100644 --- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm @@ -35,9 +35,11 @@ limb_id = SPECIES_LIZARD can_be_digitigrade = TRUE digitigrade_id = "digitigrade" + footprint_sprite = FOOTPRINT_SPRITE_CLAWS /obj/item/bodypart/leg/right/lizard icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD can_be_digitigrade = TRUE digitigrade_id = "digitigrade" + footprint_sprite = FOOTPRINT_SPRITE_CLAWS diff --git a/code/modules/surgery/bodyparts/wounds.dm b/code/modules/surgery/bodyparts/wounds.dm index 16123c1e871a..5558eb4f4d1b 100644 --- a/code/modules/surgery/bodyparts/wounds.dm +++ b/code/modules/surgery/bodyparts/wounds.dm @@ -85,7 +85,7 @@ // quick re-check to see if bare_wound_bonus applies, for the benefit of log_wound(), see about getting the check from check_woundings_mods() somehow if(ishuman(owner)) var/mob/living/carbon/human/human_wearer = owner - var/list/clothing = human_wearer.clothingonpart(src) + var/list/clothing = human_wearer.get_clothing_on_part(src) for(var/obj/item/clothing/clothes_check as anything in clothing) // unlike normal armor checks, we tabluate these piece-by-piece manually so we can also pass on appropriate damage the clothing's limbs if necessary if(clothes_check.get_armor_rating(WOUND)) @@ -242,7 +242,7 @@ if(owner && ishuman(owner)) var/mob/living/carbon/human/human_owner = owner - var/list/clothing = human_owner.clothingonpart(src) + var/list/clothing = human_owner.get_clothing_on_part(src) for(var/obj/item/clothing/clothes as anything in clothing) // unlike normal armor checks, we tabluate these piece-by-piece manually so we can also pass on appropriate damage the clothing's limbs if necessary armor_ablation += clothes.get_armor_rating(WOUND) diff --git a/code/modules/surgery/core_removal.dm b/code/modules/surgery/core_removal.dm deleted file mode 100644 index 4ada9e7b59a3..000000000000 --- a/code/modules/surgery/core_removal.dm +++ /dev/null @@ -1,61 +0,0 @@ -/datum/surgery/core_removal - name = "Core removal" - target_mobtypes = list(/mob/living/simple_animal/slime) - surgery_flags = SURGERY_IGNORE_CLOTHES - possible_locs = list( - BODY_ZONE_R_ARM, - BODY_ZONE_L_ARM, - BODY_ZONE_R_LEG, - BODY_ZONE_L_LEG, - BODY_ZONE_CHEST, - BODY_ZONE_HEAD, - ) - steps = list( - /datum/surgery_step/incise, - /datum/surgery_step/extract_core, - ) - -/datum/surgery/core_removal/can_start(mob/user, mob/living/target) - if(target.stat == DEAD) - return TRUE - return FALSE - -//extract brain -/datum/surgery_step/extract_core - name = "extract core (hemostat/crowbar)" - implements = list( - TOOL_HEMOSTAT = 100, - TOOL_CROWBAR = 100) - time = 16 - -/datum/surgery_step/extract_core/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - display_results( - user, - target, - span_notice("You begin to extract a core from [target]..."), - span_notice("[user] begins to extract a core from [target]."), - span_notice("[user] begins to extract a core from [target]."), - ) - -/datum/surgery_step/extract_core/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) - var/mob/living/simple_animal/slime/target_slime = target - if(target_slime.cores > 0) - target_slime.cores-- - display_results( - user, - target, - span_notice("You successfully extract a core from [target]. [target_slime.cores] core\s remaining."), - span_notice("[user] successfully extracts a core from [target]!"), - span_notice("[user] successfully extracts a core from [target]!"), - ) - - new target_slime.coretype(target_slime.loc) - - if(target_slime.cores <= 0) - target_slime.icon_state = "[target_slime.colour] baby slime dead-nocore" - return ..() - else - return FALSE - else - to_chat(user, span_warning("There aren't any cores left in [target]!")) - return ..() diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index 837b10443f21..ecc968f33836 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -12,8 +12,24 @@ name = "HUD implant" desc = "These cybernetic eyes will display a HUD over everything you see. Maybe." slot = ORGAN_SLOT_HUD + actions_types = list(/datum/action/item_action/toggle_hud) var/HUD_type = 0 var/HUD_trait = null + /// Whether the HUD implant is on or off + var/toggled_on = TRUE + + +/obj/item/organ/internal/cyberimp/eyes/hud/proc/toggle_hud(mob/living/carbon/eye_owner) + if(toggled_on) + if(HUD_type) + var/datum/atom_hud/hud = GLOB.huds[HUD_type] + hud.hide_from(eye_owner) + toggled_on = FALSE + else + if(HUD_type) + var/datum/atom_hud/hud = GLOB.huds[HUD_type] + hud.show_to(eye_owner) + toggled_on = TRUE /obj/item/organ/internal/cyberimp/eyes/hud/Insert(mob/living/carbon/eye_owner, special = FALSE, drop_if_replaced = TRUE) . = ..() @@ -24,6 +40,7 @@ hud.show_to(eye_owner) if(HUD_trait) ADD_TRAIT(eye_owner, HUD_trait, ORGAN_TRAIT) + toggled_on = TRUE /obj/item/organ/internal/cyberimp/eyes/hud/Remove(mob/living/carbon/eye_owner, special = FALSE) . = ..() @@ -32,6 +49,7 @@ hud.hide_from(eye_owner) if(HUD_trait) REMOVE_TRAIT(eye_owner, HUD_trait, ORGAN_TRAIT) + toggled_on = FALSE /obj/item/organ/internal/cyberimp/eyes/hud/medical name = "Medical HUD implant" diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 0ae0cbc962a0..902e32bf4364 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -105,6 +105,7 @@ slot = ORGAN_SLOT_BRAIN_ANTISTUN var/static/list/signalCache = list( + COMSIG_LIVING_STAMINA_STUN, COMSIG_LIVING_STATUS_STUN, COMSIG_LIVING_STATUS_KNOCKDOWN, COMSIG_LIVING_STATUS_IMMOBILIZE, @@ -128,6 +129,7 @@ /obj/item/organ/internal/cyberimp/brain/anti_stun/proc/clear_stuns() if(owner || !(organ_flags & ORGAN_FAILING)) + owner.exit_stamina_stun() owner.SetStun(0) owner.SetKnockdown(0) owner.SetImmobilized(0) diff --git a/code/modules/surgery/organs/external/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm index 0298cecde4cb..ae3fbe349e52 100644 --- a/code/modules/surgery/organs/external/wings/functional_wings.dm +++ b/code/modules/surgery/organs/external/wings/functional_wings.dm @@ -199,3 +199,9 @@ name = "fly wings" desc = "Fly as a fly." sprite_accessory_override = /datum/sprite_accessory/wings/fly + +///slime wings, which relate to slimes. +/obj/item/organ/external/wings/functional/slime + name = "slime wings" + desc = "How does something so squishy even fly?" + sprite_accessory_override = /datum/sprite_accessory/wings/slime diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 8aa349be967c..6e196b52af5e 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -50,26 +50,27 @@ /// Native FOV that will be applied if a config is enabled var/native_fov = FOV_90_DEGREES -/obj/item/organ/internal/eyes/Insert(mob/living/carbon/eye_owner, special = FALSE, drop_if_replaced = FALSE) +/obj/item/organ/internal/eyes/Insert(mob/living/carbon/eye_recipient, special = FALSE, drop_if_replaced = FALSE) . = ..() if(!.) return - owner.cure_blind(NO_EYES) + eye_recipient.cure_blind(NO_EYES) apply_damaged_eye_effects() - refresh() + refresh(eye_recipient, inserting = TRUE) /// Refreshes the visuals of the eyes -/// If call_update is TRUE, we also will call udpate_body -/obj/item/organ/internal/eyes/proc/refresh(call_update = TRUE) +/// If call_update is TRUE, we also will call update_body +/obj/item/organ/internal/eyes/proc/refresh(mob/living/carbon/eye_owner = owner, inserting = FALSE, call_update = TRUE) owner.update_sight() owner.update_tint() - if(!ishuman(owner)) + if(!ishuman(eye_owner)) return - var/mob/living/carbon/human/affected_human = owner - old_eye_color_left = affected_human.eye_color_left - old_eye_color_right = affected_human.eye_color_right + var/mob/living/carbon/human/affected_human = eye_owner + if(inserting) // we only want to be setting old_eye_color the one time + old_eye_color_left = affected_human.eye_color_left + old_eye_color_right = affected_human.eye_color_right if(initial(eye_color_left)) affected_human.eye_color_left = eye_color_left else @@ -81,10 +82,10 @@ if(HAS_TRAIT(affected_human, TRAIT_NIGHT_VISION) && !lighting_cutoff) lighting_cutoff = LIGHTING_CUTOFF_REAL_LOW if(CONFIG_GET(flag/native_fov) && native_fov) - owner.add_fov_trait(type, native_fov) + affected_human.add_fov_trait(type, native_fov) if(call_update) - owner.dna?.species?.handle_body(affected_human) //updates eye icon + affected_human.dna?.species?.handle_body(affected_human) //updates eye icon /obj/item/organ/internal/eyes/Remove(mob/living/carbon/eye_owner, special = FALSE) . = ..() @@ -337,7 +338,6 @@ eye.update_brightness(victim) victim.become_blind(FLASHLIGHT_EYES) - /obj/item/organ/internal/eyes/robotic/flashlight/on_remove(mob/living/carbon/victim) . = ..() eye.on = FALSE @@ -354,7 +354,11 @@ /obj/item/organ/internal/eyes/robotic/shield/emp_act(severity) return -#define RGB2EYECOLORSTRING(definitionvar) ("[copytext_char(definitionvar, 2, 3)][copytext_char(definitionvar, 4, 5)][copytext_char(definitionvar, 6, 7)]") +#define MATCH_LIGHT_COLOR 1 +#define USE_CUSTOM_COLOR 0 +#define UPDATE_LIGHT 0 +#define UPDATE_EYES_LEFT 1 +#define UPDATE_EYES_RIGHT 2 /obj/item/organ/internal/eyes/robotic/glow name = "High Luminosity Eyes" @@ -362,196 +366,291 @@ eye_color_left = "000" eye_color_right = "000" actions_types = list(/datum/action/item_action/organ_action/use, /datum/action/item_action/organ_action/toggle) - var/current_color_string = "#ffffff" - var/active = FALSE var/max_light_beam_distance = 5 - var/light_beam_distance = 5 - var/light_object_range = 2 - var/light_object_power = 2 - var/list/obj/effect/abstract/eye_lighting/eye_lighting - var/obj/effect/abstract/eye_lighting/on_mob - var/image/mob_overlay - var/datum/component/mobhook + var/obj/item/flashlight/eyelight/glow/eye + /// The overlay that is used when both eyes are set to match the light color + var/mutable_appearance/eyes_overlay + /// The overlay that is used when custom color selection is enabled, for the left eye + var/mutable_appearance/eyes_overlay_left + /// The overlay that is used when custom color selection is enabled, for the right eye + var/mutable_appearance/eyes_overlay_right + /// Whether or not to match the eye color to the light or use a custom selection + var/eye_color_mode = MATCH_LIGHT_COLOR + /// The selected color for the light beam itself + var/current_color_string = "#ffffff" + /// The custom selected eye color for the left eye. Defaults to the mob's natural eye color + var/current_left_color_string + /// The custom selected eye color for the right eye. Defaults to the mob's natural eye color + var/current_right_color_string /obj/item/organ/internal/eyes/robotic/glow/Initialize(mapload) . = ..() - mob_overlay = image('icons/mob/species/human/human_face.dmi', "eyes_glow_gs") + eye = new /obj/item/flashlight/eyelight/glow /obj/item/organ/internal/eyes/robotic/glow/Destroy() - terminate_effects() . = ..() + deactivate(close_ui = TRUE) + QDEL_NULL(eye) -/obj/item/organ/internal/eyes/robotic/glow/Remove(mob/living/carbon/eye_owner, special = FALSE) - terminate_effects() +/obj/item/organ/internal/eyes/robotic/glow/emp_act() . = ..() + if(!eye.on || . & EMP_PROTECT_SELF) + return + deactivate(close_ui = TRUE) -/obj/item/organ/internal/eyes/robotic/glow/proc/terminate_effects() - if(owner && active) - deactivate() - active = FALSE - clear_visuals(TRUE) - STOP_PROCESSING(SSfastprocess, src) +/// We have to do this here because on_insert gets called before refresh(), which we need to have been called for old_eye_color vars to be set +/obj/item/organ/internal/eyes/robotic/glow/Insert(mob/living/carbon/eye_recipient, special = FALSE, drop_if_replaced = FALSE) + . = ..() + current_left_color_string = old_eye_color_left + current_right_color_string = old_eye_color_right + +/obj/item/organ/internal/eyes/robotic/glow/on_insert(mob/living/carbon/eye_recipient) + . = ..() + deactivate(close_ui = TRUE) + eye.forceMove(eye_recipient) + +/obj/item/organ/internal/eyes/robotic/glow/on_remove(mob/living/carbon/eye_owner) + deactivate(eye_owner, close_ui = TRUE) + QDEL_NULL(eyes_overlay) + QDEL_NULL(eyes_overlay_left) + QDEL_NULL(eyes_overlay_right) + eye.forceMove(src) + return ..() + +/obj/item/organ/internal/eyes/robotic/glow/ui_state(mob/user) + return GLOB.default_state + +/obj/item/organ/internal/eyes/robotic/glow/ui_status(mob/user) + if(!QDELETED(owner)) + if(owner == user) + return min( + ui_status_user_is_abled(user, src), + ui_status_only_living(user), + ) + else return UI_CLOSE + return ..() + +/obj/item/organ/internal/eyes/robotic/glow/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "HighLuminosityEyesMenu") + ui.autoupdate = FALSE + ui.open() + +/obj/item/organ/internal/eyes/robotic/glow/ui_data(mob/user) + var/list/data = list() + + data["eyeColor"] = list( + mode = eye_color_mode, + hasOwner = owner ? TRUE : FALSE, + left = current_left_color_string, + right = current_right_color_string, + ) + data["lightColor"] = current_color_string + data["range"] = eye.light_outer_range + + return data + +/obj/item/organ/internal/eyes/robotic/glow/ui_act(action, list/params, datum/tgui/ui) + . = ..() + if(.) + return -/obj/item/organ/internal/eyes/robotic/glow/ui_action_click(owner, action) + switch(action) + if("set_range") + var/new_range = params["new_range"] + set_beam_range(new_range) + return TRUE + if("pick_color") + var/new_color = tgui_color_picker( + usr, + "Choose eye color color:", + "High Luminosity Eyes Menu", + current_color_string + ) + if(new_color) + var/to_update = params["to_update"] + set_beam_color(new_color, to_update) + return TRUE + if("enter_color") + var/new_color = lowertext(params["new_color"]) + var/to_update = params["to_update"] + set_beam_color(new_color, to_update, sanitize = TRUE) + return TRUE + if("random_color") + var/to_update = params["to_update"] + randomize_color(to_update) + return TRUE + if("toggle_eye_color") + toggle_eye_color_mode() + return TRUE + +/obj/item/organ/internal/eyes/robotic/glow/ui_action_click(mob/user, action) if(istype(action, /datum/action/item_action/organ_action/toggle)) toggle_active() else if(istype(action, /datum/action/item_action/organ_action/use)) - prompt_for_controls(owner) - + ui_interact(user) + +/** + * Activates the light + * + * Turns on the attached flashlight object, updates the mob overlay to be added. + */ +/obj/item/organ/internal/eyes/robotic/glow/proc/activate() + eye.on = TRUE + if(eye.light_outer_range) // at range 0 we are just going to make the eyes glow emissively, no light overlay + eye.set_light_on(TRUE) + update_mob_eyes_overlay() + +/** + * Deactivates the light + * + * Turns off the attached flashlight object, closes UIs, updates the mob overlay to be removed. + * Arguments: + * * mob/living/carbon/eye_owner - the mob who the eyes belong to, for passing to update_mob_eyes_overlay + * * close_ui - whether or not to close the ui + */ +/obj/item/organ/internal/eyes/robotic/glow/proc/deactivate(mob/living/carbon/eye_owner = owner, close_ui = FALSE) + if(close_ui) + SStgui.close_uis(src) + eye.on = FALSE + eye.set_light_on(FALSE) + update_mob_eyes_overlay(eye_owner) + +/** + * Randomizes the light color + * + * Picks a random color and sets the beam color to that + * Arguments: + * * to_update - whether we are setting the color for the light beam itself, or the individual eyes + */ +/obj/item/organ/internal/eyes/robotic/glow/proc/randomize_color(to_update = UPDATE_LIGHT) + var/new_color = "#" + for(var/i in 1 to 3) + new_color += num2hex(rand(0, 255), 2) + set_beam_color(new_color, to_update) + +/** + * Setter function for the light's range + * + * Sets the light range of the attached flashlight object + * Includes some 'unique' logic to accomodate for some quirks of the lighting system + * Arguments: + * * new_range - the new range to set + */ +/obj/item/organ/internal/eyes/robotic/glow/proc/set_beam_range(new_range) + var/old_light_range = eye.light_outer_range + if(old_light_range == 0 && new_range > 0 && eye.on) // turn bring back the light overlay if we were previously at 0 (aka emissive eyes only) + eye.light_on = FALSE // this is stupid, but this has to be FALSE for set_light_on() to work. + eye.set_light_on(TRUE) + eye.set_light_range(new_outer_range = clamp(new_range, 0, max_light_beam_distance)) + +/** + * Setter function for the light's color + * + * Sets the light color of the attached flashlight object. Sets the eye color vars of this eye organ as well and then updates the mob's eye color. + * Arguments: + * * newcolor - the new color hex string to set + * * to_update - whether we are setting the color for the light beam itself, or the individual eyes + * * sanitize - whether the hex string should be sanitized + */ +/obj/item/organ/internal/eyes/robotic/glow/proc/set_beam_color(newcolor, to_update = UPDATE_LIGHT, sanitize = FALSE) + var/newcolor_string + if(sanitize) + newcolor_string = sanitize_hexcolor(newcolor) + else + newcolor_string = newcolor + switch(to_update) + if(UPDATE_LIGHT) + current_color_string = newcolor_string + eye.set_light_color(newcolor_string) + if(UPDATE_EYES_LEFT) + current_left_color_string = newcolor_string + if(UPDATE_EYES_RIGHT) + current_right_color_string = newcolor_string + + update_mob_eye_color() + +/** + * Toggle the attached flashlight object on or off + */ /obj/item/organ/internal/eyes/robotic/glow/proc/toggle_active() - if(active) + if(eye.on) deactivate() else activate() -/obj/item/organ/internal/eyes/robotic/glow/proc/prompt_for_controls(mob/user) - var/color = input(owner, "Select Color", "Select color", "#ffffff") as color|null - if(!color || QDELETED(src) || QDELETED(user) || QDELETED(owner) || owner != user) +/** + * Toggles for the eye color mode + * + * Toggles the eye color mode on or off and then calls an update on the mob's eye color + */ +/obj/item/organ/internal/eyes/robotic/glow/proc/toggle_eye_color_mode() + eye_color_mode = !eye_color_mode + update_mob_eye_color() + +/** + * Updates the mob eye color + * + * Updates the eye color to reflect on the mob's body if it's possible to do so + * Arguments: + * * mob/living/carbon/eye_owner - the mob to update the eye color appearance of + */ +/obj/item/organ/internal/eyes/robotic/glow/proc/update_mob_eye_color(mob/living/carbon/eye_owner = owner) + switch(eye_color_mode) + if(MATCH_LIGHT_COLOR) + eye_color_left = current_color_string + eye_color_right = current_color_string + if(USE_CUSTOM_COLOR) + eye_color_left = current_left_color_string + eye_color_right = current_right_color_string + + if(QDELETED(eye_owner) || !ishuman(eye_owner)) //Other carbon mobs don't have eye color. return - var/range = input(user, "Enter range (0 - [max_light_beam_distance])", "Range Select", 0) as null|num - var/old_active = active // Get old active because set_distance() -> clear_visuals() will set it to FALSE. - set_distance(clamp(range, 0, max_light_beam_distance)) - assume_rgb(color) - // Reactivate if eyes were already active for real time colour swapping! - if(old_active) - activate(FALSE) - -/obj/item/organ/internal/eyes/robotic/glow/proc/assume_rgb(newcolor) - current_color_string = newcolor - eye_color_left = RGB2EYECOLORSTRING(current_color_string) - eye_color_right = eye_color_left - if(!QDELETED(owner) && ishuman(owner)) //Other carbon mobs don't have eye color. - owner.dna.species.handle_body(owner) - -/obj/item/organ/internal/eyes/robotic/glow/proc/cycle_mob_overlay() - remove_mob_overlay() - mob_overlay.color = current_color_string - add_mob_overlay() - -/obj/item/organ/internal/eyes/robotic/glow/proc/add_mob_overlay() - if(!QDELETED(owner)) - owner.add_overlay(mob_overlay) -/obj/item/organ/internal/eyes/robotic/glow/proc/remove_mob_overlay() - if(!QDELETED(owner)) - owner.cut_overlay(mob_overlay) - -/obj/item/organ/internal/eyes/robotic/glow/emp_act() - . = ..() - if(!active || . & EMP_PROTECT_SELF) + eye_owner.dna.species.handle_body(eye_owner) + update_mob_eyes_overlay() + +/** + * Updates the emissive mob eye overlay + * + * When the light is on, the overlay(s) are added. When it is disabled, they are cut. + * Adds one or two overlays depending on what the eye_color_mode toggle is set to. + * Arguments: + * * mob/living/carbon/eye_owner - the mob to add the overlay to + */ +/obj/item/organ/internal/eyes/robotic/glow/proc/update_mob_eyes_overlay(mob/living/carbon/eye_owner = owner) + if(QDELETED(eye_owner)) return - deactivate(silent = TRUE) - -/obj/item/organ/internal/eyes/robotic/glow/on_insert(mob/living/carbon/eye_owner) - . = ..() - RegisterSignal(eye_owner, COMSIG_ATOM_DIR_CHANGE, PROC_REF(update_visuals)) -/obj/item/organ/internal/eyes/robotic/glow/on_remove(mob/living/carbon/eye_owner) - . = ..() - UnregisterSignal(eye_owner, COMSIG_ATOM_DIR_CHANGE) + if(!ishuman(eye_owner)) + return -/obj/item/organ/internal/eyes/robotic/glow/Destroy() - QDEL_NULL(mobhook) // mobhook is not our component - return ..() + eye_owner.cut_overlay(eyes_overlay) + eye_owner.cut_overlay(eyes_overlay_left) + eye_owner.cut_overlay(eyes_overlay_right) -/obj/item/organ/internal/eyes/robotic/glow/proc/activate(silent = FALSE) - start_visuals() - if(!silent) - to_chat(owner, span_warning("Your [src] clicks and makes a whining noise, before shooting out a beam of light!")) - cycle_mob_overlay() - -/obj/item/organ/internal/eyes/robotic/glow/proc/deactivate(silent = FALSE) - clear_visuals() - if(!silent) - to_chat(owner, span_warning("Your [src] shuts off!")) - remove_mob_overlay() - -/obj/item/organ/internal/eyes/robotic/glow/proc/update_visuals(datum/source, olddir, newdir) - SIGNAL_HANDLER - if(!active) - return // Don't update if we're not active! - if((LAZYLEN(eye_lighting) < light_beam_distance) || !on_mob) - regenerate_light_effects() - var/turf/scanfrom = get_turf(owner) - var/scandir = owner.dir - if (newdir && scandir != newdir) // COMSIG_ATOM_DIR_CHANGE happens before the dir change, but with a reference to the new direction. - scandir = newdir - if(!istype(scanfrom)) - clear_visuals() - var/turf/scanning = scanfrom - var/stop = FALSE - on_mob.set_light_flags(on_mob.light_flags & ~LIGHT_ATTACHED) - on_mob.forceMove(scanning) - for(var/i in 1 to light_beam_distance) - scanning = get_step(scanning, scandir) - if(IS_OPAQUE_TURF(scanning)) - stop = TRUE - var/obj/effect/abstract/eye_lighting/lighting = LAZYACCESS(eye_lighting, i) - if(stop) - lighting.forceMove(src) - else - lighting.forceMove(scanning) - -/obj/item/organ/internal/eyes/robotic/glow/proc/clear_visuals(delete_everything = FALSE) - if(delete_everything) - QDEL_LIST(eye_lighting) - QDEL_NULL(on_mob) - else - for(var/obj/effect/abstract/eye_lighting/lighting as anything in eye_lighting) - lighting.forceMove(src) - if(!QDELETED(on_mob)) - on_mob.set_light_flags(on_mob.light_flags | LIGHT_ATTACHED) - on_mob.forceMove(src) - active = FALSE - -/obj/item/organ/internal/eyes/robotic/glow/proc/start_visuals() - if(!islist(eye_lighting)) - eye_lighting = list() - regenerate_light_effects() - if((eye_lighting.len < light_beam_distance) || !on_mob) - regenerate_light_effects() - sync_light_effects() - active = TRUE - update_visuals() - -/obj/item/organ/internal/eyes/robotic/glow/proc/set_distance(dist) - light_beam_distance = dist - regenerate_light_effects() - -/obj/item/organ/internal/eyes/robotic/glow/proc/regenerate_light_effects() - clear_visuals(TRUE) - on_mob = new (src, light_object_range, light_object_power, current_color_string, LIGHT_ATTACHED) - for(var/i in 1 to light_beam_distance) - LAZYADD(eye_lighting, new /obj/effect/abstract/eye_lighting(src, light_object_range, light_object_power, current_color_string)) - sync_light_effects() - - -/obj/item/organ/internal/eyes/robotic/glow/proc/sync_light_effects() - for(var/obj/effect/abstract/eye_lighting/eye_lighting as anything in eye_lighting) - eye_lighting.set_light_color(current_color_string) - on_mob?.set_light_color(current_color_string) - - -/obj/effect/abstract/eye_lighting - light_system = MOVABLE_LIGHT - var/obj/item/organ/internal/eyes/robotic/glow/parent - - -/obj/effect/abstract/eye_lighting/Initialize(mapload, light_object_range, light_object_power, current_color_string, light_flags) - . = ..() - parent = loc - if(!istype(parent)) - stack_trace("/obj/effect/abstract/eye_lighting added to improper parent ([loc]). Deleting.") - return INITIALIZE_HINT_QDEL - if(!isnull(light_object_range)) - set_light_range(light_object_range) - if(!isnull(light_object_power)) - set_light_power(light_object_power) - if(!isnull(current_color_string)) - set_light_color(current_color_string) - if(!isnull(light_flags)) - set_light_flags(light_flags) + if(!eye.on) + return + switch(eye_color_mode) + if(MATCH_LIGHT_COLOR) + eyes_overlay = emissive_appearance('icons/mob/species/human/human_face.dmi', "eyes_glow_gs", eye_owner, layer = -BODY_LAYER, alpha = owner.alpha) + eyes_overlay.color = current_color_string + eye_owner.add_overlay(eyes_overlay) + if(USE_CUSTOM_COLOR) + eyes_overlay_left = emissive_appearance('icons/mob/species/human/human_face.dmi', "eyes_glow_gs_left", eye_owner, layer = -BODY_LAYER, alpha = owner.alpha) + eyes_overlay_right = emissive_appearance('icons/mob/species/human/human_face.dmi', "eyes_glow_gs_right", eye_owner, layer = -BODY_LAYER, alpha = owner.alpha) + eyes_overlay_left.color = eye_color_left + eyes_overlay_right.color = eye_color_right + eye_owner.add_overlay(eyes_overlay_left) + eye_owner.add_overlay(eyes_overlay_right) + +#undef MATCH_LIGHT_COLOR +#undef USE_CUSTOM_COLOR +#undef UPDATE_LIGHT +#undef UPDATE_EYES_LEFT +#undef UPDATE_EYES_RIGHT /obj/item/organ/internal/eyes/moth name = "moth eyes" @@ -619,5 +718,3 @@ adapt_light.forceMove(src) REMOVE_TRAIT(unadapted, TRAIT_UNNATURAL_RED_GLOWY_EYES, ORGAN_TRAIT) return ..() - -#undef RGB2EYECOLORSTRING diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 59c407c7590b..a9dc0513ff78 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -756,31 +756,85 @@ if(!HAS_TRAIT(breather, TRAIT_RESISTCOLD)) // COLD DAMAGE var/cold_modifier = breather.dna.species.coldmod + var/breath_effect_prob = 0 if(breath_temperature < cold_level_3_threshold) - breather.apply_damage(cold_level_3_damage*cold_modifier, cold_damage_type, spread_damage = TRUE) + breather.apply_damage(cold_level_3_damage * cold_modifier, cold_damage_type, spread_damage = TRUE) + breath_effect_prob = 100 if(breath_temperature > cold_level_3_threshold && breath_temperature < cold_level_2_threshold) - breather.apply_damage(cold_level_2_damage*cold_modifier, cold_damage_type, spread_damage = TRUE) + breather.apply_damage(cold_level_2_damage * cold_modifier, cold_damage_type, spread_damage = TRUE) + breath_effect_prob = 50 if(breath_temperature > cold_level_2_threshold && breath_temperature < cold_level_1_threshold) - breather.apply_damage(cold_level_1_damage*cold_modifier, cold_damage_type, spread_damage = TRUE) + breather.apply_damage(cold_level_1_damage * cold_modifier, cold_damage_type, spread_damage = TRUE) + breath_effect_prob = 25 if(breath_temperature < cold_level_1_threshold) - if(prob(20)) + if(prob(sqrt(breath_effect_prob) * 4)) to_chat(breather, span_warning("You feel [cold_message] in your [name]!")) + if(prob(50)) + breather.emote("shiver") + if(prob(breath_effect_prob)) + // Breathing into your mask, no particle. We can add fogged up glasses later + if(breather.is_mouth_covered()) + return + // Even though breathing via internals TECHNICALLY exhales into the environment, we'll still block it + if(breather.internal || breather.external) + return + emit_breath_particle(breather, /particles/fog/breath) if(!HAS_TRAIT(breather, TRAIT_RESISTHEAT)) // HEAT DAMAGE var/heat_modifier = breather.dna.species.heatmod + var/heat_message_prob = 0 if(breath_temperature > heat_level_1_threshold && breath_temperature < heat_level_2_threshold) - breather.apply_damage(heat_level_1_damage*heat_modifier, heat_damage_type, spread_damage = TRUE) + breather.apply_damage(heat_level_1_damage * heat_modifier, heat_damage_type, spread_damage = TRUE) + heat_message_prob = 100 if(breath_temperature > heat_level_2_threshold && breath_temperature < heat_level_3_threshold) - breather.apply_damage(heat_level_2_damage*heat_modifier, heat_damage_type, spread_damage = TRUE) + breather.apply_damage(heat_level_2_damage * heat_modifier, heat_damage_type, spread_damage = TRUE) + heat_message_prob = 50 if(breath_temperature > heat_level_3_threshold) - breather.apply_damage(heat_level_3_damage*heat_modifier, heat_damage_type, spread_damage = TRUE) + breather.apply_damage(heat_level_3_damage * heat_modifier, heat_damage_type, spread_damage = TRUE) + heat_message_prob = 25 if(breath_temperature > heat_level_1_threshold) - if(prob(20)) + if(prob(sqrt(heat_message_prob) * 4)) to_chat(breather, span_warning("You feel [hot_message] in your [name]!")) // The air you breathe out should match your body temperature breath.temperature = breather.bodytemperature +/// Creates a particle effect off the mouth of the passed mob. +/obj/item/organ/internal/lungs/proc/emit_breath_particle(mob/living/carbon/human/breather, particle_type) + ASSERT(ispath(particle_type, /particles)) + + var/obj/effect/abstract/particle_holder/holder = new(breather, particle_type) + var/particles/breath_particle = holder.particles + var/breath_dir = breather.dir + + var/list/particle_grav = list(0, 0.1, 0) + var/list/particle_pos = list(0, breather.get_mob_height() + 2, 0) + if(breath_dir & NORTH) + particle_grav[2] = 0.2 + breath_particle.rotation = pick(-45, 45) + // Layer it behind the mob since we're facing away from the camera + holder.pixel_w -= 4 + holder.pixel_y += 4 + if(breath_dir & WEST) + particle_grav[1] = -0.2 + particle_pos[1] = -5 + breath_particle.rotation = -45 + if(breath_dir & EAST) + particle_grav[1] = 0.2 + particle_pos[1] = 5 + breath_particle.rotation = 45 + if(breath_dir & SOUTH) + particle_grav[2] = 0.2 + breath_particle.rotation = pick(-45, 45) + // Shouldn't be necessary but just for parity + holder.pixel_w += 4 + holder.pixel_y -= 4 + + breath_particle.gravity = particle_grav + breath_particle.position = particle_pos + + QDEL_IN(holder, breath_particle.lifespan) + /obj/item/organ/internal/lungs/on_life(seconds_per_tick, times_fired) . = ..() if(failed && !(organ_flags & ORGAN_FAILING)) diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index 78ba1d9dd937..a529d67b8279 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -20,9 +20,10 @@ if(!iscarbon(target)) return FALSE var/mob/living/carbon/carbon_target = target - if(!isoozeling(target)) - if(!carbon_target.get_bodypart(user.zone_selected)) //can only start if limb is missing - return TRUE + // you can only start the surgery if the limb is missing. + // for oozelings, this surgery is only available on the head. + if((!isoozeling(target) || user.zone_selected == BODY_ZONE_HEAD) && !carbon_target.get_bodypart(user.zone_selected)) + return TRUE return FALSE diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 055c4e509f66..b815ceca40f4 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -56,6 +56,7 @@ attack_verb_simple = list("burn") tool_behaviour = TOOL_CAUTERY toolspeed = 1 + heat = 500 /obj/item/cautery/ignition_effect(atom/ignitable_atom, mob/user) . = span_notice("[user] touches the end of [src] to \the [ignitable_atom], igniting it with a puff of smoke.") diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm index 8be96f27404a..15622228e91f 100644 --- a/code/modules/tgs/core/core.dm +++ b/code/modules/tgs/core/core.dm @@ -166,3 +166,11 @@ var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) if(api) return api.Visibility() + +/world/TgsTriggerEvent(event_name, list/parameters, wait_for_completion = FALSE) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + if(!istype(parameters, /list)) + parameters = list() + + return api.TriggerEvent(event_name, parameters, wait_for_completion) diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm index 07ce3b684584..898516f12486 100644 --- a/code/modules/tgs/core/datum.dm +++ b/code/modules/tgs/core/datum.dm @@ -17,7 +17,7 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) world.sleep_offline = FALSE // https://www.byond.com/forum/post/2894866 del(world) world.sleep_offline = FALSE // just in case, this is BYOND after all... - sleep(1) + sleep(world.tick_lag) TGS_DEBUG_LOG("BYOND DIDN'T TERMINATE THE WORLD!!! TICK IS: [world.time], sleep_offline: [world.sleep_offline]") /datum/tgs_api/latest @@ -69,3 +69,6 @@ TGS_PROTECT_DATUM(/datum/tgs_api) /datum/tgs_api/proc/Visibility() return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/TriggerEvent(event_name, list/parameters, wait_for_completion) + return FALSE diff --git a/code/modules/tgs/v3210/api.dm b/code/modules/tgs/v3210/api.dm index aeea43faa6d8..666201a32256 100644 --- a/code/modules/tgs/v3210/api.dm +++ b/code/modules/tgs/v3210/api.dm @@ -99,9 +99,11 @@ if(skip_compat_check && !fexists(SERVICE_INTERFACE_DLL)) TGS_ERROR_LOG("Service parameter present but no interface DLL detected. This is symptomatic of running a service less than version 3.1! Please upgrade.") return - - call_ext(SERVICE_INTERFACE_DLL, SERVICE_INTERFACE_FUNCTION)(instance_name, command) //trust no retvalVICE_INTERFACE_DLL, SERVICE_INTERFACE_FUNCTION)(instance_name, command) //trust no retval - + #if DM_VERSION >= 515 + call_ext(SERVICE_INTERFACE_DLL, SERVICE_INTERFACE_FUNCTION)(instance_name, command) //trust no retval + #else + call(SERVICE_INTERFACE_DLL, SERVICE_INTERFACE_FUNCTION)(instance_name, command) //trust no retval + #endif return TRUE /datum/tgs_api/v3210/OnTopic(T) diff --git a/code/modules/tgs/v4/api.dm b/code/modules/tgs/v4/api.dm index 945e2e411767..7c87922750b9 100644 --- a/code/modules/tgs/v4/api.dm +++ b/code/modules/tgs/v4/api.dm @@ -181,7 +181,7 @@ var/json = json_encode(data) while(requesting_new_port && !override_requesting_new_port) - sleep(1) + sleep(world.tick_lag) //we need some port open at this point to facilitate return communication if(!world.port) @@ -209,7 +209,7 @@ requesting_new_port = FALSE while(export_lock) - sleep(1) + sleep(world.tick_lag) export_lock = TRUE last_interop_response = null @@ -217,7 +217,7 @@ text2file(json, server_commands_json_path) for(var/I = 0; I < EXPORT_TIMEOUT_DS && !last_interop_response; ++I) - sleep(1) + sleep(world.tick_lag) if(!last_interop_response) TGS_ERROR_LOG("Failed to get export result for: [json]") diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm index 616263098fd3..f4806f7adb97 100644 --- a/code/modules/tgs/v5/__interop_version.dm +++ b/code/modules/tgs/v5/__interop_version.dm @@ -1 +1 @@ -"5.8.0" +"5.9.0" diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm index 1c7d67d20cdf..92c7a8388a71 100644 --- a/code/modules/tgs/v5/_defines.dm +++ b/code/modules/tgs/v5/_defines.dm @@ -14,6 +14,7 @@ #define DMAPI5_BRIDGE_COMMAND_KILL 4 #define DMAPI5_BRIDGE_COMMAND_CHAT_SEND 5 #define DMAPI5_BRIDGE_COMMAND_CHUNK 6 +#define DMAPI5_BRIDGE_COMMAND_EVENT 7 #define DMAPI5_PARAMETER_ACCESS_IDENTIFIER "accessIdentifier" #define DMAPI5_PARAMETER_CUSTOM_COMMANDS "customCommands" @@ -34,6 +35,7 @@ #define DMAPI5_BRIDGE_PARAMETER_VERSION "version" #define DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE "chatMessage" #define DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL "minimumSecurityLevel" +#define DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION "eventInvocation" #define DMAPI5_BRIDGE_RESPONSE_NEW_PORT "newPort" #define DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION "runtimeInformation" @@ -81,6 +83,7 @@ #define DMAPI5_TOPIC_COMMAND_SEND_CHUNK 9 #define DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK 10 #define DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST 11 +#define DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT 12 #define DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE "commandType" #define DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND "chatCommand" @@ -116,3 +119,9 @@ #define DMAPI5_CUSTOM_CHAT_COMMAND_NAME "name" #define DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT "helpText" #define DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY "adminOnly" + +#define DMAPI5_EVENT_ID "eventId" + +#define DMAPI5_EVENT_INVOCATION_NAME "eventName" +#define DMAPI5_EVENT_INVOCATION_PARAMETERS "parameters" +#define DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION "notifyCompletion" diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index a5c064a8eaf1..95b8edd3ee5c 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -27,6 +27,8 @@ var/chunked_requests = 0 var/list/chunked_topics = list() + var/list/pending_events = list() + var/detached = FALSE /datum/tgs_api/v5/New() @@ -46,6 +48,10 @@ var/datum/tgs_version/api_version = ApiVersion() version = null // we want this to be the TGS version, not the interop version + + // sleep once to prevent an issue where world.Export on the first tick can hang indefinitely + sleep(world.tick_lag) + var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands(), DMAPI5_PARAMETER_TOPIC_PORT = GetTopicPort())) if(!istype(bridge_response)) TGS_ERROR_LOG("Failed initial bridge request!") @@ -125,7 +131,7 @@ TGS_DEBUG_LOG("RequireInitialBridgeResponse: Starting sleep") logged = TRUE - sleep(1) + sleep(world.tick_lag) TGS_DEBUG_LOG("RequireInitialBridgeResponse: Passed") @@ -249,6 +255,40 @@ WaitForReattach(TRUE) return chat_channels.Copy() +/datum/tgs_api/v5/TriggerEvent(event_name, list/parameters, wait_for_completion) + RequireInitialBridgeResponse() + WaitForReattach(TRUE) + + if(interop_version.minor < 9) + TGS_WARNING_LOG("Interop version too low for custom events!") + return FALSE + + var/str_parameters = list() + for(var/i in parameters) + str_parameters += "[i]" + + var/list/response = Bridge(DMAPI5_BRIDGE_COMMAND_EVENT, list(DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION = list(DMAPI5_EVENT_INVOCATION_NAME = event_name, DMAPI5_EVENT_INVOCATION_PARAMETERS = str_parameters, DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION = wait_for_completion))) + if(!response) + return FALSE + + var/event_id = response[DMAPI5_EVENT_ID] + if(!event_id) + return FALSE + + TGS_DEBUG_LOG("Created event ID: [event_id]") + if(!wait_for_completion) + return TRUE + + TGS_DEBUG_LOG("Waiting for completion of event ID: [event_id]") + + while(!pending_events[event_id]) + sleep(world.tick_lag) + + TGS_DEBUG_LOG("Completed wait on event ID: [event_id]") + pending_events -= event_id + + return TRUE + /datum/tgs_api/v5/proc/DecodeChannels(chat_update_json) TGS_DEBUG_LOG("DecodeChannels()") var/list/chat_channels_json = chat_update_json[DMAPI5_CHAT_UPDATE_CHANNELS] diff --git a/code/modules/tgs/v5/bridge.dm b/code/modules/tgs/v5/bridge.dm index a0ab35987670..0c5e701a32b6 100644 --- a/code/modules/tgs/v5/bridge.dm +++ b/code/modules/tgs/v5/bridge.dm @@ -65,7 +65,7 @@ if(detached) // Wait up to one minute for(var/i in 1 to 600) - sleep(1) + sleep(world.tick_lag) if(!detached && (!require_channels || length(chat_channels))) break @@ -77,8 +77,11 @@ /datum/tgs_api/v5/proc/PerformBridgeRequest(bridge_request) WaitForReattach(FALSE) + TGS_DEBUG_LOG("Bridge request start") // This is an infinite sleep until we get a response var/export_response = world.Export(bridge_request) + TGS_DEBUG_LOG("Bridge request complete") + if(!export_response) TGS_ERROR_LOG("Failed bridge request: [bridge_request]") return @@ -88,7 +91,7 @@ TGS_ERROR_LOG("Failed bridge request, missing content!") return - var/response_json = file2text(content) + var/response_json = TGS_FILE2TEXT_NATIVE(content) if(!response_json) TGS_ERROR_LOG("Failed bridge request, failed to load content!") return diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm index 05e6c4e1b214..e1f2cb638578 100644 --- a/code/modules/tgs/v5/topic.dm +++ b/code/modules/tgs/v5/topic.dm @@ -176,6 +176,10 @@ var/list/reattach_response = TopicResponse(error_message) reattach_response[DMAPI5_PARAMETER_CUSTOM_COMMANDS] = ListCustomCommands() reattach_response[DMAPI5_PARAMETER_TOPIC_PORT] = GetTopicPort() + + for(var/eventId in pending_events) + pending_events[eventId] = TRUE + return reattach_response if(DMAPI5_TOPIC_COMMAND_SEND_CHUNK) @@ -276,6 +280,15 @@ TGS_WORLD_ANNOUNCE(message) return TopicResponse() + if(DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT) + var/event_id = topic_parameters[DMAPI5_EVENT_ID] + if (!istext(event_id)) + return TopicResponse("Invalid or missing [DMAPI5_EVENT_ID]") + + TGS_DEBUG_LOG("Completing event ID [event_id]...") + pending_events[event_id] = TRUE + return TopicResponse() + return TopicResponse("Unknown command: [command]") /datum/tgs_api/v5/proc/WorldBroadcast(message) diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm index d531d4b7b9dd..237207fdfd05 100644 --- a/code/modules/tgs/v5/undefs.dm +++ b/code/modules/tgs/v5/undefs.dm @@ -14,6 +14,7 @@ #undef DMAPI5_BRIDGE_COMMAND_KILL #undef DMAPI5_BRIDGE_COMMAND_CHAT_SEND #undef DMAPI5_BRIDGE_COMMAND_CHUNK +#undef DMAPI5_BRIDGE_COMMAND_EVENT #undef DMAPI5_PARAMETER_ACCESS_IDENTIFIER #undef DMAPI5_PARAMETER_CUSTOM_COMMANDS @@ -34,6 +35,7 @@ #undef DMAPI5_BRIDGE_PARAMETER_VERSION #undef DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE #undef DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL +#undef DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION #undef DMAPI5_BRIDGE_RESPONSE_NEW_PORT #undef DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION @@ -81,6 +83,7 @@ #undef DMAPI5_TOPIC_COMMAND_SEND_CHUNK #undef DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK #undef DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST +#undef DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT #undef DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE #undef DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND @@ -116,3 +119,9 @@ #undef DMAPI5_CUSTOM_CHAT_COMMAND_NAME #undef DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT #undef DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY + +#undef DMAPI5_EVENT_ID + +#undef DMAPI5_EVENT_INVOCATION_NAME +#undef DMAPI5_EVENT_INVOCATION_PARAMETERS +#undef DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION diff --git a/code/modules/tgui_input/color.dm b/code/modules/tgui_input/color.dm new file mode 100644 index 000000000000..2c37ad03086e --- /dev/null +++ b/code/modules/tgui_input/color.dm @@ -0,0 +1,123 @@ +/** + * Creates a TGUI color picker window and returns the user's response. + * + * This proc should be used to create a color picker that the caller will wait for a response from. + * Arguments: + * * user - The user to show the picker to. + * * title - The of the picker modal, shown on the top of the TGUI window. + * * timeout - The timeout of the picker, after which the modal will close and qdel itself. Set to zero for no timeout. + * * autofocus - The bool that controls if this picker should grab window focus. + */ +/proc/tgui_color_picker(mob/user, message, title, default = "#000000", timeout = 0, autofocus = TRUE) + if (!user) + user = usr + if (!istype(user)) + if (istype(user, /client)) + var/client/client = user + user = client.mob + else + return + // Client does NOT have tgui_input on: Returns regular input + if(!user.client.prefs.read_preference(/datum/preference/toggle/tgui_input)) + return input(user, message, title, default) as color|null + var/datum/tgui_color_picker/picker = new(user, message, title, default, timeout, autofocus) + picker.ui_interact(user) + picker.wait() + if (picker) + . = picker.choice + qdel(picker) + +/** + * # tgui_color_picker + * + * Datum used for instantiating and using a TGUI-controlled color picker. + */ +/datum/tgui_color_picker + /// The title of the TGUI window + var/title + /// The message to show the user + var/message + /// The default choice, used if there is an existing value + var/default + /// The color the user selected, null if no selection has been made + var/choice + /// The time at which the tgui_color_picker was created, for displaying timeout progress. + var/start_time + /// The lifespan of the tgui_color_picker, 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_color_picker was closed by the user. + var/closed + +/datum/tgui_color_picker/New(mob/user, message, title, default, timeout, autofocus) + src.autofocus = autofocus + src.title = title + src.default = default + src.message = message + if (timeout) + src.timeout = timeout + start_time = world.time + QDEL_IN(src, timeout) + +/datum/tgui_color_picker/Destroy(force, ...) + SStgui.close_uis(src) + . = ..() + +/** + * Waits for a user's response to the tgui_color_picker's prompt before returning. Returns early if + * the window was closed by the user. + */ +/datum/tgui_color_picker/proc/wait() + while (!choice && !closed && !QDELETED(src)) + stoplag(1) + +/datum/tgui_color_picker/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ColorPickerModal") + ui.open() + ui.set_autoupdate(timeout > 0) + +/datum/tgui_color_picker/ui_close(mob/user) + . = ..() + closed = TRUE + +/datum/tgui_color_picker/ui_state(mob/user) + return GLOB.always_state + +/datum/tgui_color_picker/ui_static_data(mob/user) + . = list() + .["autofocus"] = autofocus + .["large_buttons"] = !user.client?.prefs || user.client.prefs.read_preference(/datum/preference/toggle/tgui_input_large) + .["swapped_buttons"] = !user.client?.prefs || user.client.prefs.read_preference(/datum/preference/toggle/tgui_input_swapped) + .["title"] = title + .["default_color"] = default + .["message"] = message + +/datum/tgui_color_picker/ui_data(mob/user) + . = list() + if(timeout) + .["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) + +/datum/tgui_color_picker/ui_act(action, list/params) + . = ..() + if (.) + return + switch(action) + if("submit") + var/raw_data = lowertext(params["entry"]) + var/hex = sanitize_hexcolor(raw_data, desired_format = 6, include_crunch = TRUE) + if (!hex) + return + set_choice(hex) + closed = TRUE + SStgui.close_uis(src) + return TRUE + if("cancel") + closed = TRUE + SStgui.close_uis(src) + return TRUE + +/datum/tgui_color_picker/proc/set_choice(choice) + src.choice = choice diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 652e1e530054..e8bda6fd8e89 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -74,11 +74,13 @@ /// A trait source when adding traits through unit tests #define TRAIT_SOURCE_UNIT_TESTS "unit_tests" +// BEGIN_INCLUDE #include "ablative_hud.dm" #include "achievements.dm" #include "anchored_mobs.dm" #include "anonymous_themes.dm" #include "antag_moodlets.dm" +#include "antag_special_roles.dm" #include "area_contents.dm" #include "armor_verification.dm" #include "autowiki.dm" @@ -123,6 +125,7 @@ #include "hallucination_icons.dm" #include "heretic_knowledge.dm" #include "heretic_rituals.dm" +#include "high_five.dm" #include "holidays.dm" #include "human_through_recycler.dm" #include "hunger_curse.dm" @@ -135,8 +138,8 @@ #include "leash.dm" #include "lesserform.dm" #include "limbsanity.dm" -#include "lungs.dm" #include "load_map_security.dm" +#include "lungs.dm" #include "machine_disassembly.dm" #include "mapload_space_verification.dm" #include "mapping.dm" @@ -158,7 +161,6 @@ #include "objectives.dm" #include "operating_table.dm" #include "orderable_items.dm" -#include "organs.dm" #include "organ_set_bonus.dm" #include "paintings.dm" #include "pills.dm" @@ -185,11 +187,10 @@ #include "screenshot_humanoids.dm" #include "screenshot_husk.dm" #include "screenshot_saturnx.dm" -#include "security_officer_distribution.dm" #include "security_levels.dm" +#include "security_officer_distribution.dm" #include "serving_tray.dm" #include "siunit.dm" -#include "slime_mood.dm" #include "slips.dm" #include "spawn_humans.dm" #include "spawn_mobs.dm" @@ -223,6 +224,7 @@ #include "verify_emoji_names.dm" #include "wizard_loadout.dm" #include "worn_icons.dm" +// END_INCLUDE #ifdef REFERENCE_TRACKING_DEBUG //Don't try and parse this file if ref tracking isn't turned on. IE: don't parse ref tracking please mr linter #include "find_reference_sanity.dm" #endif diff --git a/code/modules/unit_tests/antag_special_roles.dm b/code/modules/unit_tests/antag_special_roles.dm new file mode 100644 index 000000000000..7f2b1b2d5fc5 --- /dev/null +++ b/code/modules/unit_tests/antag_special_roles.dm @@ -0,0 +1,13 @@ +/// Verifies that all antag special roles are in GLOB.special_roles +/datum/unit_test/antag_special_roles + +/datum/unit_test/antag_special_roles/Run() + for(var/datum/antagonist/antag as anything in subtypesof(/datum/antagonist)) + // Ignore antags that don't have preview outfits, as they likely aren't preferences. + if(!ispath(antag::preview_outfit)) + continue + // For obvious reasons, skip over unset roles. + var/role = antag::job_rank + if(!istext(role)) + continue + TEST_ASSERT(!isnull(GLOB.special_roles[role]), "Antagonist role [role] (used by [antag]) was not present in GLOB.special_roles!") diff --git a/code/modules/unit_tests/high_five.dm b/code/modules/unit_tests/high_five.dm new file mode 100644 index 000000000000..b5ff4f08cab0 --- /dev/null +++ b/code/modules/unit_tests/high_five.dm @@ -0,0 +1,57 @@ +// Test a high five through and through, with multiple people nearby +/datum/unit_test/high_five + +/datum/unit_test/high_five/Run() + var/mob/living/carbon/human/offer_guy = allocate(/mob/living/carbon/human/consistent) + var/mob/living/carbon/human/take_guy = allocate(/mob/living/carbon/human/consistent) + var/mob/living/carbon/human/random_bystander = allocate(/mob/living/carbon/human/consistent) // this guy's just here for another valid taker + + offer_guy.emote("slap") + offer_guy.give() + + TEST_ASSERT_NOTNULL(offer_guy.has_status_effect(/datum/status_effect/offering/no_item_received/high_five), \ + "Offerer doesn't have the high five offer status effect after offering (giving) to takers nearby") + + var/atom/movable/screen/alert/give/highfive/alert_to_click = locate() in flatten_list(take_guy.alerts) + var/atom/movable/screen/alert/give/highfive/bystander_alert_we_dont_click = locate() in flatten_list(random_bystander.alerts) + TEST_ASSERT_NOTNULL(alert_to_click, "Taker had no alert to click to accept the high five offer") + TEST_ASSERT_NOTNULL(bystander_alert_we_dont_click, "Bystander had no alert from the high fiver offer") + + alert_to_click.handle_transfer() // high five happens here with the taker only. Can't call click but this is close + + TEST_ASSERT_NULL(offer_guy.has_status_effect(/datum/status_effect/offering/no_item_received/high_five), \ + "Offerer still has the high five offer status effect after a high five was completed") + TEST_ASSERT(QDELETED(bystander_alert_we_dont_click), \ + "Bystander still has the alert from the high fiver offer after the high five was completed") + +// Test a too slow setup +/datum/unit_test/high_five_too_slow + +/datum/unit_test/high_five_too_slow/Run() + var/mob/living/carbon/human/offer_guy = allocate(/mob/living/carbon/human/consistent) + var/mob/living/carbon/human/take_guy = allocate(/mob/living/carbon/human/consistent) + + // Just testing a too slow setup - so long as the setup works, we're good. + offer_guy.emote("slap") + offer_guy.give() + offer_guy.dropItemToGround(offer_guy.get_active_held_item()) + TEST_ASSERT_NOTNULL(offer_guy.has_status_effect(/datum/status_effect/offering/no_item_received/high_five), \ + "Offerer lost the high five offer status effect from dropping the slapper, even though this is valid, as it is used to too-slow") + +/// Tests someone offering a high five correctly stops offering when all takers walks away +/datum/unit_test/high_five_walk_away + +/datum/unit_test/high_five_walk_away/Run() + var/mob/living/carbon/human/offer_guy = allocate(/mob/living/carbon/human/consistent) + var/mob/living/carbon/human/take_guy_A = allocate(/mob/living/carbon/human/consistent) + var/mob/living/carbon/human/take_guy_B = allocate(/mob/living/carbon/human/consistent) + + offer_guy.emote("slap") + offer_guy.give() + take_guy_A.forceMove(run_loc_floor_top_right) + TEST_ASSERT_NOTNULL(offer_guy.has_status_effect(/datum/status_effect/offering/no_item_received/high_five), \ + "Offerer lost the high fiver offer status effect from taker A moving away, which is invalid because taker B is still nearby") + + take_guy_B.forceMove(run_loc_floor_top_right) + TEST_ASSERT_NULL(offer_guy.has_status_effect(/datum/status_effect/offering/no_item_received/high_five), \ + "Offerer still has the high fiver offer status effect from taker B moving away, which is invalid because there are no takers are nearby") diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png index d55c22366545..a8a72e429e72 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_changeling.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_changeling.png index 712e7f1a0ecb..63efd8fd17af 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_changeling.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_changeling.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_changelingmidround.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_changelingmidround.png index ac412207c236..e43584b63a01 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_changelingmidround.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_changelingmidround.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_floridaman.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_floridaman.png new file mode 100644 index 000000000000..1357a6a0e866 Binary files /dev/null and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_floridaman.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_nightmare.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_nightmare.png index 3b723129ac84..853ef8453830 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_nightmare.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_nightmare.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_slasher.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_slasher.png new file mode 100644 index 000000000000..e9faca81631b Binary files /dev/null and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_slasher.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow_nightmare.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow_nightmare.png index 61656a888921..5cdeedeffca7 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow_nightmare.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow_nightmare.png differ diff --git a/code/modules/unit_tests/slime_mood.dm b/code/modules/unit_tests/slime_mood.dm deleted file mode 100644 index a0d3edb95c17..000000000000 --- a/code/modules/unit_tests/slime_mood.dm +++ /dev/null @@ -1,12 +0,0 @@ -///Unit test that tests all types of moods for slimes, to make sure they all have proper icons, excluding moods that intentionally don't have an icon. -/datum/unit_test/slime_mood - -/datum/unit_test/slime_mood/Run() - var/mob/living/simple_animal/slime/emoting_slime = allocate(/mob/living/simple_animal/slime) - - for(var/key in GLOB.emote_list) - for(var/datum/emote/slime/mood/slime_mood in GLOB.emote_list[key]) - var/list/states = icon_states(emoting_slime.icon) - if(!slime_mood.mood_key) - continue - TEST_ASSERT(("aslime-[slime_mood.mood_key]" in states), "[slime_mood] is set to give [emoting_slime] the [slime_mood.mood_key] emote, but the icon state can't be found in [emoting_slime.icon].") diff --git a/code/modules/unit_tests/strange_reagent.dm b/code/modules/unit_tests/strange_reagent.dm index 345be4befe97..e754282eb121 100644 --- a/code/modules/unit_tests/strange_reagent.dm +++ b/code/modules/unit_tests/strange_reagent.dm @@ -18,7 +18,7 @@ types_to_check -= /mob/living/simple_animal/pet/gondola/gondolapod // need a pod, which we don't have types_to_check -= typesof(/mob/living/simple_animal/hostile/megafauna) // no types_to_check -= typesof(/mob/living/basic/mouse) // qdel themselves on death; why dont they use DEL_ON_DEATH you might ask. I-unno - types_to_check -= typesof(/mob/living/simple_animal/slime) // if they roll the 50% chance to spawn as an adult, they can just at random split and qdel themselves + types_to_check -= typesof(/mob/living/basic/slime) // if they roll the 50% chance to spawn as an adult, they can just at random split and qdel themselves for(var/mob/living/type as anything in types_to_check) var/mob/living/target = allocate_new_target(type) diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm index 914e9953dbdf..6276d4dcac20 100644 --- a/code/modules/unit_tests/unit_test.dm +++ b/code/modules/unit_tests/unit_test.dm @@ -259,8 +259,6 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) //Same to above. Needs a client / mob / hallucination to observe it to exist. ignore += typesof(/obj/projectile/hallucination) ignore += typesof(/obj/item/hallucinated) - //Can't pass in a thing to glow - ignore += typesof(/obj/effect/abstract/eye_lighting) //We don't have a pod ignore += typesof(/obj/effect/pod_landingzone_effect) ignore += typesof(/obj/effect/pod_landingzone) diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 8d1607fd1196..2b9299884419 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -17,6 +17,7 @@ uplink_item.name += " ([round(((initial(uplink_item.cost)-uplink_item.cost)/initial(uplink_item.cost))*100)]% off!)" uplink_item.desc += " Normally costs [initial(uplink_item.cost)] TC. All sales final. [pick(disclaimer)]" uplink_item.item = taken_item.item + uplink_item.discounted = TRUE sales += uplink_item return sales @@ -35,8 +36,6 @@ var/desc = "item description" /// Path to the item to spawn. var/item = null - /// Alternative path for refunds, in case the item purchased isn't what is actually refunded (ie: holoparasites). - var/refund_path = null /// Cost of the item. var/cost = 0 /// Amount of TC to refund, in case there's a TC penalty for refunds. @@ -47,6 +46,8 @@ var/surplus = 100 /// Whether this can be discounted or not var/cant_discount = FALSE + /// If discounted, is true. Used to send a signal to update reimbursement. + var/discounted = FALSE /// If this value is changed on two items they will share stock, defaults to not sharing stock with any other item var/stock_key = UPLINK_SHARED_STOCK_UNIQUE /// How many items of this stock can be purchased. @@ -125,6 +126,8 @@ A = new spawn_path(get_turf(user)) else A = spawn_path + if(refundable) + A.AddElement(/datum/element/uplink_reimburse, (refund_amount ? refund_amount : cost)) if(ishuman(user) && isitem(A)) var/mob/living/carbon/human/H = user if(H.put_in_hands(A)) diff --git a/code/modules/uplink/uplink_items/dangerous.dm b/code/modules/uplink/uplink_items/dangerous.dm index 5452b60d9a67..2f1754428c92 100644 --- a/code/modules/uplink/uplink_items/dangerous.dm +++ b/code/modules/uplink/uplink_items/dangerous.dm @@ -89,6 +89,7 @@ surplus = 40 //monkestation edit: from 0 to 40 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) restricted = TRUE + refundable = TRUE /datum/uplink_item/dangerous/revolver name = "Syndicate Revolver" diff --git a/code/modules/uplink/uplink_items/device_tools.dm b/code/modules/uplink/uplink_items/device_tools.dm index aff270bd80fa..e5fd0cde007d 100644 --- a/code/modules/uplink/uplink_items/device_tools.dm +++ b/code/modules/uplink/uplink_items/device_tools.dm @@ -19,7 +19,8 @@ desc = "The Syndicate surgery duffel bag is a toolkit containing all surgery tools, surgical drapes, \ a Syndicate brand MMI, a straitjacket, and a muzzle." item = /obj/item/storage/backpack/duffelbag/syndie/surgery - cost = 3 + cost = 4 + surplus = 66 /datum/uplink_item/device_tools/encryptionkey name = "Syndicate Encryption Key" @@ -82,11 +83,10 @@ item = /obj/item/storage/box/syndie_kit/syndicate_teleporter cost = 8 -/datum/uplink_item/device_tools/camera_bug - name = "Camera Bug" - desc = "Enables you to view all cameras on the main network, set up motion alerts and track a target. \ - Bugging cameras allows you to disable them remotely." - item = /obj/item/camera_bug +/datum/uplink_item/device_tools/camera_app + name = "SyndEye Program" + desc = "A data disk containing a unique PC app that allows you to watch cameras and track crewmembers." + item = /obj/item/computer_disk/syndicate/camera_app cost = 1 surplus = 90 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) @@ -256,3 +256,10 @@ progression_minimum = 30 MINUTES item = /obj/item/powersink cost = 11 + +/datum/uplink_item/device_tools/syndicate_contacts + name = "Polarized Contact Lenses" + desc = "High tech contact lenses that bind directly with the surface of your eyes to give them immunity to flashes and \ + bright lights. Effective, affordable, and nigh undetectable." + item = /obj/item/syndicate_contacts + cost = 2 // monke: lower cost to 2TC diff --git a/code/modules/uplink/uplink_items/implant.dm b/code/modules/uplink/uplink_items/implant.dm index 34fc9eedb0ff..87c9fd6c96c0 100644 --- a/code/modules/uplink/uplink_items/implant.dm +++ b/code/modules/uplink/uplink_items/implant.dm @@ -9,11 +9,14 @@ /datum/uplink_item/implants/freedom name = "Freedom Implant" - desc = "An implant injected into the body and later activated at the user's will. It will attempt to free the \ - user from common restraints such as handcuffs." + desc = "Can be activated to release common restraints such as handcuffs, legcuffs, and even bolas tethered around the legs." item = /obj/item/storage/box/syndie_kit/imp_freedom cost = 5 +/datum/uplink_item/implants/freedom/New() + . = ..() + desc += " Implant has enough energy for [FREEDOM_IMPLANT_CHARGES] uses before it becomes inert and harmlessly self-destructs." + /datum/uplink_item/implants/radio name = "Internal Syndicate Radio Implant" desc = "An implant injected into the body, allowing the use of an internal Syndicate radio. \ diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm index 412f8ab51cbc..7abd8076c5cd 100644 --- a/code/modules/uplink/uplink_items/nukeops.dm +++ b/code/modules/uplink/uplink_items/nukeops.dm @@ -551,6 +551,7 @@ cost = 20 purchasable_from = UPLINK_CLOWN_OPS restricted = TRUE + refundable = TRUE /datum/uplink_item/support/reinforcement name = "Reinforcements" @@ -558,16 +559,15 @@ They'll come equipped with a mere surplus SMG, so arming them is recommended." item = /obj/item/antag_spawner/nuke_ops cost = 25 - refundable = TRUE purchasable_from = UPLINK_NUKE_OPS restricted = TRUE + refundable = TRUE /datum/uplink_item/support/reinforcement/assault_borg name = "Syndicate Assault Cyborg" desc = "A cyborg designed and programmed for systematic extermination of non-Syndicate personnel. \ Comes equipped with a self-resupplying LMG, a grenade launcher, energy sword, emag, pinpointer, flash and crowbar." item = /obj/item/antag_spawner/nuke_ops/borg_tele/assault - refundable = TRUE cost = 65 restricted = TRUE @@ -577,7 +577,6 @@ It comes equipped with a nanite hypospray, a medical beamgun, combat defibrillator, full surgical kit including an energy saw, an emag, pinpointer and flash. \ Thanks to its organ storage bag, it can perform surgery as well as any humanoid." item = /obj/item/antag_spawner/nuke_ops/borg_tele/medical - refundable = TRUE cost = 35 restricted = TRUE @@ -587,7 +586,6 @@ Aside from regular Engineering equipment, it comes with a special destination tagger that lets it traverse disposals networks. \ Its chameleon projector lets it disguise itself as a Nanotrasen cyborg, on top it has thermal vision and a pinpointer." item = /obj/item/antag_spawner/nuke_ops/borg_tele/saboteur - refundable = TRUE cost = 35 restricted = TRUE diff --git a/code/modules/uplink/uplink_items/stealthy.dm b/code/modules/uplink/uplink_items/stealthy.dm index 005384c3f762..8a2d71d87665 100644 --- a/code/modules/uplink/uplink_items/stealthy.dm +++ b/code/modules/uplink/uplink_items/stealthy.dm @@ -77,7 +77,7 @@ and gain the ability to swat bullets from the air, but you will also refuse to use dishonorable ranged weaponry." item = /obj/item/book/granter/martial/carp progression_minimum = 30 MINUTES - cost = 13 + cost = 17 surplus = 30 //monkestation edit: from 0 to 30 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index cba46e7dff73..deae8acc20fe 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -114,6 +114,9 @@ /obj/item/clothing/head/costume/cueball = 1, /obj/item/clothing/under/suit/white_on_white = 1, /obj/item/clothing/head/tragic = 2, + /obj/item/clothing/head/harlequinhat =2,//MONKESTATION EDIT ADDITION + /obj/item/clothing/under/costume/harlequin =2,//MONKESTATION EDIT ADDITION + /obj/item/clothing/shoes/clown_shoes/harlequin_boots =2,//MONKESTATION EDIT ADDITION /obj/item/clothing/under/costume/tragic = 2, /obj/item/clothing/under/costume/streetmime = 1, /obj/item/clothing/mask/gas/clown_hat/yellow = 1, diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm index 7f4c2b5280be..a5e4f551ac5c 100644 --- a/code/modules/vending/boozeomat.dm +++ b/code/modules/vending/boozeomat.dm @@ -32,6 +32,11 @@ /obj/item/reagent_containers/cup/glass/bottle/beer = 6, /obj/item/reagent_containers/cup/glass/bottle/vodka = 5, /obj/item/reagent_containers/cup/glass/bottle/whiskey = 5, + /obj/item/reagent_containers/cup/glass/bottle/coconut_rum = 5, + /obj/item/reagent_containers/cup/glass/bottle/yuyake = 5, + /obj/item/reagent_containers/cup/glass/bottle/shochu = 5, + /obj/item/reagent_containers/cup/soda_cans/beer = 10, + /obj/item/reagent_containers/cup/soda_cans/beer/rice = 10, ), ), @@ -49,6 +54,8 @@ /obj/item/reagent_containers/cup/soda_cans/sol_dry = 8, /obj/item/reagent_containers/cup/soda_cans/cola = 8, /obj/item/reagent_containers/cup/soda_cans/tonic = 8, + /obj/item/reagent_containers/cup/glass/bottle/hakka_mate = 5, + /obj/item/reagent_containers/cup/soda_cans/melon_soda = 5, ), ), diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm index 947db7f22749..a2d9ef5e7de0 100644 --- a/code/modules/vending/cola.dm +++ b/code/modules/vending/cola.dm @@ -17,13 +17,16 @@ /obj/item/reagent_containers/cup/soda_cans/sol_dry = 10, /obj/item/reagent_containers/cup/glass/waterbottle = 10, /obj/item/reagent_containers/cup/glass/bottle/mushi_kombucha = 3, + /obj/item/reagent_containers/cup/soda_cans/volt_energy = 3, ) contraband = list( /obj/item/reagent_containers/cup/soda_cans/thirteenloko = 6, /obj/item/reagent_containers/cup/soda_cans/shamblers = 6, + /obj/item/reagent_containers/cup/soda_cans/wellcheers = 6, ) premium = list( /obj/item/reagent_containers/cup/glass/drinkingglass/filled/nuka_cola = 1, + /obj/item/reagent_containers/cup/glass/drinkingglass/filled/sunset_sarsaparilla = 1, // monkestation edit /obj/item/reagent_containers/cup/soda_cans/air = 1, /obj/item/reagent_containers/cup/soda_cans/monkey_energy = 1, /obj/item/reagent_containers/cup/soda_cans/grey_bull = 1, @@ -101,6 +104,7 @@ /obj/item/reagent_containers/cup/soda_cans/lemon_lime = 10, /obj/item/reagent_containers/cup/soda_cans/sol_dry = 10, /obj/item/reagent_containers/cup/soda_cans/shamblers = 10, + /obj/item/reagent_containers/cup/soda_cans/wellcheers = 5, ) product_slogans = "~Shake me up some of that Shambler's Juice!~" product_ads = "Refreshing!;Thirsty for DNA? Satiate your craving!;Over 1 trillion souls drank!;Made with real DNA!;The hivemind demands your thirst!;Drink up!;Absorb your thirst." diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm index 22d17761bf16..ec633084fd83 100644 --- a/code/modules/vending/snack.dm +++ b/code/modules/vending/snack.dm @@ -24,6 +24,11 @@ /obj/item/reagent_containers/cup/glass/dry_ramen = 3, /obj/item/storage/box/gum = 3, /obj/item/food/energybar = 6, + /obj/item/food/hot_shots = 6, + /obj/item/food/sticko = 6, + /obj/item/food/sticko/random = 3, + /obj/item/food/shok_roks = 6, + /obj/item/food/shok_roks/random = 3, ) contraband = list( /obj/item/food/syndicake = 6, diff --git a/code/modules/vending/youtool.dm b/code/modules/vending/youtool.dm index 86190e9c78b1..f6060e7a1520 100644 --- a/code/modules/vending/youtool.dm +++ b/code/modules/vending/youtool.dm @@ -7,7 +7,9 @@ light_mask = "tool-light-mask" products = list( /obj/item/stack/cable_coil = 10, - /obj/item/stack/cable_coil/industrial = 3, + /obj/item/stack/cable_coil/industrial = 3, // MONKESTATION ADDITION + /obj/item/stack/cable_coil/monitoring = 5, // MONKESTATION ADDITION + /obj/item/stack/cable_coil/valve = 5, // MONKESTATION ADDITION /obj/item/crowbar = 5, /obj/item/weldingtool = 3, /obj/item/wirecutters = 5, diff --git a/code/modules/wiremod/core/duplicator.dm b/code/modules/wiremod/core/duplicator.dm index a784f4030bcc..89a177fa7973 100644 --- a/code/modules/wiremod/core/duplicator.dm +++ b/code/modules/wiremod/core/duplicator.dm @@ -230,7 +230,7 @@ GLOBAL_LIST_INIT(circuit_dupe_whitelisted_types, list( var/txt switch(option) if("File") - txt = file2text(input(usr, "Input File") as file|null) + txt = file2text(input(usr, "Input File") as null|file) if("Direct Input") txt = input(usr, "Input JSON", "Input JSON") as text|null diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm index ceb9bb11c4ce..807e93c33d20 100644 --- a/code/modules/zombie/items.dm +++ b/code/modules/zombie/items.dm @@ -11,20 +11,24 @@ bare_wound_bonus = 15 sharpness = SHARP_EDGED -/obj/item/mutant_hand/zombie/afterattack(atom/target, mob/user, proximity_flag) +/obj/item/mutant_hand/zombie/afterattack(atom/target, mob/living/user, proximity_flag) . = ..() if(!proximity_flag) return else if(isliving(target)) if(ishuman(target)) - try_to_zombie_infect(target) + try_to_zombie_infect(target, user, user.zone_selected) else . |= AFTERATTACK_PROCESSED_ITEM check_feast(target, user) -/proc/try_to_zombie_infect(mob/living/carbon/human/target) +/proc/try_to_zombie_infect(mob/living/carbon/human/target, mob/living/user, def_zone = BODY_ZONE_CHEST) CHECK_DNA_AND_SPECIES(target) + // Can't zombify with no head + if(!target.get_bodypart(BODY_ZONE_HEAD)) + return + if(NOZOMBIE in target.dna.species.species_traits) // cannot infect any NOZOMBIE subspecies (such as high functioning // zombies) @@ -34,11 +38,31 @@ if(istype(target) && target.reagents.has_reagent(/datum/reagent/medicine/antipathogenic/spaceacillin) && prob(75)) return + var/obj/item/bodypart/actual_limb = target.get_bodypart(def_zone) + + // What you hitting bro? + if(!actual_limb) + return + + var/limb_damage = actual_limb.get_damage() + var/limb_armor = max(0, target.getarmor(actual_limb, BIO) - 25) + + // This is a pretty jank way to do this, but in short: + // if they have thick material on that bodypart it will always need at least 25 previous limb damage to trigger an infection. + // and if their bio armor isn't thick it's a bit weaker. + for(var/obj/item/clothing/iter_clothing in target.get_clothing_on_part(actual_limb)) + if(iter_clothing.clothing_flags & THICKMATERIAL) + limb_armor += 25 + + if(limb_armor > limb_damage) + return + var/obj/item/organ/internal/zombie_infection/infection infection = target.get_organ_slot(ORGAN_SLOT_ZOMBIE) if(!infection) infection = new() infection.Insert(target) + to_chat(user, span_alien("You see [target] twitch for a moment as [target.p_their()] head is covered in \a [infection] - [target.p_theyve()] been infected.")) /obj/item/mutant_hand/zombie/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is ripping [user.p_their()] brains out! It looks like [user.p_theyre()] trying to commit suicide!")) diff --git a/config/game_options.txt b/config/game_options.txt index b336b336d268..9553ef352df5 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -48,7 +48,7 @@ WALK_DELAY 4 ##MULTIPLICATIVE_MOVESPEED /mob/living/carbon/human 0 ##MULTIPLICATIVE_MOVESPEED /mob/living/silicon/robot 0 ##MULTIPLICATIVE_MOVESPEED /mob/living/carbon/alien 0 -##MULTIPLICATIVE_MOVESPEED /mob/living/simple_animal/slime 0 +##MULTIPLICATIVE_MOVESPEED /mob/living/basic/slime 0 MULTIPLICATIVE_MOVESPEED /mob/living/simple_animal 0 MULTIPLICATIVE_MOVESPEED /mob/living/basic 0 diff --git a/config/logging.txt b/config/logging.txt index 1b53bc2f1bf3..f97e3c5bb6b9 100644 --- a/config/logging.txt +++ b/config/logging.txt @@ -104,3 +104,6 @@ LOG_ZONE_SWITCH ## Enable the demo subsystem DEMOS_ENABLED + +## log storyteller +# LOG_STORYTELLER diff --git a/config/maps.txt b/config/maps.txt index 114035c532ac..575904db534d 100644 --- a/config/maps.txt +++ b/config/maps.txt @@ -52,3 +52,8 @@ endmap map oshan votable endmap + +map boxstation + minplayers 25 + votable +endmap diff --git a/dependencies.sh b/dependencies.sh index 0d6fe6b8fd60..62463ad41604 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -5,7 +5,7 @@ # byond version export BYOND_MAJOR=515 -export BYOND_MINOR=1610 +export BYOND_MINOR=1633 #rust_g git tag export RUST_G_VERSION=3.1.0 @@ -24,4 +24,4 @@ export PYTHON_VERSION=3.9.0 export AUXLUA_REPO=tgstation/auxlua #auxlua git tag -export AUXLUA_VERSION=1.4.1 +export AUXLUA_VERSION=1.4.4 diff --git a/html/changelogs/AutoChangeLog-pr-1256.yml b/html/changelogs/AutoChangeLog-pr-1256.yml deleted file mode 100644 index 19d60f70c15a..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1256.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: "AlbertNanotracen" -delete-after: True -changes: - - rscadd: "Voltaic Yellow Wine - New \"base\" drink, found in booze-o-mat. No special effects besides acting as a weak ethereal food. Not very potent in terms of alcohol." - - rscadd: "Telepole - New mixed drink themed after thunderstorms, gives the same shock-resist grey bull does. Made from 1 part Voltaic Wine, 1 Part Sake, and 2 parts Dark & Stormy. Moderately potent." - - rscadd: "Pod Tesla - New mixed drink, themed after the old removed tesla engine (the singulo gets a cocktail, it should too!) Grants a brave - bull phobia resist, and a stronger grey bull shock resist allowing you to (temporarily) resist tesla arcs from reactive armor and the SM's tesla coils. Gives a pleasant thought to whoever drank it, because this thing is a pain to make. Made from 5 parts admiralty, 5 parts telepole, and 3 parts brave bull. Highly potent." - - qol: "Unsure if this counts as QOL or balance, but the fact sol dry is in 3 different cocktails but the bartender has to buy 30u cans of it made me feel it deserved being added to the soda dispenser." - - image: "Added graphics for the above drinks, shown below, from left to right: Pod tesla, Voltaic Yellow wine, Telepole, Voltaic Wine (bottle)\n\"image\"\nsrc=\"https://github.com/tgstation/tgstation/assets/69398298/901b2f64-1723-44b6-8f78-ef21bd477d96\"" - - bugfix: "Ice cups no longer instantly melt when vended" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1285.yml b/html/changelogs/AutoChangeLog-pr-1285.yml deleted file mode 100644 index 22b1a4f57e45..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1285.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - bugfix: "Fixes hallucination and encrypted announcements printing to the Newscaster." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1288.yml b/html/changelogs/AutoChangeLog-pr-1288.yml deleted file mode 100644 index 7a91d07ee7e7..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1288.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "lessthnthree" -delete-after: True -changes: - - qol: "Air alarms now display the source of triggered fire alarms/firedoors" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1290.yml b/html/changelogs/AutoChangeLog-pr-1290.yml deleted file mode 100644 index d3910400c250..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1290.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "DimWhat" -delete-after: True -changes: - - bugfix: "Fixed the bunny wand not giving you cursed gloves" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1295.yml b/html/changelogs/AutoChangeLog-pr-1295.yml deleted file mode 100644 index 82855aec06fc..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1295.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Absolucy" -delete-after: True -changes: - - bugfix: "The Monster Hunters midround event no longer has a blank name." \ No newline at end of file diff --git a/html/changelogs/archive/2024-02.yml b/html/changelogs/archive/2024-02.yml index a5d0ec90d58e..9c2e5fcf2ffd 100644 --- a/html/changelogs/archive/2024-02.yml +++ b/html/changelogs/archive/2024-02.yml @@ -245,3 +245,54 @@ - image: fixed some ethereal sprite inconsistencies. - rscadd: Added dimorphism to florans. - image: Fixes a few issues with bunnysuit and tailcoat sprites +2024-02-27: + Absolucy: + - bugfix: The Monster Hunters midround event no longer has a blank name. + - rscadd: You can now light cigarettes by striking it across your local ethereal! + Don't worry, it doesn't harm them, although they may find it annoying. + AlbertNanotracen: + - rscadd: Voltaic Yellow Wine - New "base" drink, found in booze-o-mat. No special + effects besides acting as a weak ethereal food. Not very potent in terms of + alcohol. + - rscadd: Telepole - New mixed drink themed after thunderstorms, gives the same + shock-resist grey bull does. Made from 1 part Voltaic Wine, 1 Part Sake, and + 2 parts Dark & Stormy. Moderately potent. + - rscadd: Pod Tesla - New mixed drink, themed after the old removed tesla engine + (the singulo gets a cocktail, it should too!) Grants a brave - bull phobia resist, + and a stronger grey bull shock resist allowing you to (temporarily) resist tesla + arcs from reactive armor and the SM's tesla coils. Gives a pleasant thought + to whoever drank it, because this thing is a pain to make. Made from 5 parts + admiralty, 5 parts telepole, and 3 parts brave bull. Highly potent. + - qol: Unsure if this counts as QOL or balance, but the fact sol dry is in 3 different + cocktails but the bartender has to buy 30u cans of it made me feel it deserved + being added to the soda dispenser. + - image: 'Added graphics for the above drinks, shown below, from left to right: + Pod tesla, Voltaic Yellow wine, Telepole, Voltaic Wine (bottle) + + image' + - bugfix: Ice cups no longer instantly melt when vended + DimWhat: + - bugfix: Fixed the bunny wand not giving you cursed gloves + Melbert: + - bugfix: Fixes hallucination and encrypted announcements printing to the Newscaster. + lessthnthree: + - qol: Air alarms now display the source of triggered fire alarms/firedoors +2024-02-28: + 13spacemen, Kapu1178, KnigTheThrasher: + - refactor: Footprint sprites are now based on your shoes and legs, shoes have priority + - image: Monkey legs now produce pawprints instead of footprints + - rscadd: Footprint support for simians and lizards + Absolucy: + - bugfix: Vaulting over climbables now displays the proper name of the object, instead + of just `/datum/element/climbable` + AlbertNanotracen: + - bugfix: Dirty ice cups should work as intended + - rscadd: Added wellcheers, a contraband soda with various side effects. + - image: resprites all cans in the drinks icon file + - image: resprites the canholder sprite in storage.dmi +2024-02-29: + lmenvs: + - rscadd: Adds Rickdude's Nukie tier redeems. Thank you! + - rscadd: Adds Django's donator items, sprited by Dimwhat. Thank you! diff --git a/html/changelogs/archive/2024-03.yml b/html/changelogs/archive/2024-03.yml new file mode 100644 index 000000000000..50ee47de155f --- /dev/null +++ b/html/changelogs/archive/2024-03.yml @@ -0,0 +1,540 @@ +2024-03-01: + Absolucy, LT3, Ghommie: + - refactor: Refactored maptext (those floating words) + - bugfix: Fixed special chat bubbles for yelling, clown, redtext, greentext + - bugfix: Fixed alignment of status display text + - code_imp: Status displays now synchronize their message lines when scrolling + - image: More maptext and font tweaks + - spellcheck: Context tooltips too small, too big... just right? + - bugfix: Maptext should now properly show superscript characters when performing + actions + - bugfix: Fixed text effects for runechat messages (the stuff enclosed in +, | and + _ characters). + - spellcheck: Improved the tip for say/text effects. + Absolucy, itsmeowdev: + - rscadd: Added TGUI color picker and replaced all use of BYOND color pickers with + it (TGUI input preference is still respected). + - qol: The Generic UI theme will now affect the border color of number inputs and + text areas the same as text inputs. + DexeeXI: + - bugfix: Baseline job titles for Cargo Tech, Quartermaster and Shaft Miner return. + - rscdel: Removed a single extra air pipe on the Icebox Maid Cafe so it stops causing + 11 lines of test failures + - bugfix: Tweaks the Metastation Singularity Engine Complex to also stop unit test + failures. + MrMelbert: + - qol: Glasses colors should be a lot less harsh, and being blind no longer also + blinds your hud. +2024-03-02: + Absolucy: + - rscadd: Nanotrasen has rescinded their restrictions on species such as lizards + and moths growing hair. +2024-03-03: + Absolucy: + - bugfix: Fix dissection experiment never completing. + - bugfix: Ghost players now have their own outfit, which notably lacks a PDA, so + they no longer clog up the PDA messenger + - rscadd: Ghost players get loadout items by default + - qol: Explosions can no longer occur in centcom at all outside of the arena. + - rscadd: Players in "safe" areas of centcom will now get a status effect that makes + them much more resilient. Entering a duel or leaving centcom will remove these + effects. + - balance: Hypercharged slime batteries are now EMP-proof, like their ordinary charged + counterparts. + - rscadd: Added "Refresh TGUI" and "Fix Chat" buttons to the Help menu at the top + of the game window. + Absolucy, Melbert: + - balance: Stop, drop, and roll no longer instantly clears 5 fire stacks off of + you - Instead, it will clear 1 fire stack off of you every time you roll, with + a roll every 0.8 seconds. + - balance: Stop, drop, and roll no longer stuns you for 6 seconds. Instead, it will + knock you to the floor while you are rolling. Moving around or getting up will + cancel the roll, and you cannot use items while rolling around. + - balance: Stop, drop, and roll will now repeat until the fire is put out or you + get up. + Absolucy, Momo8289: + - rscadd: Cigarettes can now be placed in and smoked through gas masks, so long + as the mask has no filters installed and is not covering the mouth. + Absolucy, Reality Overseer: + - bugfix: fixed photographs having black borders in photos + Absolucy, mc-oofert: + - qol: mice and rats now are visually spaced out from eachother for visual clarity + DexeeXI: + - bugfix: QM is NOT a head. + - bugfix: QM no longer has command related items on spawn. + - bugfix: QM is not chain of command. No more biscuit. + - bugfix: QM's SECHUD icon is no longer blue. It's improved, hope you appreciate + the cringe. + - bugfix: QM's PDA doesn't have bullshit programs on it anymore. In fact, it's a + non-head PDA that has what you require to **do your job**. + - bugfix: QM offices properly reflect their non-head status. + - bugfix: Maid Cafe on Icebox had extra pipe causing a litany of issues. The extra + pipe is now removed. + - bugfix: damned rabbit mask no longer can be knocked off and provides protection + from facehuggers. + KittyNoodle: + - balance: Returns mindswap to its original, targeted form + Melbert, Absolucy: + - rscadd: You can now wear multiple accessories on your uniform at once (up to five + by default) + NicoDeLuna: + - rscadd: Added Helldiver uniform +2024-03-07: + Absolucy: + - qol: The roundend message on discord is now a "silent" ping. + - server: Renamed the `?status-old` webhook world topic back to `?status`, and renamed + the `?status` to `?status-webhook" + Absolucy, Ghommie: + - rscadd: Standing on structures such as crates, tables and bed will now look like + it. + DimWhat: + - rscadd: Added Quilark's donator items. Thank you. + - rscadd: Added zergking's pill name. Thank you. +2024-03-08: + Absolucy: + - qol: Constructs now reuse the victim's mind instead of just moving their client + - bugfix: Fix a weird runtime that broke telecomms + - bugfix: Curators, chaplains, and monster hunters can now all actually properly + USE the Archive of the Kindred, as they're meant to. + - bugfix: Fix broken dropdown buttons in the tgui chat settings. + Absolucy, JupiterJaeden, FlufflesTheDog: + - qol: people now lie down when buckled to surgery tables, and you no longer need + cuffs to buckle someone to a surgery table +2024-03-09: + wraith-54321: + - bugfix: Fixed some turf atmos diffs on tram and CC +2024-03-10: + AlbertNanotracen: + - bugfix: Sprinting now correctly checks the sprinter for the frerunning trait. + - bugfix: Freeruning trait now accelerates climbing onto objects when sprinting + into it. +2024-03-11: + Absolucy: + - bugfix: Secondary alt-click works, so you can now properly detach accessories + and such. + - rscadd: Added built-in air conditioning (temperature regulation) to air alarms! + While certainly not as powerful as a proper dedicated space heater, it can still + help greatly with stabilizing the temperature of an area. + - bugfix: walls built next to firelocks no longer hold onto their alarms. (Deadgebert) + - balance: The heresy phobia from being sacrificed is now deep-rooted rather than + permanent, meaning that it can be cured with a lobotomy. + - balance: Victims in stamina crit are now also eligible for the heretic sacrifice + rune. + - qol: Heretic influences take longer to fade in (15 seconds -> 1 minute), and disappear + after 10 minutes. + - qol: Heretic sacrifices will now try to grab a corpse's ghost when trying to revive. + - bugfix: Touching a tear in reality while being immune to dismemberment will just + result in the arm being terribly wounded instead, avoiding a bug with the limb + still being "there" despite being deleted. + - balance: The Codex Cicatrix is now fully acid and fire-proof. + - balance: Heretic armor and the void cloak are now fully acid and fire-proof. + - qol: The beginning of the heretic sacrifice minigame will nullify any sorts of + pre-existing stuns or sleeps, and prevent several external factors such as heart/liver + problems, phobias, sedatives, epilepsy, or brain tumors from causing issues + during the minigame. + - balance: Ash heretics will no longer succumb to infections from burn wounds. The + wound itself still remains an issue, it just won't get infected. + AlbertNanotracen: + - bugfix: Crafting a mk58 flashlight module should now give you a mk58 flashlight + module. + - image: Added a open icon sprite (maintenance hatch) for nanite programmer and + nanite program hub. +2024-03-12: + Generic DM, PositiveEntropy, ReturnToZender: + - rscadd: Cargo shelves are now craftable using metal! They store up to 3 crates + per shelf. +2024-03-13: + Absolucy: + - rscadd: Say emote prefixes are no longer forced to be lowercase. This includes + radio emotes! + - bugfix: new hotkeys unbound by default (like emotes) no longer scream at you when + added + - bugfix: fixed custom say emotes with non-ASCII characters + - bugfix: Mobs can once again emote (with sound) when they die. + - rscadd: Adds an emote to push up glasses with *glasses + - rscadd: Adds a visual effect to *sigh + - spellcheck: Fixed a spelling error with the daps emote. + - sound: '*flap now makes a fluttering noise for moth wings' + - sound: Moths now have a death sound + - qol: '*tremble emote now is just "trembles!" instead of "trembles in fear!"' + - qol: Improve the emote help verb to be more user friendly. + - rscadd: Emote Panel TGUI added in IC category. + - bugfix: Cut down a significant amount of time that caused the start of rounds + to lag. + - bugfix: Fixed a lot of missing/broken images, such as emojis, language icons, + commendation hearts, icons in R&D menu, etc. + - sound: Dying with a SecHailer on your face will make a unique death sound +2024-03-14: + AlbertNanotracen: + - rscadd: Radiohydrate now has an overdose threshold of 20u + - rscadd: While overdosing on Radiohydrate, your antigens slowly decay + - balance: Having a higher than normal immune strength now decays whenever you are + sick + - rscadd: Self Sustaining trays bypass the nutrient requirement to grow + - rscadd: Self Sustaining trays now pause aging when fully grown & functional(corpse + flowers) + - bugfix: Corpse flowers now make miasma again + - bugfix: Hydroponics trays now run out of nutrients entirely +2024-03-16: + Absolucy: + - rscadd: Buffs number of character slots (for everyone) to 20. + - bugfix: Removed some sources of hard deletes. + - bugfix: Fixed some sources of runtime errors. + - bugfix: fixes experimental cloners spitting out randomized clones instead of clones + of who was scanned + - bugfix: Centcom ghost players are now properly revived / cleaned up whenever they + die. + Absolucy, Singul0: + - balance: Brainwashed individuals can no longer be debrainwashed through a mindshield + implant, they still protect you from brainwashing though! You just need to get + medical to fix them up. + DimWhat: + - rscadd: You can now set your socks color. + - rscadd: Added a few new sock types. + - rscdel: Removed black socks as they aren't needed. + - bugfix: Made socks properly change for feminine bodytypes if needed. + - rscadd: Equalized pay for most roundstart species. + - image: Tweaked the jabberwocky sprite slightly. + - balance: Lowered the chance of both real and fake diseases occuring + FernandoJ8: + - bugfix: Posession now revives those who are dead or in hard crit and turns them + into temporary vassals + - qol: Added a balloon alert that indicates when someone cannot be tortured in a + persuasion rack due to being dead or in hard crit. + Gboster-0: + - rscadd: the PTL after exporting 1 Megawatt of power will now give announcements + every 30 minutes about its power exported + - balance: AI's now do not have a good time when trying to prevent slashers from + incorporealizing + KittyNoodle: + - rscdel: The Operative has been removed from rotation + - rscdel: The Mystic no longer does wizard events + - bugfix: Clown Storyteller has been re-removed from rotation after it was re-added + thanks to an oversight. + - balance: Reduces the antag cap slightly. + - balance: Wizard weight has been lowered to match malf ai weight. + - balance: Guide is slightly less common + - balance: Jester is now slightly less excessive + - balance: Sleeper has been made less rare(it was at the same level as warrior before) + - balance: Paradox clones have been made more common. + KnigTheThrasher: + - bugfix: Moved cargo apc covering atm to below hop's office. + - bugfix: Moved Meta tesla/singulo engine a bit further to the east. + - rscadd: Replaced the generic shuttle welcome sound with Duke Nukem announcer + Marabout2: + - image: Replaced moffin_1 in food.dmi with the moffin sent on the discord. + NicoDeLuna: + - rscadd: Added Harlequin clothes for Clown and Mime + TTNT789: + - rscadd: viking stuff credit to dimwhat for the sprites(credit to camriod_core + for adjusting helmet for ian) + - rscadd: Sunset sarsaparilla drinking gives a slight healing over time effect + githubuser4141: + - image: Replaces the occupied, unoccupied, broken and phasing icons for phazon, + durand, gygax and odysseus mechs. + jlsnow301, Rhials, Paxilmaniac, san7890: + - rscadd: 'jlsnow301: Added some clarity to the range of netpods (4 tiles) in their + exam text.' + - rscdel: 'jlsnow301: Chamber of Echoes map removed as it conflicts with the actual + Legion' + - bugfix: 'jlsnow301: Entering a virtual domain should no longer give you a message + that it doesn''t forbid items' + - bugfix: 'jlsnow301: Paraplegics can now enter netpods.' + - bugfix: 'jlsnow301: Fixes an exploit caused by teleporting out of a netpod.' + - bugfix: 'jlsnow301: Outfit selection at netpods shouldn''t give armor bonuses + any longer.' + - bugfix: 'jlsnow301: Bubblegum should no longer teleport out of the simulation + when threatened' + - bugfix: 'jlsnow301: Heretics won''t lose their living heart while bitrunning anymore.' + - qol: 'Rhials: As an observer, clicking on a bitrunning pod will let you orbit + it''s bitrunning avatar. Cool!' + - code_imp: 'Paxilmaniac: Bitrunner domains can now have spells or items from disks + disabled if the domain maker wants such a thing' + - bugfix: 'san7890: Bitrunners can no longer get mass-mindswapped out of their avatar + when the wizard does the event. Something about machinery and magic not going + well together.' +2024-03-19: + Absolucy: + - qol: Cassette pouches are now proper storage, rather than their own snowflake + thing. They can still only hold cassettes, tho. + - qol: The roundstart cassettes (both blank and approved) now all spawn inside the + cassette pouch in the radio booth. + - admin: Admin Lua scripting works once more! + - bugfix: Removed duplicate APC from Icebox random bar theaters. + Absolucy, itseasytosee: + - rscadd: A new traitor item has been added, Polarized Contacts, for 2 TC! + AlbertNanotracen: + - rscadd: Examining a person will now give you their species. + CannibalHunter: + - rscadd: Adds a new fingergun emote! (*fingergun) + DimWhat: + - rscadd: The detective's revolver is now a small sized item + Litberries: + - rscadd: bee nuke + Skelessant: + - rscadd: Added Five pebbles ai display option. + aberrantQuesrist: + - rscadd: Slugcats simplemob + lmenvs: + - rscadd: Adds Oliver's Donation items. Thank you for your support! +2024-03-20: + Absolucy: + - balance: Anomalies now last 200 seconds (from 99) before detonating. + - balance: Bioscrambler anomalies are no longer immortal. + - balance: Dimensional anomalies now have a limited number of relocations before + they detonate, where it will distort a much larger surrounding area. + - balance: All anomaly events now share their occurrence count, meaning that the + storyteller can't spawn like 20 of each type of anomaly. Wormholes are also + included in this shared "group". + - refactor: Ghost roles now offer ghosts a clickable poll button. Ghosts can select + a role, deselect it, alt-click it for "Never For This Round", can cancel "Never", + can see the countdown, and can see how many other people are signed up for the + role poll. + - bugfix: Admins can now properly force events to fire. + - balance: Harnessing Shoreline Quay (bluespace energy, probably), a mystical energy + (total bullshit) that permeates the Astral Waterways (bluespace quantum dimensions, + probably), Sleeping Carp users can now once against deflect projectiles with + their bare hands when focused in on battle (in combat mode). + - balance: The Keelhaul technique is now nonlethal (a philosophical acknowledgement + of the familial bond of sleep and death), but causes the target to become temporarily + blind and dizzy along with its previous effects. + - balance: Sleeping Carp users, while in combat mode, deal Stamina damage with their + grabs and shoves. If the target of their grab has enough Stamina damage (80), + they are knocked unconscious from a well placed nerve pinch. + - balance: Sleeping Carp users find it very hard to wake up once they fall asleep.... + - balance: The Sleeping Carp martial arts scroll now costs 17 TC. + - qol: Clicking on anomalies with analyzers is now easier + Absolucy, san7890, EvilDragonfiend: + - qol: Who and Adminwho messages are now in an examine block for heightened clarity. + - admin: Admins without R_ADMIN perm are sorted in another section in staff_who, + so that people will not believe coders can handle adminhelps. + Absolucy, zeskorion: + - rscadd: Adds the Bluespace Compression Kit (based on Zams' implementation from + BeeStation) to the syndie uplink for 4 TC. It can be used to compress items + to fit in smaller slots, without compromising the functionality of the item. + This does not work on storage items tho (except for the briefcase launchpad, + which will lose its ability to function as a normal briefcase when compressed) + Gboster-0: + - rscadd: Contractors now can purchase an area pinpointer +2024-03-21: + Absolucy, LT3: + - code_imp: Changing security levels will only trigger the nightshift subsystem + if lighting changes are required. + - code_imp: Server wide admin announcements now use an alert box like other announcements. + - qol: Roundstart intercept report and security level announcements are combined + into a single announcement. + SeeBeeSee: + - balance: Kneecapped instakill electrical activity plants +2024-03-23: + KnigTheThrasher: + - bugfix: Fixed zombies being able to infect headless corpses (Including former + zombies) + - bugfix: 'Fixed bio armor being totally useless against zombies. Now it checks + how hurt your limb is: If it''s more than the bio armor value, you get infected. + THICKMATERIAL clothing guarantees at least 25 damage required to infect you, + non-thick clothing reduces effective defence by 25. In practice this means people + with MODsuits, biosuits will resist infection unless they''re pummeled into + crit, and wearing a firesuit will save you from the first few slashes.' + - bugfix: Fixed the bomb hood armor not having the same bio armor value as bomb + armor. + - qol: Added a message to the zed when they succesfully infect someone. + - code_imp: Turned some proc names into snake_case rather than, uh, nospacecase. +2024-03-25: + AlbertNanotracen: + - rscadd: Immunity scanner now shows symptoms for recorded diseases. + - balance: Aluxive has a stronger instant effect. + - balance: Aetericilide is effective as preventative medication but not much value + once infected. (Also its max strength was lowered to 3x base strength from 5x + base strength) + - bugfix: Retrovirus now utilizes its multiplier for its effects rather than its + constant max_multiplier. + DATA-xPUNGED, KnigTheThrasher: + - rscadd: You can now boop fellow crew members by targeting their mouth on help + mode, try it on your local clown! + - sound: Increased the volume of shuttle welcome sound because it was too quiet. + DexeeXI: + - rscdel: Virus extrapolators no longer spawn in l3 bioclosets or pathologist kits. +2024-03-26: + AlbertNanotracen: + - bugfix: Placing a mouse inside your chef hat will once more allow it to pilot + you around. + - rscadd: A player-controlled mouse inside your chef hat can compel you to perform + complex actions, such as flipping and spinning. You will obey because the mouse + knows better than you do. + - bugfix: Gunthers no longer kill Gubbucks instead of breeding with them + - bugfix: gutlunches will stop having too many children + - balance: gutlunches are no longer in the mining faction + wraith-54321: + - code_imp: added support for key based antag huds +2024-03-27: + Absolucy: + - bugfix: Fixed cigarettes not being smokeable without a space helmet + internals. + - bugfix: Fixed being unable to melee lavaland tendrils. + - balance: (Melbert) Rats are now 5x less likely to decide to eat a cable when idling. + (1%, down from 5%) + - rscadd: (Kapu) Lockers, crates, and machines no longer block click attempts in + adjacency checks. Basically, you can reach tables cornered between lockers/machines. + - qol: (Rhials) Ventcrawling mobs have a 1 second delay/warning before exiting the + ventilation. + - qol: (LT3) ID card linking now preloads your bank account number. + - bugfix: (Kapu) Blood once again appears as small drops instead of splatters during + minor bleeding. + - qol: (dieamond13) Gives roundstart prisoners a key memory of what their crime + is. + - balance: (Noodlecat) Heretic robes now have wound armor. + - balance: (Noodlecat) Heretic blades now have knife-level wound bonuses. + - bugfix: (Shadow-Quill) The CRAB-17 will now only take whole credits, as fractional + credits were found to be worth less. + - qol: (JohnFulpWillard) Health Analyzers now show embeds in bodyparts on examine. + - qol: (mc-oofert) Latejoining crew start with crowbars if arrivals enviromental + power is OFF. + - image: (SandPoot) Changed screentips icons to something a lot fancier unified + with the LMB / RMB text. + - qol: (SandPoot) There are accessibility preferences to disable this! Look for + "Screentip context with images" beside the other screentip preferences. + - rscadd: (Rhials) Nuclear Operatives, in an attempt to appeal to the more "tacticool" + members of their cause, have begun using callsigns to designate themselves. + Check your preferences to set your Operative Alias! + - qol: (Rhials) At the request of the more vain members of the cause, hair dye has + been added to the Operative Firebase dorms. + - qol: (carlarctg) Heretic runes no longer have every single transparent pixel set + to 1 alpha, to make it easier to click on objects. + - qol: (carlarctg) Clearing heretic runes with mansus grasp takes 0.4 seconds of + standing still, to prevent you from accidentally clearing it in combat. + - code_imp: (carlarctg) Added code for effect remover element to use a windup if + set. + - qol: (Momo8289) Cryotubes will now notify medbay if the patient within is dead, + and will eject them if auto is on. + - qol: (Momo8289) Cryotubes will now automatically turn on when a patient enters + it if auto is on, but you can no longer close the cryotube on yourself. + - qol: (LT3) TGUI will now wait longer trying to reconnect to a new round. + - qol: (Shroopy) Implanted HUDs can now be toggled on and off with an action. + - sound: (Tattle) nerfed the police whistle volume. + - bugfix: (carlarctg) Cauteries now have 'heat', like lighters, welders, etc. + - qol: (carlarctg) You can smoke with a space helmet as long as you have internals + on. + - qol: (LT3) Being connected to an IV now has a visual indicator. + - rscadd: (uaioy) Added 2 pocket quick equip keybinds. + - qol: (nikothedude) Departmental order consoles now alert their department via + radio when their cooldown expires. + - rscadd: (Thunder12345) Crewmembers arriving very late will not always have time + to finish their breakfast. + - bugfix: (Dawnseer) fixed an oversight - Made Goliath Cloak and Goliath Cloak Hood + fireproof. And Goliath hide. + - balance: (iwishforducks) Railings now only cost 2 rods and are much easier to + construct. But they can now be destroyed much easier and cut with wirecutters + without unwrenching. + - balance: (Melbert) If your server has non-human morgue cadavers enabled, you will + be guaranteed one human cadaver no matter what. + - balance: (Melbert) All maps now have an additional morgue cadaver roundstart. + - qol: (MTandi) You can fill microwave with stuff by hitting it with a box full + of stuff. + - balance: (Melbert) Body temperature from being lit on fire will soft cap at 1,200 + K. It will still increase beyond this, but with diminishing returns. For example, + at 5,000 K, fire will heat 67x weaker. + - sound: (carlarctg) Adds a sound effect for hypospray/medipen injections. Doesn't + affect sleepy pens. + - rscadd: (mc-oofert, Ghommie) added a new hallucination, your mother. + - refactor: Improved shuttle gibbing code, adding a new resistance flag, `SHUTTLE_CRUSH_PROOF`. + - bugfix: Immortality revival spectres can no longer be crushed by shuttles. + - rscadd: The ghost of Poly can no longer be shuttle-crushed, nor can anything incorporeal. + - qol: Antag/event token requests now time out after 5 minutes of inaction. + - admin: Improved the admin notification for token requests. + - sound: Added a sound whenever an token is rejected. + AlbertNanotracen: + - bugfix: Plants with no product defined will no longer have a chance to return + early on harvest. + Gboster, Kapu1178: + - qol: 'Gboster: made the asteroid magnet into a TGUI' + - rscadd: 'Kapu1178: The magnet now has a 60 second cooldown between uses.' + - bugfix: 'Kapu1178: Summoned asteroids are removed from the list of available asteroids.' + - bugfix: 'Kapu1178: Fixed a bug that allowed you to summon multiple asteroids at + once.' + KnigTheThrasher: + - rscadd: Blind support for booping + - rscadd: Chat message when someone boops you + - bugfix: Removed a duped door when meta rolls a sinularity engine +2024-03-28: + Absolucy: + - bugfix: Chameleon holsters, thermals, and sechuds can be locked with multitools, + like all other chameleon items. + - bugfix: Fix incorrect pixel_y shift after getting up, which resulted in the player + being shifted 6 pixels down. + - bugfix: fix modular computers (i.e hop's id console) being borked + DexeeXI: + - balance: spectral music items are halloween or badmin only. + Gboster-0: + - code_imp: PKA code got cleaned up + NicoDeLuna: + - rscadd: added harlequin boots + Rhials, Jolly-66, MrMelbert, Jacquerel, cnleth, Ghommie, MelokGleb and KREKS, McRamon: + - sound: Revolutionaries now have their own stinger that plays upon becoming that + antagonist. + - spellcheck: Changeling hallucination sting will now tell you it costs 10 chemicals. + It always did, but now its there. Cheers? + - bugfix: Ling Augmented Eyesight now no longer causes you to lose the effects of + your Meson glasses + - bugfix: Ling Augmented Eyesight now more consistently tracks the flash protection + / vulnerability it confers. + - qol: Changeling Emporium is now sorted alphabetically. + - qol: Changeling Emporium now has a search bar! + - refactor: Refactored display-ing of antag objectives in their UIs + - rscadd: Traitors, Changelings, Heretics, Wizards, Malfunctioning AIs, and Ninjas + can now all reject their original objectives and provide one of their own in + its place. A Heretic doing this will no longer be able to ascend. + - rscadd: '"Custom" objectives which aren''t mechanically tracked will no longer + report success or failure upon round end.' + - qol: Space Ninja spider charges will now display where they can be detonated when + examined, if you are a ninja. + - bugfix: Changeling tentacle and bloodchiller from xenobio will no longer stop + working if you have antimagic + - spellcheck: Replaced an irrelevant tip of the round about scars with a better + one + - rscadd: Added a new 0 cost passive changeling ability, the Defibrillator Grasp. + - rscadd: DNA sing is now no longer innate, but 0 cost, allowing changelings to + not take it if they don't plan on using it. + - balance: The Changeling Space Suit has been replaced by a new ability which makes + you passively spaceproof without replacing your clothing. + - admin: Editing the atmos sensitivity variables on a basic mob during the game + will now actually do something. + - rscadd: Added the daily (roundstart) message server key to the Chief Engineer's + memories. + - image: New sprites for changeling powers and items. Woooh. + - bugfix: Fix ling revival for full-dead lings + Tattle: + - image: removed a stray gray pixel from the milk containers + Tractor Mann: + - rscadd: Now thats what i call music! 22 new songs have been added to the bartenders + jukebox and lobby! +2024-03-29: + Absolucy: + - bugfix: The experimental cloner ghost poll now shows what the clone will actually + look like, rather than a nugget. + - bugfix: The experimental cloner should 100% work properly now. + - qol: Experimental cloners no longer delete records upon a successful clone, but + they will no longer start clones while autoprocessing is enabled either. + AlbertNanotracen: + - rscadd: Added a station version of sandy dirt floors. + - qol: Dirt in chicken pens can be crowbarred up and replaced. + - image: Added a new icon for the station version of the sandy dirt tile +2024-03-30: + Absolucy: + - bugfix: (Xander3359) Fix hack comms console/locate weakpoint objective showing + up multiple times + - bugfix: (Jacquerel) Traitors should generate with "free objective" less often, + and will once more be assigned to steal things. + - bugfix: (carlarctg) Fixed being unable to reimburse syndicate spawners via uplinks. + This includes nukie reinforcements, cyborgs, and holoparasite injectors. + - refactor: (carlarctg) Turned TC reimbursement into a bespoke element. + - spellcheck: (carlarctg) Tuned demon's blood message when there's no ghosts to + pick to be a little more understandable and sensible. +2024-03-31: + Absolucy: + - bugfix: Fixed double-encoded messages with AI holocalls. + Gboster-0: + - bugfix: fixed the area pinpointer maybe + The-Black-Screen: + - rscadd: adds an updated version of our BoxStation back into the game, also adds + the random bars and engines + - code_imp: changes `roomspawner.dm` to include BoxStation's random bars and engines + - config: changes `maps.txt` to include BoxStation diff --git a/html/changelogs/archive/2024-04.yml b/html/changelogs/archive/2024-04.yml new file mode 100644 index 000000000000..00d92a7b69be --- /dev/null +++ b/html/changelogs/archive/2024-04.yml @@ -0,0 +1,174 @@ +2024-04-01: + DexeeXI: + - balance: All Stations now have Preloaded Drone Dispensers! + - rscdel: removes an unneeded tip of the round + - bugfix: 'tram biodome bar: elevator now has a hole so it functions correctly' + - bugfix: missing vent/scrubber pipe on east end of tram replaced + - qol: syndie lavaland pathology now reimplemented, first pass. + The-Black-Screen: + - rscadd: added the new chemistry machines and cargo shelves. + - bugfix: fixed the modular computers, fixed the announcements function on appropriate + request consoles. + - code_imp: changed the map file paths of both `boxstation.dm` files in `monkestation/code/random_rooms/bars` + and `monkestation/code/random_rooms/engines`. + Yawet330: + - rscadd: Bloodsuckers Forced Evolution ability. + lizardqueenlexi, ChungusGamer666, LovliestPlant, KnigTheThrasher, MrMelbert: + - bugfix: Heads impaled on spears now render in the correct place on the tip, instead + of halfway down the shaft. + - bugfix: Blind personnel are no longer able to magically see heads impaled on spears + from a distance. + - rscadd: Added colorblindness as a mild brain trauma. + - rscadd: Stethoscopes may be used on the chest, groin, or extremities to assess + organ damage, blood level, and/or suffocation damage depending on the targeted + area. + - rscadd: Shining flashlights into the mouth or eyes of other players will additionally + assess brain health, suffocation damage, and/or blood level depending on the + targeted area. + - balance: Halves the duration of the flash effect from shining lights into players' + eyes (2s -> 1s). Use combat mode to get the full duration. + - bugfix: added combat mode/harm intent support for the previous pr + - balance: Blind people don't get alerted when someone in a cardboard box pops out + nearby +2024-04-02: + Absolucy: + - bugfix: (JohnFulpWillard) Time on servers hosted outside of the UK should now + properly have their timezone offset. + - bugfix: (FlufflesTheDog) Certain areas are now properly protected against grid + check. Namely the supermatter should consistently be protected. + - bugfix: (Ghommie) Fixes the sparring contract. You can now spar with no stakes + and just for fun. + - bugfix: (ChungusGamer666) Exotic blood types no longer persist through species + change if the new species does not have an exotic blood type. + - bugfix: (mc-oofert) You are now made a ghost faster if you get gibbed. + - bugfix: (AnturK) Fixes bioscramble picking the (unimplemented) base wing type. + - bugfix: (AnturK) Fixes setting prebuilt shutter ids with the multitool. + - bugfix: "Fixed revolutionaries winning resulting in ATTENTION [x \u221E]" + JohnFulpWillard: + - bugfix: The TEG now works again (still unobtainable by regular means though). + - bugfix: the TEG and its circulators can now be rotated counterclockwise again. + - refactor: The TEG now uses a TGUI interface rather than the old HTML one. +2024-04-03: + MilkForever: + - rscadd: Added the admin-only Waffles corporate MODsuit. + Tractor Mann: + - refactor: Jukebox Beacon Code has been refactored, changes to note is that jukeboxes + no longer deploy instantly and now come with a wrench. +2024-04-04: + Absolucy: + - bugfix: Fix sleeping carp not properly detecting combat mode, resulting in things + like not being able to normally grab people and always reflecting projectiles. + - bugfix: Airlock mapping helpers now work with windoors. +2024-04-05: + Absolucy: + - bugfix: Allow dot radio prefixes to also work with the tgui-say radio prefix display. + - rscadd: Potassium iodide can now be used to decontaminate items (i.e fill a fire + extinguisher or spray bottle with it, and spray it on green glowing items) + - bugfix: The revival policy message now only displays when you're actually revived + (i.e it'll no longer display after using a regenerative slime extract to simply + heal your wounds) + Absolucy, Watermelon914: + - refactor: Auxlua no longer uses the timer subsystem to get stuff done, so Lua + scripts shouldn't slow down timers anymore. + - bugfix: Fixed lua error logging. + - admin: Admins can now run lua files bigger than 36 KB by importing them directly. +2024-04-06: + Jacquerel: + - bugfix: Dismounting from a piggyback no longer allows you to phase through other + players. +2024-04-08: + Absolucy: + - qol: Added tinyfans to the solars airlocks on MetaStation. + - qol: Added catwalk covering to the flooring of solars areas on MetaStation. + - qol: 'All the solars panels on MetaStation are now actually deployed (consistent + with other maps), rather than requiring you to manually place them for 2 of + the solars. + + qol; Made that stupid weirdo Meta northwest solars make sense.' + - qol: Added catwalk covering to the SMES wiring output on MetaStation. + - balance: Borger artifacts no longer react if touched with a robotic limb. + - balance: Borger artifacts will now just turn your arm robotic the first time you + touch it. + - qol: Made the examine text for borger artifacts more obvious. + - bugfix: You can now properly surgically reattach an oozeling's head. + - balance: Lowered the weight of the gravity generator blackout event to 8 (from + 30), and capped it at 2 occurrences. + - balance: Lowered the weight of the radiation storm event to 5 (from 10), and capped + it at 1 occurrence. + - balance: All scrubber clog+overflow events now share the same occurrence counter. + - bugfix: You should no longer roll obsessed without being prompted for it first. + Absolucy, Thlumyn: + - rscadd: Oozelings and Slimepeople can now get wings from flight potions. + Bastian0930: + - bugfix: Rod of Asclepius can no longer be used with telepathy. The geneticist + responsible has been forced to roll a boulder for the rest of time. + DimWhat: + - image: Touched up both the worn and object sprites for ascots. + Gboster-0: + - rscadd: Added two new types of wiring to the youtool vendor, high-voltages no + longer seem scary if you just prepare + KittyNoodle: + - bugfix: fixes Aetericilide being useless. + MrMelbert: + - qol: Breathing cold air now has a particle effect associated, careful not to let + your glasses fog up. + - qol: Breathing cold air will now occasionally make your spaceman shiver. Brrr. + SeeBeeSee: + - rscadd: Added new honeydew melons that distill into honey, as well as slices for + a quick snack + The-Black-Screen: + - rscadd: added miscellaneous things around parts of the map. + - rscdel: removed all custom notes. + - bugfix: fixed the teg engine map file and miscellaneous things around parts of + the map. + - code_imp: changed the code in `monkestation/code/random_rooms/engines/boxstation.dm` + to re-enable the teg engine. + Tractor Mann: + - bugfix: fixed Rocket Jump Waltz in the jukebox, you can actually listen to it + end now hopefully. +2024-04-09: + DimWhat: + - bugfix: Simians no longer turn invisible when husked. + KnigTheThrasher: + - rscadd: Added a new reagent container (aka. I fixed the bitrunning beach bar) +2024-04-10: + JohnFulpWillard: + - bugfix: Malkavian bloodsuckers now whisper revelations again. +2024-04-12: + Absolucy: + - qol: Added balloon alerts whenever you start plunging something. + Rex9001: + - rscadd: A new honeydew specific achievement + - balance: You can now eat whilst wearing a horsemask +2024-04-13: + Absolucy: + - bugfix: Fixed the bug where your actions would be permanently slowed down after + wading through liquid. + - bugfix: Fix invalid events (with blank names) being considered to run. + AlbertNanotracen: + - rscadd: 'Mars celebrates the 250th anniversary of the Martian Concession this + year, and this has brought Martian cuisine to new heights of popularity. Find + a new selection of Martian foods and drinks available in your crafting menu + today! + + Port #77757' + - bugfix: wellcheers is now based on sanity rather than mood + - image: resprites martian cans + - image: adds inhands for martian cans and wellcheers + - image: minor tweaks to other cans + - spellcheck: 'updates wellcheers mood text + + Port #77562' + - bugfix: a few issues with Martian food + Bastian0930: + - bugfix: Bloodsuckers are unable to spam click the persuasion rack and lose all + their blood, as part of the new clan training. + - bugfix: Bloodsuckers will not torture basic mobs or animals, after a clan agreement + involving the Animal Rights Consortium. + dwasint: + - bugfix: Ensure deleted slimes are properly tracked, to prevent weird errors that + broke slime pen management consoles. + - bugfix: Fixed some wonky logic with liquid code. +2024-04-14: + KnigTheThrasher: + - rscadd: Added composters into every perma botany diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index 7405085c2409..10121115a625 100644 Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ diff --git a/icons/effects/footprints.dmi b/icons/effects/footprints.dmi index a98344abe41e..a00c6a0f780d 100644 Binary files a/icons/effects/footprints.dmi and b/icons/effects/footprints.dmi differ diff --git a/icons/effects/particles/smoke.dmi b/icons/effects/particles/smoke.dmi index 4a3239499b96..99123beeb59a 100644 Binary files a/icons/effects/particles/smoke.dmi and b/icons/effects/particles/smoke.dmi differ diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index 23570f8d9722..aa4eb88431df 100755 Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ diff --git a/icons/hud/screen_changeling.dmi b/icons/hud/screen_changeling.dmi index 61d3513cbfa3..c3bab062ac49 100644 Binary files a/icons/hud/screen_changeling.dmi and b/icons/hud/screen_changeling.dmi differ diff --git a/icons/mecha/mecha.dmi b/icons/mecha/mecha.dmi index 845b1cdf140d..24c7ec9f86f1 100644 Binary files a/icons/mecha/mecha.dmi and b/icons/mecha/mecha.dmi differ diff --git a/icons/mob/actions/actions_changeling.dmi b/icons/mob/actions/actions_changeling.dmi index 0969b03725e1..bb3634a1dde1 100644 Binary files a/icons/mob/actions/actions_changeling.dmi and b/icons/mob/actions/actions_changeling.dmi differ diff --git a/icons/mob/actions/backgrounds.dmi b/icons/mob/actions/backgrounds.dmi index 558045a0656b..c9aa15345388 100644 Binary files a/icons/mob/actions/backgrounds.dmi and b/icons/mob/actions/backgrounds.dmi differ diff --git a/icons/mob/clothing/accessories.dmi b/icons/mob/clothing/accessories.dmi index c51d64a625df..dbe0275bc8c0 100644 Binary files a/icons/mob/clothing/accessories.dmi and b/icons/mob/clothing/accessories.dmi differ diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi index f4776ffac48f..168443c8bd6a 100644 Binary files a/icons/mob/huds/hud.dmi and b/icons/mob/huds/hud.dmi differ diff --git a/icons/mob/inhands/antag/changeling_lefthand.dmi b/icons/mob/inhands/antag/changeling_lefthand.dmi index daf0e2fb3f62..a3723f8dab01 100644 Binary files a/icons/mob/inhands/antag/changeling_lefthand.dmi and b/icons/mob/inhands/antag/changeling_lefthand.dmi differ diff --git a/icons/mob/inhands/antag/changeling_righthand.dmi b/icons/mob/inhands/antag/changeling_righthand.dmi index aa2144c5962b..d3f320a38a9f 100644 Binary files a/icons/mob/inhands/antag/changeling_righthand.dmi and b/icons/mob/inhands/antag/changeling_righthand.dmi differ diff --git a/icons/mob/inhands/items/drinks_lefthand.dmi b/icons/mob/inhands/items/drinks_lefthand.dmi index 6d7cc042f772..fb2d9c22dd49 100644 Binary files a/icons/mob/inhands/items/drinks_lefthand.dmi and b/icons/mob/inhands/items/drinks_lefthand.dmi differ diff --git a/icons/mob/inhands/items/drinks_righthand.dmi b/icons/mob/inhands/items/drinks_righthand.dmi index 02756cb64483..13f9dc0a0264 100644 Binary files a/icons/mob/inhands/items/drinks_righthand.dmi and b/icons/mob/inhands/items/drinks_righthand.dmi differ diff --git a/icons/mob/landmarks.dmi b/icons/mob/landmarks.dmi index 607be1c0ccf0..b07ed7e09a72 100644 Binary files a/icons/mob/landmarks.dmi and b/icons/mob/landmarks.dmi differ diff --git a/icons/mob/silicon/ai.dmi b/icons/mob/silicon/ai.dmi index 4804cb5a67d3..fc7ed420c97e 100644 Binary files a/icons/mob/silicon/ai.dmi and b/icons/mob/silicon/ai.dmi differ diff --git a/icons/mob/simple/corgi_head.dmi b/icons/mob/simple/corgi_head.dmi index b582d0406f99..601cfb62fbbf 100644 Binary files a/icons/mob/simple/corgi_head.dmi and b/icons/mob/simple/corgi_head.dmi differ diff --git a/icons/mob/simple/lavaland/lavaland_monsters.dmi b/icons/mob/simple/lavaland/lavaland_monsters.dmi index 62f6f6a3fa1a..c796081a6414 100644 Binary files a/icons/mob/simple/lavaland/lavaland_monsters.dmi and b/icons/mob/simple/lavaland/lavaland_monsters.dmi differ diff --git a/icons/mob/simple/slugcats.dmi b/icons/mob/simple/slugcats.dmi new file mode 100644 index 000000000000..eed4a7437aef Binary files /dev/null and b/icons/mob/simple/slugcats.dmi differ diff --git a/icons/mob/species/human/emote_visuals.dmi b/icons/mob/species/human/emote_visuals.dmi index 66256491ea93..8a29603850f4 100644 Binary files a/icons/mob/species/human/emote_visuals.dmi and b/icons/mob/species/human/emote_visuals.dmi differ diff --git a/icons/mob/species/human/human_face.dmi b/icons/mob/species/human/human_face.dmi index 02960bb8859f..04d3f66cf6ac 100644 Binary files a/icons/mob/species/human/human_face.dmi and b/icons/mob/species/human/human_face.dmi differ diff --git a/icons/mob/species/wings.dmi b/icons/mob/species/wings.dmi index 0cc2b1224fae..bc0b870573e8 100644 Binary files a/icons/mob/species/wings.dmi and b/icons/mob/species/wings.dmi differ diff --git a/icons/obj/clothing/accessories.dmi b/icons/obj/clothing/accessories.dmi index 05a4a886a9bc..f130b71d3295 100644 Binary files a/icons/obj/clothing/accessories.dmi and b/icons/obj/clothing/accessories.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 2b6773c543d2..57beb052f917 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/drinks/bottles.dmi b/icons/obj/drinks/bottles.dmi index 6f3622179546..180275021f75 100644 Binary files a/icons/obj/drinks/bottles.dmi and b/icons/obj/drinks/bottles.dmi differ diff --git a/icons/obj/drinks/boxes.dmi b/icons/obj/drinks/boxes.dmi index 8ed76d9760ac..aca834722922 100644 Binary files a/icons/obj/drinks/boxes.dmi and b/icons/obj/drinks/boxes.dmi differ diff --git a/icons/obj/drinks/drink_effects.dmi b/icons/obj/drinks/drink_effects.dmi index 63bc699c9f5c..b0441f73f346 100644 Binary files a/icons/obj/drinks/drink_effects.dmi and b/icons/obj/drinks/drink_effects.dmi differ diff --git a/icons/obj/drinks/drinks.dmi b/icons/obj/drinks/drinks.dmi index add38550de25..4b966cb2db27 100644 Binary files a/icons/obj/drinks/drinks.dmi and b/icons/obj/drinks/drinks.dmi differ diff --git a/icons/obj/drinks/mixed_drinks.dmi b/icons/obj/drinks/mixed_drinks.dmi index 9d11040d0abc..e38df4890409 100644 Binary files a/icons/obj/drinks/mixed_drinks.dmi and b/icons/obj/drinks/mixed_drinks.dmi differ diff --git a/icons/obj/drinks/soda.dmi b/icons/obj/drinks/soda.dmi index dedca0ff89e5..f061e029c4dc 100644 Binary files a/icons/obj/drinks/soda.dmi and b/icons/obj/drinks/soda.dmi differ diff --git a/icons/obj/food/canned.dmi b/icons/obj/food/canned.dmi index 5f61b7e17967..97f66f2d5b5e 100644 Binary files a/icons/obj/food/canned.dmi and b/icons/obj/food/canned.dmi differ diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi index 3489068f4cbd..949c589225f0 100644 Binary files a/icons/obj/food/containers.dmi and b/icons/obj/food/containers.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 338e9b08f634..7bec955214fc 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/food/frozen_treats.dmi b/icons/obj/food/frozen_treats.dmi index 133d6de83a03..b5b91520e8ca 100644 Binary files a/icons/obj/food/frozen_treats.dmi and b/icons/obj/food/frozen_treats.dmi differ diff --git a/icons/obj/food/martian.dmi b/icons/obj/food/martian.dmi new file mode 100644 index 000000000000..79efcd1813d5 Binary files /dev/null and b/icons/obj/food/martian.dmi differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi deleted file mode 100644 index 6e007dc4fa59..000000000000 Binary files a/icons/obj/janitor.dmi and /dev/null differ diff --git a/icons/obj/power_cond/layer_cable.dmi b/icons/obj/power_cond/layer_cable.dmi index 058c2f2a83b7..76092e8fd6b6 100644 Binary files a/icons/obj/power_cond/layer_cable.dmi and b/icons/obj/power_cond/layer_cable.dmi differ diff --git a/icons/obj/service/janitor.dmi b/icons/obj/service/janitor.dmi new file mode 100644 index 000000000000..8c73a99b4164 Binary files /dev/null and b/icons/obj/service/janitor.dmi differ diff --git a/icons/obj/storage/storage.dmi b/icons/obj/storage/storage.dmi index 848f8326c844..db627027de76 100644 Binary files a/icons/obj/storage/storage.dmi and b/icons/obj/storage/storage.dmi differ diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index 3358d1e3ea5f..93ab67c804cc 100644 Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ diff --git a/icons/obj/weapons/changeling_items.dmi b/icons/obj/weapons/changeling_items.dmi index 4c26dfea49ef..ca577e6d2b28 100644 Binary files a/icons/obj/weapons/changeling_items.dmi and b/icons/obj/weapons/changeling_items.dmi differ diff --git a/icons/obj/weapons/guns/projectiles.dmi b/icons/obj/weapons/guns/projectiles.dmi index 3cac4bb44013..e464b61ff89c 100644 Binary files a/icons/obj/weapons/guns/projectiles.dmi and b/icons/obj/weapons/guns/projectiles.dmi differ diff --git a/icons/ui_icons/achievements/achievements.dmi b/icons/ui_icons/achievements/achievements.dmi index eb8ca71f3941..a206cff1acf9 100644 Binary files a/icons/ui_icons/achievements/achievements.dmi and b/icons/ui_icons/achievements/achievements.dmi differ diff --git a/icons/ui_icons/screentips/cursor_hints.dmi b/icons/ui_icons/screentips/cursor_hints.dmi new file mode 100644 index 000000000000..2fdbb2d04d50 Binary files /dev/null and b/icons/ui_icons/screentips/cursor_hints.dmi differ diff --git a/interface/fonts.dm b/interface/fonts.dm deleted file mode 100644 index 0bfc9c728c7c..000000000000 --- a/interface/fonts.dm +++ /dev/null @@ -1,10 +0,0 @@ -/// A font datum, it exists to define a custom font to use in a span style later. -/datum/font - /// Font name, just so people know what to put in their span style. - var/name - /// The font file we link to. - var/font_family - -/datum/font/vcr_osd_mono - name = "VCR OSD Mono" - font_family = 'interface/VCR_OSD_Mono.ttf' diff --git a/interface/fonts/Grand9K_Pixel.ttf b/interface/fonts/Grand9K_Pixel.ttf new file mode 100644 index 000000000000..cf6fdf44e2ec Binary files /dev/null and b/interface/fonts/Grand9K_Pixel.ttf differ diff --git a/interface/fonts/Pixellari.ttf b/interface/fonts/Pixellari.ttf new file mode 100644 index 000000000000..5a3a3c2b1104 Binary files /dev/null and b/interface/fonts/Pixellari.ttf differ diff --git a/interface/fonts/SpessFont.ttf b/interface/fonts/SpessFont.ttf new file mode 100644 index 000000000000..8f7c7e08d0d8 Binary files /dev/null and b/interface/fonts/SpessFont.ttf differ diff --git a/interface/fonts/TinyUnicode.ttf b/interface/fonts/TinyUnicode.ttf new file mode 100644 index 000000000000..74d0d3e386e6 Binary files /dev/null and b/interface/fonts/TinyUnicode.ttf differ diff --git a/interface/VCR_OSD_Mono.ttf b/interface/fonts/VCR_OSD_Mono.ttf similarity index 100% rename from interface/VCR_OSD_Mono.ttf rename to interface/fonts/VCR_OSD_Mono.ttf diff --git a/interface/fonts/fonts_datum.dm b/interface/fonts/fonts_datum.dm new file mode 100644 index 000000000000..a346706d7fa0 --- /dev/null +++ b/interface/fonts/fonts_datum.dm @@ -0,0 +1,78 @@ +/// A font datum, it exists to define a custom font to use in a span style later. +/datum/font + /// Font name, just so people know what to put in their span style. + var/name + /// The font file we link to. + var/font_family + + /// Font features and metrics + /// Generated by Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus) + /// Note: these variable names have been changed, so you can't straight copy/paste from dmifontsplus.exe + + /// list of font size/spacing metrics + var/list/metrics + /// total height of a line + var/height + /// distance above baseline (including whitespace) + var/ascent + /// distance below baseline + var/descent + /// average character width + var/average_width + /// maximum character width + var/max_width + /// extra width, such as from italics, for a line + var/overhang + /// internal leading vertical space, for accent marks + var/in_leading + /// external leading vertical space, just plain blank + var/ex_leading + /// default character (for undefined chars) + var/default_character + /// first character in metrics + var/start + /// last character in metrics + var/end + +/// Get font metrics +/// From Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus) +/datum/font/proc/get_metrics(text, flags, first_line) + . = 0 + var/longest = 0 + if(!length(text)) + return + + var/i = 1 + var/idx + while(i <= length(text)) + var/character = text2ascii(text, i++) + if(character <= 10) + if(character <= 7) + . += character // spacers for justification + + if(character <= 9) + continue // soft-break chars + + if(. && idx && !(flags & INCLUDE_AC)) + . -= max(metrics[idx + 3], 0) + + longest = max(longest, . + first_line) + . = 0 + first_line = 0 + idx = 0 + continue + + idx = (character - start) * 3 + if(idx <= 0 || idx >= metrics.len) + idx = (default_character - start) * 3 + + if(!. && !(flags & INCLUDE_AC)) + . -= metrics[idx + 1] + . += metrics[idx + 1] + metrics[idx + 2] + metrics[idx +3] + + if(. && idx && !(flags & INCLUDE_AC)) + . -= max(metrics[idx + 3], 0) + + . = max(. + first_line, longest) + if(. > 0) + . += overhang diff --git a/interface/fonts/grand_9k.dm b/interface/fonts/grand_9k.dm new file mode 100644 index 000000000000..7993d307bcbe --- /dev/null +++ b/interface/fonts/grand_9k.dm @@ -0,0 +1,253 @@ +/// For clean results on map, use only sizing pt, multiples of 6: 6pt 12pt 18pt 24pt etc. - Not for use with px sizing +/// Can be used in TGUI etc, px sizing is pt / 0.75. 6pt = 8px, 12pt = 16px etc. + +/// Base font +/datum/font/grand9k + name = "Grand9K Pixel" + font_family = 'interface/fonts/Grand9K_Pixel.ttf' + +/// For icon overlays +/// Grand9K 6pt metrics generated using Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus) +/// Note: these variable names have been changed, so you can't straight copy/paste from dmifontsplus.exe +/datum/font/grand9k/size_6pt + name = "Grand9K Pixel 6pt" + height = 12 + ascent = 10 + descent = 2 + average_width = 4 + max_width = 9 + overhang = 0 + in_leading = 4 + ex_leading = 1 + default_character = 31 + start = 30 + end = 255 + metrics = list( + 0, 5, 1, // char 30 + 0, 5, 1, // char 31 + 0, 1, 1, // char 32 + 0, 1, 1, // char 33 + 0, 3, 1, // char 34 + 0, 6, 1, // char 35 + 0, 5, 1, // char 36 + 0, 7, 1, // char 37 + 0, 5, 1, // char 38 + 0, 1, 1, // char 39 + 0, 3, 1, // char 40 + 0, 3, 1, // char 41 + 0, 5, 1, // char 42 + 0, 5, 1, // char 43 + 0, 1, 1, // char 44 + 0, 4, 1, // char 45 + 0, 1, 1, // char 46 + 0, 3, 1, // char 47 + 0, 5, 1, // char 48 + 0, 2, 1, // char 49 + 0, 5, 1, // char 50 + 0, 4, 1, // char 51 + 0, 5, 1, // char 52 + 0, 5, 1, // char 53 + 0, 5, 1, // char 54 + 0, 5, 1, // char 55 + 0, 5, 1, // char 56 + 0, 5, 1, // char 57 + 0, 1, 1, // char 58 + 0, 1, 1, // char 59 + 0, 4, 1, // char 60 + 0, 4, 1, // char 61 + 0, 4, 1, // char 62 + 0, 4, 1, // char 63 + 0, 7, 1, // char 64 + 0, 5, 1, // char 65 + 0, 5, 1, // char 66 + 0, 4, 1, // char 67 + 0, 5, 1, // char 68 + 0, 4, 1, // char 69 + 0, 4, 1, // char 70 + 0, 5, 1, // char 71 + 0, 5, 1, // char 72 + 0, 1, 1, // char 73 + 0, 5, 1, // char 74 + 0, 5, 1, // char 75 + 0, 5, 1, // char 76 + 0, 5, 1, // char 77 + 0, 5, 1, // char 78 + 0, 5, 1, // char 79 + 0, 5, 1, // char 80 + 0, 6, 1, // char 81 + 0, 5, 1, // char 82 + 0, 5, 1, // char 83 + 0, 5, 1, // char 84 + 0, 5, 1, // char 85 + 0, 5, 1, // char 86 + 0, 5, 1, // char 87 + 0, 5, 1, // char 88 + 0, 5, 1, // char 89 + 0, 5, 1, // char 90 + 0, 3, 1, // char 91 + 0, 3, 1, // char 92 + 0, 3, 1, // char 93 + 0, 5, 1, // char 94 + 0, 4, 0, // char 95 + 0, 2, 1, // char 96 + 0, 4, 1, // char 97 + 0, 4, 1, // char 98 + 0, 3, 1, // char 99 + 0, 4, 1, // char 100 + 0, 4, 1, // char 101 + 0, 4, 1, // char 102 + 0, 4, 1, // char 103 + 0, 4, 1, // char 104 + 0, 1, 1, // char 105 + 0, 3, 1, // char 106 + 0, 4, 1, // char 107 + 0, 1, 1, // char 108 + 0, 5, 1, // char 109 + 0, 4, 1, // char 110 + 0, 4, 1, // char 111 + 0, 4, 1, // char 112 + 0, 4, 1, // char 113 + 0, 4, 1, // char 114 + 0, 4, 1, // char 115 + 0, 4, 1, // char 116 + 0, 4, 1, // char 117 + 0, 5, 1, // char 118 + 0, 5, 1, // char 119 + 0, 5, 1, // char 120 + 0, 4, 1, // char 121 + 0, 5, 1, // char 122 + 0, 4, 1, // char 123 + 0, 1, 1, // char 124 + 0, 4, 1, // char 125 + 0, 6, 1, // char 126 + 0, 5, 1, // char 127 + 0, 5, 1, // char 128 + 0, 5, 1, // char 129 + 0, 1, 1, // char 130 + 0, 5, 1, // char 131 + 0, 3, 1, // char 132 + 0, 5, 1, // char 133 + 0, 5, 1, // char 134 + 0, 5, 1, // char 135 + 0, 5, 1, // char 136 + 0, 5, 1, // char 137 + 0, 5, 1, // char 138 + 0, 3, 1, // char 139 + 0, 6, 1, // char 140 + 0, 5, 1, // char 141 + 0, 5, 1, // char 142 + 0, 5, 1, // char 143 + 0, 5, 1, // char 144 + 0, 1, 1, // char 145 + 0, 1, 1, // char 146 + 0, 3, 1, // char 147 + 0, 3, 1, // char 148 + 0, 1, 1, // char 149 + 0, 5, 1, // char 150 + 0, 5, 1, // char 151 + 0, 5, 1, // char 152 + 0, 8, 1, // char 153 + 0, 4, 1, // char 154 + 0, 3, 1, // char 155 + 0, 5, 1, // char 156 + 0, 5, 1, // char 157 + 0, 5, 1, // char 158 + 0, 5, 1, // char 159 + 0, 1, 1, // char 160 + 0, 1, 1, // char 161 + 0, 4, 1, // char 162 + 0, 5, 1, // char 163 + 0, 5, 1, // char 164 + 0, 5, 1, // char 165 + 0, 1, 1, // char 166 + 0, 5, 1, // char 167 + 0, 3, 1, // char 168 + 0, 8, 1, // char 169 + 0, 5, 1, // char 170 + 0, 6, 1, // char 171 + 0, 4, 1, // char 172 + 0, 5, 1, // char 173 + 0, 8, 1, // char 174 + 0, 5, 1, // char 175 + 0, 3, 1, // char 176 + 0, 5, 1, // char 177 + 0, 5, 1, // char 178 + 0, 5, 1, // char 179 + 0, 2, 1, // char 180 + 0, 4, 1, // char 181 + 0, 5, 1, // char 182 + 0, 1, 1, // char 183 + 0, 2, 1, // char 184 + 0, 5, 1, // char 185 + 0, 5, 1, // char 186 + 0, 6, 1, // char 187 + 0, 5, 1, // char 188 + 0, 5, 1, // char 189 + 0, 5, 1, // char 190 + 0, 4, 1, // char 191 + 0, 5, 1, // char 192 + 0, 5, 1, // char 193 + 0, 5, 1, // char 194 + 0, 6, 0, // char 195 + 0, 5, 1, // char 196 + 0, 5, 1, // char 197 + 0, 6, 1, // char 198 + 0, 4, 1, // char 199 + 0, 4, 1, // char 200 + 0, 4, 1, // char 201 + 0, 4, 1, // char 202 + 0, 4, 1, // char 203 + 1, 2, 0, // char 204 + 0, 2, 1, // char 205 + 0, 3, 0, // char 206 + 0, 3, 0, // char 207 + 0, 6, 1, // char 208 + 0, 6, 0, // char 209 + 0, 5, 1, // char 210 + 0, 5, 1, // char 211 + 0, 5, 1, // char 212 + 0, 6, 1, // char 213 + 0, 5, 1, // char 214 + 0, 5, 1, // char 215 + 0, 5, 1, // char 216 + 0, 5, 1, // char 217 + 0, 5, 1, // char 218 + 0, 5, 1, // char 219 + 0, 5, 1, // char 220 + 0, 5, 1, // char 221 + 0, 5, 1, // char 222 + 0, 5, 1, // char 223 + 0, 4, 1, // char 224 + 0, 4, 1, // char 225 + 0, 4, 1, // char 226 + 0, 4, 1, // char 227 + 0, 4, 1, // char 228 + 0, 4, 1, // char 229 + 0, 5, 1, // char 230 + 0, 3, 1, // char 231 + 0, 4, 1, // char 232 + 0, 4, 1, // char 233 + 0, 4, 1, // char 234 + 0, 4, 1, // char 235 + 0, 2, 1, // char 236 + 1, 2, 0, // char 237 + 0, 3, 0, // char 238 + 0, 3, 0, // char 239 + 0, 5, 0, // char 240 + 0, 4, 1, // char 241 + 0, 4, 1, // char 242 + 0, 4, 1, // char 243 + 0, 4, 1, // char 244 + 0, 4, 1, // char 245 + 0, 4, 1, // char 246 + 0, 5, 1, // char 247 + 0, 4, 1, // char 248 + 0, 4, 1, // char 249 + 0, 4, 1, // char 250 + 0, 4, 1, // char 251 + 0, 4, 1, // char 252 + 0, 4, 1, // char 253 + 0, 4, 1, // char 254 + 0, 4, 1, // char 255 + 226 + ) diff --git a/interface/fonts/license.txt b/interface/fonts/license.txt new file mode 100644 index 000000000000..9aa70fbac2a9 --- /dev/null +++ b/interface/fonts/license.txt @@ -0,0 +1,13 @@ +Grand9K Pixel created by Jayvee Enaguas. Licensed under Creative Commons Attribution 4.0 International (CC BY 4.0) +(https://creativecommons.org/licenses/by/4.0/) (https://www.dafont.com/grand9k-pixel.font) + +Pixellari created by Zacchary Dempsey-Plante. Website indicates free for commercial use. +(https://www.dafont.com/pixellari.font?fpp=200) + +Spess Font created by MTandi (discord) for /tg/station. + +Tiny Unicode created by Jakob Riedle/DuffsDevice. Website indicates free for commercial use. +(https://fontmeme.com/fonts/tiny-unicode-font/) + +VCR OSD Mono created by Riciery Leal/mrmanet. Website indicates 100% free, author confirms it's free for all to use. +(https://www.dafont.com/font-comment.php?file=vcr_osd_mono) diff --git a/interface/fonts/pixellari.dm b/interface/fonts/pixellari.dm new file mode 100644 index 000000000000..24fcd1961fec --- /dev/null +++ b/interface/fonts/pixellari.dm @@ -0,0 +1,252 @@ +/// For clean results on map, use only sizing pt, multiples of 12: 12pt 24pt 48pt etc. - Not for use with px sizing +/// Can be used in TGUI etc, px sizing is pt / 0.75. 12pt = 16px, 24pt = 32px etc. + +/// Base font +/datum/font/pixellari + name = "Pixellari" + font_family = 'interface/fonts/Pixellari.ttf' + +/// For icon overlays +/// Pixellari 12pt metrics generated using Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus) +/// Note: these variable names have been changed, so you can't straight copy/paste from dmifontsplus.exe +/datum/font/pixellari/size_12pt + name = "Pixellari 12pt" + height = 16 + ascent = 12 + descent = 4 + average_width = 7 + max_width = 15 + overhang = 0 + in_leading = 0 + ex_leading = 1 + default_character = 31 + start = 30 + end = 255 + metrics = list(\ + 1, 5, 0, /* char 30 */ \ + 1, 5, 0, /* char 31 */ \ + 0, 1, 4, /* char 32 */ \ + 1, 2, 1, /* char 33 */ \ + 1, 5, 1, /* char 34 */ \ + 0, 8, 1, /* char 35 */ \ + 2, 6, 1, /* char 36 */ \ + 0, 13, 1, /* char 37 */ \ + 1, 8, 1, /* char 38 */ \ + 1, 2, 1, /* char 39 */ \ + 1, 3, 1, /* char 40 */ \ + 2, 3, 1, /* char 41 */ \ + 0, 6, 1, /* char 42 */ \ + 1, 6, 1, /* char 43 */ \ + 1, 2, 1, /* char 44 */ \ + 1, 6, 1, /* char 45 */ \ + 1, 2, 1, /* char 46 */ \ + 0, 6, 1, /* char 47 */ \ + 1, 7, 1, /* char 48 */ \ + 2, 6, 1, /* char 49 */ \ + 1, 6, 1, /* char 50 */ \ + 1, 6, 1, /* char 51 */ \ + 1, 7, 1, /* char 52 */ \ + 1, 6, 1, /* char 53 */ \ + 1, 6, 1, /* char 54 */ \ + 1, 7, 1, /* char 55 */ \ + 1, 6, 1, /* char 56 */ \ + 1, 6, 1, /* char 57 */ \ + 1, 2, 1, /* char 58 */ \ + 1, 2, 1, /* char 59 */ \ + 0, 10, 1, /* char 60 */ \ + 1, 6, 1, /* char 61 */ \ + 0, 10, 1, /* char 62 */ \ + 1, 6, 1, /* char 63 */ \ + 1, 12, 1, /* char 64 */ \ + 1, 8, 1, /* char 65 */ \ + 1, 8, 1, /* char 66 */ \ + 2, 7, 1, /* char 67 */ \ + 2, 8, 1, /* char 68 */ \ + 2, 6, 1, /* char 69 */ \ + 2, 6, 1, /* char 70 */ \ + 2, 7, 1, /* char 71 */ \ + 1, 8, 1, /* char 72 */ \ + 1, 4, 1, /* char 73 */ \ + 0, 7, 1, /* char 74 */ \ + 1, 8, 1, /* char 75 */ \ + 1, 6, 1, /* char 76 */ \ + 1, 10, 1, /* char 77 */ \ + 1, 9, 1, /* char 78 */ \ + 2, 8, 1, /* char 79 */ \ + 1, 7, 1, /* char 80 */ \ + 2, 9, 1, /* char 81 */ \ + 1, 8, 1, /* char 82 */ \ + 1, 8, 1, /* char 83 */ \ + 1, 8, 1, /* char 84 */ \ + 2, 8, 1, /* char 85 */ \ + 2, 8, 1, /* char 86 */ \ + 1, 10, 1, /* char 87 */ \ + 1, 8, 1, /* char 88 */ \ + 1, 8, 1, /* char 89 */ \ + 0, 10, 1, /* char 90 */ \ + 1, 3, 1, /* char 91 */ \ + 0, 6, 1, /* char 92 */ \ + 2, 3, 1, /* char 93 */ \ + 0, 7, 1, /* char 94 */ \ + 0, 8, 1, /* char 95 */ \ + 1, 3, 1, /* char 96 */ \ + 1, 6, 1, /* char 97 */ \ + 1, 7, 1, /* char 98 */ \ + 1, 6, 1, /* char 99 */ \ + 1, 7, 1, /* char 100 */ \ + 1, 6, 1, /* char 101 */ \ + 1, 4, 1, /* char 102 */ \ + 1, 7, 1, /* char 103 */ \ + 1, 7, 1, /* char 104 */ \ + 1, 2, 1, /* char 105 */ \ + -1, 4, 1, /* char 106 */ \ + 0, 7, 1, /* char 107 */ \ + 1, 2, 1, /* char 108 */ \ + 1, 10, 1, /* char 109 */ \ + 1, 6, 1, /* char 110 */ \ + 1, 6, 1, /* char 111 */ \ + 1, 7, 1, /* char 112 */ \ + 1, 7, 1, /* char 113 */ \ + 1, 6, 1, /* char 114 */ \ + 1, 6, 1, /* char 115 */ \ + 0, 4, 1, /* char 116 */ \ + 1, 6, 1, /* char 117 */ \ + 1, 6, 1, /* char 118 */ \ + 1, 10, 1, /* char 119 */ \ + 1, 6, 1, /* char 120 */ \ + 1, 6, 1, /* char 121 */ \ + 1, 6, 1, /* char 122 */ \ + 0, 5, 1, /* char 123 */ \ + 1, 2, 1, /* char 124 */ \ + 0, 5, 1, /* char 125 */ \ + 1, 8, 1, /* char 126 */ \ + 1, 5, 0, /* char 127 */ \ + 1, 8, 1, /* char 128 */ \ + 1, 5, 0, /* char 129 */ \ + 1, 5, 0, /* char 130 */ \ + 1, 5, 0, /* char 131 */ \ + 1, 5, 0, /* char 132 */ \ + 1, 5, 0, /* char 133 */ \ + 1, 5, 0, /* char 134 */ \ + 1, 5, 0, /* char 135 */ \ + 1, 5, 0, /* char 136 */ \ + 1, 5, 0, /* char 137 */ \ + 1, 8, 1, /* char 138 */ \ + 1, 5, 0, /* char 139 */ \ + 0, 14, 1, /* char 140 */ \ + 1, 5, 0, /* char 141 */ \ + 0, 10, 1, /* char 142 */ \ + 1, 5, 0, /* char 143 */ \ + 1, 5, 0, /* char 144 */ \ + 1, 5, 0, /* char 145 */ \ + 1, 5, 0, /* char 146 */ \ + 1, 5, 0, /* char 147 */ \ + 1, 5, 0, /* char 148 */ \ + 1, 5, 0, /* char 149 */ \ + 1, 5, 0, /* char 150 */ \ + 1, 5, 0, /* char 151 */ \ + 1, 5, 0, /* char 152 */ \ + 1, 5, 0, /* char 153 */ \ + 1, 6, 1, /* char 154 */ \ + 1, 5, 0, /* char 155 */ \ + 1, 11, 1, /* char 156 */ \ + 1, 5, 0, /* char 157 */ \ + 1, 6, 1, /* char 158 */ \ + 1, 8, 1, /* char 159 */ \ + 0, 1, 4, /* char 160 */ \ + 1, 2, 1, /* char 161 */ \ + 1, 6, 1, /* char 162 */ \ + 0, 8, 1, /* char 163 */ \ + 0, 9, 1, /* char 164 */ \ + 1, 8, 1, /* char 165 */ \ + 1, 2, 1, /* char 166 */ \ + 1, 7, 1, /* char 167 */ \ + 0, 5, 1, /* char 168 */ \ + -1, 12, 1, /* char 169 */ \ + 0, 6, 1, /* char 170 */ \ + 0, 8, 1, /* char 171 */ \ + 1, 8, 1, /* char 172 */ \ + 1, 5, 0, /* char 173 */ \ + -1, 12, 1, /* char 174 */ \ + 2, 4, 1, /* char 175 */ \ + 0, 6, 1, /* char 176 */ \ + 1, 6, 1, /* char 177 */ \ + 0, 5, 1, /* char 178 */ \ + 0, 5, 1, /* char 179 */ \ + 1, 3, 1, /* char 180 */ \ + 1, 6, 1, /* char 181 */ \ + 1, 7, 1, /* char 182 */ \ + 1, 2, 1, /* char 183 */ \ + 1, 3, 1, /* char 184 */ \ + 1, 4, 1, /* char 185 */ \ + 0, 6, 1, /* char 186 */ \ + 0, 8, 1, /* char 187 */ \ + 1, 13, 1, /* char 188 */ \ + 1, 12, 1, /* char 189 */ \ + 0, 13, 1, /* char 190 */ \ + 1, 6, 1, /* char 191 */ \ + 1, 8, 1, /* char 192 */ \ + 1, 8, 1, /* char 193 */ \ + 1, 8, 1, /* char 194 */ \ + 1, 8, 1, /* char 195 */ \ + 1, 8, 1, /* char 196 */ \ + 1, 8, 1, /* char 197 */ \ + 0, 13, 1, /* char 198 */ \ + 2, 7, 1, /* char 199 */ \ + 2, 6, 1, /* char 200 */ \ + 2, 6, 1, /* char 201 */ \ + 2, 6, 1, /* char 202 */ \ + 2, 6, 1, /* char 203 */ \ + 1, 4, 1, /* char 204 */ \ + 1, 4, 1, /* char 205 */ \ + 1, 4, 1, /* char 206 */ \ + 1, 4, 1, /* char 207 */ \ + 0, 10, 1, /* char 208 */ \ + 1, 9, 1, /* char 209 */ \ + 2, 8, 1, /* char 210 */ \ + 2, 8, 1, /* char 211 */ \ + 2, 8, 1, /* char 212 */ \ + 2, 8, 1, /* char 213 */ \ + 2, 8, 1, /* char 214 */ \ + 1, 6, 1, /* char 215 */ \ + -2, 14, 1, /* char 216 */ \ + 2, 8, 1, /* char 217 */ \ + 2, 8, 1, /* char 218 */ \ + 2, 8, 1, /* char 219 */ \ + 2, 8, 1, /* char 220 */ \ + 1, 8, 1, /* char 221 */ \ + 1, 8, 1, /* char 222 */ \ + 1, 8, 1, /* char 223 */ \ + 1, 6, 1, /* char 224 */ \ + 1, 6, 1, /* char 225 */ \ + 1, 6, 1, /* char 226 */ \ + 1, 6, 1, /* char 227 */ \ + 1, 6, 1, /* char 228 */ \ + 1, 6, 1, /* char 229 */ \ + 1, 11, 1, /* char 230 */ \ + 1, 6, 1, /* char 231 */ \ + 1, 6, 1, /* char 232 */ \ + 1, 6, 1, /* char 233 */ \ + 1, 6, 1, /* char 234 */ \ + 1, 6, 1, /* char 235 */ \ + 1, 2, 1, /* char 236 */ \ + 1, 2, 1, /* char 237 */ \ + 0, 4, 1, /* char 238 */ \ + 0, 4, 1, /* char 239 */ \ + 1, 7, 1, /* char 240 */ \ + 1, 6, 1, /* char 241 */ \ + 1, 6, 1, /* char 242 */ \ + 1, 6, 1, /* char 243 */ \ + 1, 6, 1, /* char 244 */ \ + 1, 6, 1, /* char 245 */ \ + 1, 6, 1, /* char 246 */ \ + 1, 6, 1, /* char 247 */ \ + 0, 10, 1, /* char 248 */ \ + 1, 6, 1, /* char 249 */ \ + 1, 6, 1, /* char 250 */ \ + 1, 6, 1, /* char 251 */ \ + 1, 6, 1, /* char 252 */ \ + 1, 6, 1, /* char 253 */ \ + 1, 8, 1, /* char 254 */ \ + 1, 6, 1, /* char 255 */ \ + 226) diff --git a/interface/fonts/spess_font.dm b/interface/fonts/spess_font.dm new file mode 100644 index 000000000000..07e8ea5b3ba6 --- /dev/null +++ b/interface/fonts/spess_font.dm @@ -0,0 +1,252 @@ +/// For clean results on map, use only sizing pt, multiples of 6: 6t 12pt 18pt etc. - Not for use with px sizing +/// Can be used in TGUI etc, px sizing is pt / 0.75. 12pt = 16px, 24pt = 32px etc. + +/// Base font +/datum/font/spessfont + name = "Spess Font" + font_family = 'interface/fonts/SpessFont.ttf' + +/// For icon overlays +/// Spess Font 6pt metrics generated using Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus) +/// Note: these variable names have been changed, so you can't straight copy/paste from dmifontsplus.exe +/datum/font/spessfont/size_6pt + name = "Spess Font 6pt" + height = 8 + ascent = 6 + descent = 2 + average_width = 4 + max_width = 6 + overhang = 0 + in_leading = 0 + ex_leading = 0 + default_character = 31 + start = 30 + end = 255 + metrics = list(\ + 0, 1, 0, /* char 30 */ \ + 0, 1, 0, /* char 31 */ \ + 0, 1, 1, /* char 32 */ \ + 0, 1, 1, /* char 33 */ \ + 0, 3, 1, /* char 34 */ \ + 0, 5, 1, /* char 35 */ \ + 0, 3, 1, /* char 36 */ \ + 0, 5, 1, /* char 37 */ \ + 0, 5, 1, /* char 38 */ \ + 0, 1, 1, /* char 39 */ \ + 0, 2, 1, /* char 40 */ \ + 0, 2, 1, /* char 41 */ \ + 0, 3, 1, /* char 42 */ \ + 0, 3, 1, /* char 43 */ \ + 0, 1, 1, /* char 44 */ \ + 0, 3, 1, /* char 45 */ \ + 0, 1, 1, /* char 46 */ \ + 0, 3, 1, /* char 47 */ \ + 0, 4, 1, /* char 48 */ \ + 0, 2, 1, /* char 49 */ \ + 0, 4, 1, /* char 50 */ \ + 0, 4, 1, /* char 51 */ \ + 0, 4, 1, /* char 52 */ \ + 0, 4, 1, /* char 53 */ \ + 0, 4, 1, /* char 54 */ \ + 0, 4, 1, /* char 55 */ \ + 0, 4, 1, /* char 56 */ \ + 0, 4, 1, /* char 57 */ \ + 0, 1, 1, /* char 58 */ \ + 0, 1, 1, /* char 59 */ \ + 0, 3, 1, /* char 60 */ \ + 0, 3, 1, /* char 61 */ \ + 0, 3, 1, /* char 62 */ \ + 0, 3, 1, /* char 63 */ \ + 0, 4, 1, /* char 64 */ \ + 0, 4, 1, /* char 65 */ \ + 0, 4, 1, /* char 66 */ \ + 0, 4, 1, /* char 67 */ \ + 0, 4, 1, /* char 68 */ \ + 0, 4, 1, /* char 69 */ \ + 0, 4, 1, /* char 70 */ \ + 0, 4, 1, /* char 71 */ \ + 0, 4, 1, /* char 72 */ \ + 0, 3, 1, /* char 73 */ \ + 0, 4, 1, /* char 74 */ \ + 0, 4, 1, /* char 75 */ \ + 0, 4, 1, /* char 76 */ \ + 0, 5, 1, /* char 77 */ \ + 0, 4, 1, /* char 78 */ \ + 0, 4, 1, /* char 79 */ \ + 0, 4, 1, /* char 80 */ \ + 0, 4, 1, /* char 81 */ \ + 0, 4, 1, /* char 82 */ \ + 0, 4, 1, /* char 83 */ \ + 0, 5, 1, /* char 84 */ \ + 0, 4, 1, /* char 85 */ \ + 0, 4, 1, /* char 86 */ \ + 0, 5, 1, /* char 87 */ \ + 0, 5, 1, /* char 88 */ \ + 0, 4, 1, /* char 89 */ \ + 0, 4, 1, /* char 90 */ \ + 0, 2, 1, /* char 91 */ \ + 0, 3, 1, /* char 92 */ \ + 0, 2, 1, /* char 93 */ \ + 0, 3, 1, /* char 94 */ \ + 0, 4, 1, /* char 95 */ \ + 0, 2, 1, /* char 96 */ \ + 0, 3, 1, /* char 97 */ \ + 0, 4, 1, /* char 98 */ \ + 0, 3, 1, /* char 99 */ \ + 0, 4, 1, /* char 100 */ \ + 0, 3, 1, /* char 101 */ \ + 0, 2, 1, /* char 102 */ \ + 0, 4, 1, /* char 103 */ \ + 0, 3, 1, /* char 104 */ \ + 0, 1, 1, /* char 105 */ \ + 0, 1, 1, /* char 106 */ \ + 0, 3, 1, /* char 107 */ \ + 0, 1, 1, /* char 108 */ \ + 0, 5, 1, /* char 109 */ \ + 0, 3, 1, /* char 110 */ \ + 0, 4, 1, /* char 111 */ \ + 0, 4, 1, /* char 112 */ \ + 0, 4, 1, /* char 113 */ \ + 0, 2, 1, /* char 114 */ \ + 0, 3, 1, /* char 115 */ \ + 0, 2, 1, /* char 116 */ \ + 0, 3, 1, /* char 117 */ \ + 0, 3, 1, /* char 118 */ \ + 0, 5, 1, /* char 119 */ \ + 0, 3, 1, /* char 120 */ \ + 0, 3, 1, /* char 121 */ \ + 0, 3, 1, /* char 122 */ \ + 0, 3, 1, /* char 123 */ \ + 0, 1, 1, /* char 124 */ \ + 0, 3, 1, /* char 125 */ \ + 0, 4, 1, /* char 126 */ \ + 0, 1, 0, /* char 127 */ \ + 0, 1, 0, /* char 128 */ \ + 0, 1, 0, /* char 129 */ \ + 0, 1, 0, /* char 130 */ \ + 0, 1, 0, /* char 131 */ \ + 0, 1, 0, /* char 132 */ \ + 0, 1, 0, /* char 133 */ \ + 0, 1, 0, /* char 134 */ \ + 0, 1, 0, /* char 135 */ \ + 0, 1, 0, /* char 136 */ \ + 0, 1, 0, /* char 137 */ \ + 0, 1, 0, /* char 138 */ \ + 0, 1, 0, /* char 139 */ \ + 0, 1, 0, /* char 140 */ \ + 0, 1, 0, /* char 141 */ \ + 0, 1, 0, /* char 142 */ \ + 0, 1, 0, /* char 143 */ \ + 0, 1, 0, /* char 144 */ \ + 0, 1, 0, /* char 145 */ \ + 0, 1, 0, /* char 146 */ \ + 0, 1, 0, /* char 147 */ \ + 0, 1, 0, /* char 148 */ \ + 0, 1, 0, /* char 149 */ \ + 0, 1, 0, /* char 150 */ \ + 0, 1, 0, /* char 151 */ \ + 0, 1, 0, /* char 152 */ \ + 0, 1, 0, /* char 153 */ \ + 0, 1, 0, /* char 154 */ \ + 0, 1, 0, /* char 155 */ \ + 0, 1, 0, /* char 156 */ \ + 0, 1, 0, /* char 157 */ \ + 0, 1, 0, /* char 158 */ \ + 0, 1, 0, /* char 159 */ \ + 0, 1, 0, /* char 160 */ \ + 0, 1, 0, /* char 161 */ \ + 0, 1, 0, /* char 162 */ \ + 0, 1, 0, /* char 163 */ \ + 0, 1, 0, /* char 164 */ \ + 0, 1, 0, /* char 165 */ \ + 0, 1, 0, /* char 166 */ \ + 0, 1, 0, /* char 167 */ \ + 0, 1, 0, /* char 168 */ \ + 0, 1, 0, /* char 169 */ \ + 0, 1, 0, /* char 170 */ \ + 0, 1, 0, /* char 171 */ \ + 0, 1, 0, /* char 172 */ \ + 0, 1, 0, /* char 173 */ \ + 0, 1, 0, /* char 174 */ \ + 0, 1, 0, /* char 175 */ \ + 0, 1, 0, /* char 176 */ \ + 0, 1, 0, /* char 177 */ \ + 0, 1, 0, /* char 178 */ \ + 0, 1, 0, /* char 179 */ \ + 0, 1, 0, /* char 180 */ \ + 0, 1, 0, /* char 181 */ \ + 0, 1, 0, /* char 182 */ \ + 0, 1, 0, /* char 183 */ \ + 0, 1, 0, /* char 184 */ \ + 0, 1, 0, /* char 185 */ \ + 0, 1, 0, /* char 186 */ \ + 0, 1, 0, /* char 187 */ \ + 0, 1, 0, /* char 188 */ \ + 0, 1, 0, /* char 189 */ \ + 0, 1, 0, /* char 190 */ \ + 0, 1, 0, /* char 191 */ \ + 0, 1, 0, /* char 192 */ \ + 0, 1, 0, /* char 193 */ \ + 0, 1, 0, /* char 194 */ \ + 0, 1, 0, /* char 195 */ \ + 0, 1, 0, /* char 196 */ \ + 0, 1, 0, /* char 197 */ \ + 0, 1, 0, /* char 198 */ \ + 0, 1, 0, /* char 199 */ \ + 0, 1, 0, /* char 200 */ \ + 0, 1, 0, /* char 201 */ \ + 0, 1, 0, /* char 202 */ \ + 0, 1, 0, /* char 203 */ \ + 0, 1, 0, /* char 204 */ \ + 0, 1, 0, /* char 205 */ \ + 0, 1, 0, /* char 206 */ \ + 0, 1, 0, /* char 207 */ \ + 0, 1, 0, /* char 208 */ \ + 0, 1, 0, /* char 209 */ \ + 0, 1, 0, /* char 210 */ \ + 0, 1, 0, /* char 211 */ \ + 0, 1, 0, /* char 212 */ \ + 0, 1, 0, /* char 213 */ \ + 0, 1, 0, /* char 214 */ \ + 0, 1, 0, /* char 215 */ \ + 0, 1, 0, /* char 216 */ \ + 0, 1, 0, /* char 217 */ \ + 0, 1, 0, /* char 218 */ \ + 0, 1, 0, /* char 219 */ \ + 0, 1, 0, /* char 220 */ \ + 0, 1, 0, /* char 221 */ \ + 0, 1, 0, /* char 222 */ \ + 0, 1, 0, /* char 223 */ \ + 0, 1, 0, /* char 224 */ \ + 0, 1, 0, /* char 225 */ \ + 0, 1, 0, /* char 226 */ \ + 0, 1, 0, /* char 227 */ \ + 0, 1, 0, /* char 228 */ \ + 0, 1, 0, /* char 229 */ \ + 0, 1, 0, /* char 230 */ \ + 0, 1, 0, /* char 231 */ \ + 0, 1, 0, /* char 232 */ \ + 0, 1, 0, /* char 233 */ \ + 0, 1, 0, /* char 234 */ \ + 0, 1, 0, /* char 235 */ \ + 0, 1, 0, /* char 236 */ \ + 0, 1, 0, /* char 237 */ \ + 0, 1, 0, /* char 238 */ \ + 0, 1, 0, /* char 239 */ \ + 0, 1, 0, /* char 240 */ \ + 0, 1, 0, /* char 241 */ \ + 0, 1, 0, /* char 242 */ \ + 0, 1, 0, /* char 243 */ \ + 0, 1, 0, /* char 244 */ \ + 0, 1, 0, /* char 245 */ \ + 0, 1, 0, /* char 246 */ \ + 0, 1, 0, /* char 247 */ \ + 0, 1, 0, /* char 248 */ \ + 0, 1, 0, /* char 249 */ \ + 0, 1, 0, /* char 250 */ \ + 0, 1, 0, /* char 251 */ \ + 0, 1, 0, /* char 252 */ \ + 0, 1, 0, /* char 253 */ \ + 0, 1, 0, /* char 254 */ \ + 0, 1, 0, /* char 255 */ \ + 226) diff --git a/interface/fonts/tiny_unicode.dm b/interface/fonts/tiny_unicode.dm new file mode 100644 index 000000000000..d6af265d5182 --- /dev/null +++ b/interface/fonts/tiny_unicode.dm @@ -0,0 +1,253 @@ +/// For clean results on map, use only sizing pt, multiples of 12: 12pt 24pt 48pt etc. - Not for use with px sizing +/// Can be used in TGUI etc, px sizing is pt / 0.75. 12pt = 16px, 24pt = 32px etc. + +/// Base font +/datum/font/tiny_unicode + name = "TinyUnicode" + font_family = 'interface/fonts/TinyUnicode.ttf' + +/// For icon overlays +/// TinyUnicode 12pt metrics generated using Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus) +/// Note: these variable names have been changed, so you can't straight copy/paste from dmifontsplus.exe +/datum/font/tiny_unicode/size_12pt + name = "TinyUnicode 12pt" + height = 13 + ascent = 11 + descent = 2 + average_width = 5 + max_width = 11 + overhang = 0 + in_leading = -3 + ex_leading = 1 + default_character = 31 + start = 30 + end = 255 + metrics = list( + 1, 5, 0, // char 30 + 1, 5, 0, // char 31 + 0, 1, 4, // char 32 + 0, 1, 1, // char 33 + 0, 3, 1, // char 34 + 0, 5, 1, // char 35 + 0, 4, 1, // char 36 + 0, 3, 1, // char 37 + 0, 5, 1, // char 38 + 0, 1, 1, // char 39 + 0, 2, 1, // char 40 + 0, 2, 1, // char 41 + 0, 3, 1, // char 42 + 0, 3, 1, // char 43 + 0, 2, 1, // char 44 + 0, 3, 1, // char 45 + 0, 1, 1, // char 46 + 0, 3, 1, // char 47 + 0, 4, 1, // char 48 + 0, 2, 1, // char 49 + 0, 4, 1, // char 50 + 0, 4, 1, // char 51 + 0, 4, 1, // char 52 + 0, 4, 1, // char 53 + 0, 4, 1, // char 54 + 0, 4, 1, // char 55 + 0, 4, 1, // char 56 + 0, 4, 1, // char 57 + 0, 1, 1, // char 58 + 0, 2, 1, // char 59 + 0, 2, 1, // char 60 + 0, 4, 1, // char 61 + 0, 2, 1, // char 62 + 0, 4, 1, // char 63 + 0, 7, 1, // char 64 + 0, 4, 1, // char 65 + 0, 4, 1, // char 66 + 0, 3, 1, // char 67 + 0, 4, 1, // char 68 + 0, 3, 1, // char 69 + 0, 3, 1, // char 70 + 0, 4, 1, // char 71 + 0, 4, 1, // char 72 + 0, 3, 1, // char 73 + 0, 4, 1, // char 74 + 0, 4, 1, // char 75 + 0, 3, 1, // char 76 + 0, 5, 1, // char 77 + 0, 4, 1, // char 78 + 0, 4, 1, // char 79 + 0, 4, 1, // char 80 + 0, 4, 1, // char 81 + 0, 4, 1, // char 82 + 0, 4, 1, // char 83 + 0, 3, 1, // char 84 + 0, 4, 1, // char 85 + 0, 4, 1, // char 86 + 0, 5, 1, // char 87 + 0, 4, 1, // char 88 + 0, 4, 1, // char 89 + 0, 3, 1, // char 90 + 0, 2, 1, // char 91 + 0, 3, 1, // char 92 + 0, 2, 1, // char 93 + 0, 3, 1, // char 94 + 0, 5, 1, // char 95 + 0, 2, 1, // char 96 + 0, 4, 1, // char 97 + 0, 4, 1, // char 98 + 0, 3, 1, // char 99 + 0, 4, 1, // char 100 + 0, 4, 1, // char 101 + 0, 3, 1, // char 102 + 0, 4, 1, // char 103 + 0, 4, 1, // char 104 + 0, 1, 1, // char 105 + 0, 2, 1, // char 106 + 0, 4, 1, // char 107 + 0, 1, 1, // char 108 + 0, 5, 1, // char 109 + 0, 4, 1, // char 110 + 0, 4, 1, // char 111 + 0, 4, 1, // char 112 + 0, 4, 1, // char 113 + 0, 3, 1, // char 114 + 0, 4, 1, // char 115 + 0, 3, 1, // char 116 + 0, 4, 1, // char 117 + 0, 4, 1, // char 118 + 0, 5, 1, // char 119 + 0, 3, 1, // char 120 + 0, 4, 1, // char 121 + 0, 4, 1, // char 122 + 0, 3, 1, // char 123 + 0, 1, 1, // char 124 + 0, 3, 1, // char 125 + 0, 5, 1, // char 126 + 1, 5, 0, // char 127 + 0, 4, 1, // char 128 + 1, 5, 0, // char 129 + 1, 5, 0, // char 130 + 1, 5, 0, // char 131 + 1, 5, 0, // char 132 + 1, 5, 0, // char 133 + 1, 5, 0, // char 134 + 1, 5, 0, // char 135 + 1, 5, 0, // char 136 + 0, 5, 1, // char 137 + 1, 5, 0, // char 138 + 1, 5, 0, // char 139 + 0, 6, 1, // char 140 + 1, 5, 0, // char 141 + 1, 5, 0, // char 142 + 1, 5, 0, // char 143 + 1, 5, 0, // char 144 + 1, 5, 0, // char 145 + 1, 5, 0, // char 146 + 1, 5, 0, // char 147 + 1, 5, 0, // char 148 + 0, 2, 1, // char 149 + 1, 5, 0, // char 150 + 1, 5, 0, // char 151 + 1, 5, 0, // char 152 + 0, 4, 1, // char 153 + 1, 5, 0, // char 154 + 1, 5, 0, // char 155 + 1, 5, 0, // char 156 + 1, 5, 0, // char 157 + 1, 5, 0, // char 158 + 0, 4, 1, // char 159 + 1, 5, 0, // char 160 + 0, 1, 1, // char 161 + 0, 4, 1, // char 162 + 0, 4, 1, // char 163 + 0, 5, 1, // char 164 + 0, 3, 1, // char 165 + 0, 1, 1, // char 166 + 0, 4, 1, // char 167 + 0, 3, 1, // char 168 + 0, 2, 1, // char 169 + 0, 8, 1, // char 170 + 0, 4, 1, // char 171 + 0, 4, 1, // char 172 + 1, 5, 0, // char 173 + 0, 2, 1, // char 174 + 0, 4, 1, // char 175 + 0, 3, 1, // char 176 + 0, 3, 1, // char 177 + 0, 2, 1, // char 178 + 0, 2, 1, // char 179 + 0, 2, 1, // char 180 + 0, 4, 1, // char 181 + 0, 5, 1, // char 182 + 1, 1, 1, // char 183 + 0, 8, 1, // char 184 + 0, 2, 1, // char 185 + 0, 2, 1, // char 186 + 0, 4, 1, // char 187 + 0, 7, 1, // char 188 + 0, 8, 1, // char 189 + 0, 8, 1, // char 190 + 0, 4, 1, // char 191 + 0, 4, 1, // char 192 + 0, 4, 1, // char 193 + 0, 4, 1, // char 194 + 0, 4, 1, // char 195 + 0, 4, 1, // char 196 + 0, 4, 1, // char 197 + 0, 6, 1, // char 198 + 0, 3, 1, // char 199 + 0, 3, 1, // char 200 + 0, 3, 1, // char 201 + 0, 3, 1, // char 202 + 0, 3, 1, // char 203 + 0, 3, 1, // char 204 + 0, 3, 1, // char 205 + 0, 3, 1, // char 206 + 0, 3, 1, // char 207 + 0, 10, 1, // char 208 + 0, 4, 1, // char 209 + 0, 4, 1, // char 210 + 0, 4, 1, // char 211 + 0, 4, 1, // char 212 + 0, 4, 1, // char 213 + 0, 4, 1, // char 214 + 0, 3, 1, // char 215 + 0, 5, 1, // char 216 + 0, 4, 1, // char 217 + 0, 4, 1, // char 218 + 0, 4, 1, // char 219 + 0, 4, 1, // char 220 + 0, 4, 1, // char 221 + 0, 3, 1, // char 222 + 0, 3, 1, // char 223 + 0, 4, 1, // char 224 + 0, 4, 1, // char 225 + 0, 4, 1, // char 226 + 0, 4, 1, // char 227 + 0, 4, 1, // char 228 + 0, 4, 1, // char 229 + 0, 7, 1, // char 230 + 0, 3, 1, // char 231 + 0, 4, 1, // char 232 + 0, 4, 1, // char 233 + 0, 4, 1, // char 234 + 0, 4, 1, // char 235 + 0, 2, 1, // char 236 + 0, 2, 1, // char 237 + 0, 3, 1, // char 238 + 0, 3, 1, // char 239 + 0, 5, 1, // char 240 + 0, 4, 1, // char 241 + 0, 4, 1, // char 242 + 0, 4, 1, // char 243 + 0, 4, 1, // char 244 + 0, 4, 1, // char 245 + 0, 4, 1, // char 246 + 0, 5, 1, // char 247 + 0, 4, 1, // char 248 + 0, 4, 1, // char 249 + 0, 4, 1, // char 250 + 0, 4, 1, // char 251 + 0, 4, 1, // char 252 + 0, 4, 1, // char 253 + 0, 10, 1, // char 254 + 0, 4, 1, // char 255 + 226 + ) diff --git a/interface/fonts/vcr_osd_mono.dm b/interface/fonts/vcr_osd_mono.dm new file mode 100644 index 000000000000..301d90d2f7ea --- /dev/null +++ b/interface/fonts/vcr_osd_mono.dm @@ -0,0 +1,3 @@ +/datum/font/vcr_osd_mono + name = "VCR OSD Mono" + font_family = 'interface/fonts/VCR_OSD_Mono.ttf' diff --git a/interface/license.txt b/interface/license.txt deleted file mode 100644 index 5f74403c50af..000000000000 --- a/interface/license.txt +++ /dev/null @@ -1,2 +0,0 @@ -VCR OSD Mono created by Riciery Leal/mrmanet. Website indicates 100% free, author confirms it's free for all to use. -(https://www.dafont.com/font-comment.php?file=vcr_osd_mono) diff --git a/interface/skin.dmf b/interface/skin.dmf index 8ab3258f9a6b..58cf103fb029 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -10,21 +10,21 @@ macro "default" menu "menu" - elem + elem name = "&File" command = "" saved-params = "is-checked" - elem + elem name = "&Quick screenshot\tF2" command = ".screenshot auto" category = "&File" saved-params = "is-checked" - elem + elem name = "&Save screenshot as...\tShift+F2" command = ".screenshot" category = "&File" saved-params = "is-checked" - elem + elem name = "" command = "" category = "&File" @@ -34,7 +34,7 @@ menu "menu" command = ".reconnect" category = "&File" saved-params = "is-checked" - elem + elem name = "&Quit\tAlt-F4" command = ".quit" category = "&File" @@ -43,16 +43,27 @@ menu "menu" name = "&Help" command = "" saved-params = "is-checked" - elem + elem name = "&Admin Help\tF1" command = "adminhelp" category = "&Help" saved-params = "is-checked" - elem + elem name = "&Hotkeys" command = "Hotkeys-Help" category = "&Help" saved-params = "is-checked" + elem + name = "Refresh TGUI" + command = "refresh-tgui" + category = "&Help" + saved-params = "is-checked" + elem + name = "Fix Chat" + command = "fix-chat" + category = "&Help" + saved-params = "is-checked" + window "mainwindow" elem "mainwindow" @@ -110,23 +121,24 @@ window "mapwindow" size = 640x480 anchor1 = 0,0 anchor2 = 100,100 - font-family = "Arial" - font-size = 7 + font-family = "Grand9K Pixel" + font-size = 6pt is-default = true right-click = true saved-params = "zoom;letterbox;zoom-mode" - style = ".center { text-align: center; } .maptext { font-family: 'Small Fonts'; font-size: 7px; -dm-text-outline: 1px black; color: white; } .command_headset { font-weight: bold;\tfont-size: 8px; } .small { font-size: 6px; } .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .greentext { color: #00FF00; font-size: 7px; } .redtext { color: #FF0000; font-size: 7px; } .clown { color: #FF69Bf; font-size: 7px; font-weight: bold; } .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; } .italics { font-size: 6px; }" + style = ".center { text-align: center; } .maptext { font-family: 'Grand9K Pixel'; font-size: 6pt; -dm-text-outline: 1px black; color: white; line-height: 1.0; } .command_headset { font-weight: bold; } .context { font-family: 'Pixellari'; font-size: 12pt; -dm-text-outline: 1px black; } .subcontext { font-family: 'TinyUnicode'; font-size: 12pt; line-height: 0.75; } .small { font-family: 'Spess Font'; font-size: 6pt; line-height: 1.4; } .big { font-family: 'Pixellari'; font-size: 12pt; } .reallybig { font-size: 12pt; } .extremelybig { font-size: 12pt; } .greentext { color: #00FF00; font-size: 6pt; } .redtext { color: #FF0000; font-size: 6pt; } .clown { color: #FF69BF; font-weight: bold; } .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; } .italics { font-family: 'Spess Font'; font-size: 6pt; line-height: 1.4; }" elem "status_bar" type = LABEL pos = 0,464 size = 280x16 anchor1 = 0,100 - is-visible = true - text = "" - align = left - background-color = #222222 + anchor2 = -1,-1 text-color = #ffffff + background-color = #222222 border = line + saved-params = "" + text = "" + align = left window "infowindow" elem "infowindow" @@ -209,11 +221,8 @@ window "outputwindow" size = 640x480 anchor1 = -1,-1 anchor2 = -1,-1 - background-color = none saved-params = "pos;size;is-minimized;is-maximized" is-pane = true - outer-size = 656x538 - inner-size = 640x499 elem "input" type = INPUT pos = 2,460 @@ -229,7 +238,6 @@ window "outputwindow" size = 40x20 anchor1 = 100,100 anchor2 = -1,-1 - background-color = none border = line saved-params = "is-checked" text = "OOC" @@ -242,7 +250,6 @@ window "outputwindow" size = 40x20 anchor1 = 100,100 anchor2 = -1,-1 - background-color = none border = line saved-params = "is-checked" text = "Say" @@ -255,7 +262,6 @@ window "outputwindow" size = 40x20 anchor1 = 100,100 anchor2 = -1,-1 - background-color = none border = line saved-params = "is-checked" text = "Me" @@ -341,7 +347,6 @@ window "statwindow" size = 1x1 anchor1 = -1,-1 anchor2 = -1,-1 - background-color = none is-visible = false saved-params = "" diff --git a/lua/SS13.lua b/lua/SS13.lua index d9c208edfebd..a3cef0f60522 100644 --- a/lua/SS13.lua +++ b/lua/SS13.lua @@ -1,187 +1,10 @@ -local SS13 = {} - -SS13.SSlua = dm.global_vars.vars.SSlua - -SS13.global_proc = "some_magic_bullshit" - -for _, state in SS13.SSlua.vars.states do - if state.vars.internal_id == dm.state_id then - SS13.state = state - break - end -end - -function SS13.istype(thing, type) - return dm.global_proc("_istype", thing, dm.global_proc("_text2path", type)) == 1 -end - -function SS13.new(type, ...) - local datum = dm.global_proc("_new", type, { ... }) - local references = SS13.state.vars.references - references:add(datum) - return datum -end - -function SS13.await(thing_to_call, proc_to_call, ...) - if not SS13.istype(thing_to_call, "/datum") then - thing_to_call = SS13.global_proc - end - if thing_to_call == SS13.global_proc then - proc_to_call = "/proc/" .. proc_to_call - end - local promise = SS13.new("/datum/auxtools_promise", thing_to_call, proc_to_call, ...) - local promise_vars = promise.vars - while promise_vars.status == 0 do - sleep() - end - local return_value, runtime_message = promise_vars.return_value, promise_vars.runtime_message - dm.global_proc("qdel", promise) - return return_value, runtime_message -end - -function SS13.wait(time, timer) - local callback = SS13.new("/datum/callback", SS13.SSlua, "queue_resume", SS13.state, __next_yield_index) - local timedevent = dm.global_proc("_addtimer", callback, time * 10, 8, timer, debug.info(1, "sl")) - coroutine.yield() - dm.global_proc("deltimer", timedevent, timer) - dm.global_proc("qdel", callback) -end - -function SS13.register_signal(datum, signal, func, make_easy_clear_function) - if not SS13.signal_handlers then - SS13.signal_handlers = {} - end - if not SS13.istype(datum, "/datum") then - return - end - if not SS13.signal_handlers[datum] then - SS13.signal_handlers[datum] = {} - end - if signal == "_cleanup" then - return - end - if not SS13.signal_handlers[datum][signal] then - SS13.signal_handlers[datum][signal] = {} - end - local callback = SS13.new("/datum/callback", SS13.state, "call_function_return_first") - callback:call_proc("RegisterSignal", datum, signal, "Invoke") - local path = { "SS13", "signal_handlers", dm.global_proc("WEAKREF", datum), signal, dm.global_proc("WEAKREF", callback), "func" } - callback.vars.arguments = { path } - if not SS13.signal_handlers[datum]["_cleanup"] then - local cleanup_path = { "SS13", "signal_handlers", dm.global_proc("WEAKREF", datum), "_cleanup", "func" } - local cleanup_callback = SS13.new("/datum/callback", SS13.state, "call_function_return_first", cleanup_path) - cleanup_callback:call_proc("RegisterSignal", datum, "parent_qdeleting", "Invoke") - SS13.signal_handlers[datum]["_cleanup"] = { - func = function(datum) - SS13.signal_handler_cleanup(datum) - dm.global_proc("qdel", cleanup_callback) - end, - callback = cleanup_callback, - } - end - if signal == "parent_qdeleting" then --We want to make sure that the cleanup function is the very last signal handler called. - local comp_lookup = datum.vars.comp_lookup - if comp_lookup then - local lookup_for_signal = comp_lookup.entries.parent_qdeleting - if lookup_for_signal and not SS13.istype(lookup_for_signal, "/datum") then - local cleanup_callback_index = - dm.global_proc("_list_find", lookup_for_signal, SS13.signal_handlers[datum]["_cleanup"].callback) - if cleanup_callback_index ~= 0 and cleanup_callback_index ~= #comp_lookup then - dm.global_proc("_list_swap", lookup_for_signal, cleanup_callback_index, #lookup_for_signal) - end - end - end - end - SS13.signal_handlers[datum][signal][callback] = { func = func, callback = callback } - if make_easy_clear_function then - local clear_function_name = "clear_signal_" .. tostring(datum) .. "_" .. signal .. "_" .. tostring(callback) - SS13[clear_function_name] = function() - if callback then - SS13.unregister_signal(datum, signal, callback) - end - SS13[clear_function_name] = nil - end - end - return callback -end - -function SS13.unregister_signal(datum, signal, callback) - local function clear_handler(handler_info) - if not handler_info then - return - end - if not handler_info.callback then - return - end - local handler_callback = handler_info.callback - handler_callback:call_proc("UnregisterSignal", datum, signal) - dm.global_proc("qdel", handler_callback) - end - - if not SS13.signal_handlers then - return - end - - local function clear_easy_clear_function(callback_to_clear) - local clear_function_name = "clear_signal_" .. tostring(datum) .. "_" .. signal .. "_" .. tostring(callback_to_clear) - SS13[clear_function_name] = nil - end - - if not SS13.signal_handlers[datum] then - return - end - if signal == "_cleanup" then - return - end - if not SS13.signal_handlers[datum][signal] then - return - end - - if not callback then - for handler_key, handler_info in SS13.signal_handlers[datum][signal] do - clear_easy_clear_function(handler_key) - clear_handler(handler_info) - end - SS13.signal_handlers[datum][signal] = nil - else - if not SS13.istype(callback, "/datum/callback") then - return - end - clear_easy_clear_function(callback) - clear_handler(SS13.signal_handlers[datum][signal][callback]) - SS13.signal_handlers[datum][signal][callback] = nil - end -end - -function SS13.signal_handler_cleanup(datum) - if not SS13.signal_handlers then - return - end - if not SS13.signal_handlers[datum] then - return - end - - for signal, _ in SS13.signal_handlers[datum] do - SS13.unregister_signal(datum, signal) - end - - SS13.signal_handlers[datum] = nil -end - -function SS13.set_timeout(time, func, timer) - if not SS13.timeouts then - SS13.timeouts = {} - end - local callback = SS13.new("/datum/callback", SS13.state, "call_function") - local timedevent = dm.global_proc("_addtimer", callback, time * 10, 8, timer, debug.info(1, "sl")) - SS13.timeouts[callback] = function() - SS13.timeouts[callback] = nil - dm.global_proc("deltimer", timedevent, timer) - dm.global_proc("qdel", callback) - func() - end - local path = { "SS13", "timeouts", dm.global_proc("WEAKREF", callback) } - callback.vars.arguments = { path } -end +local SS13 = require("SS13_base") +local timer = require("timer") + +SS13.wait = timer.wait +SS13.set_timeout = timer.set_timeout +SS13.start_loop = timer.start_loop +SS13.end_loop = timer.end_loop +SS13.stop_all_loops = timer.stop_all_loops return SS13 diff --git a/lua/SS13_base.lua b/lua/SS13_base.lua new file mode 100644 index 000000000000..ddacb345fd5c --- /dev/null +++ b/lua/SS13_base.lua @@ -0,0 +1,193 @@ +local SS13 = {} + +__SS13_signal_handlers = __SS13_signal_handlers or {} + +SS13.SSlua = dm.global_vars.vars.SSlua + +SS13.global_proc = "some_magic_bullshit" + +for _, state in SS13.SSlua.vars.states do + if state.vars.internal_id == dm.state_id then + SS13.state = state + break + end +end + +function SS13.get_runner_ckey() + return SS13.state:get_var("ckey_last_runner") +end + +function SS13.get_runner_client() + return dm.global_vars:get_var("GLOB"):get_var("directory"):get(SS13.get_runner_ckey()) +end + +function SS13.istype(thing, type) + return dm.global_proc("_istype", thing, dm.global_proc("_text2path", type)) == 1 +end + +function SS13.new(type, ...) + local datum = SS13.new_untracked(type, table.unpack({...})) + if datum then + local references = SS13.state.vars.references + references:add(datum) + SS13.state:call_proc("clear_on_delete", datum) + return datum + end +end + +function SS13.type(string_type) + return dm.global_proc("_text2path", string_type) +end + +function SS13.qdel(datum) + if SS13.is_valid(datum) then + dm.global_proc("qdel", datum) + return true + end + return false +end + +function SS13.new_untracked(type, ...) + return dm.global_proc("_new", type, { ... }) +end + +function SS13.is_valid(datum) + if datum and not datum:is_null() and not datum:get_var("gc_destroyed") then + return true + end + return false +end + +function SS13.await(thing_to_call, proc_to_call, ...) + if not SS13.istype(thing_to_call, "/datum") then + thing_to_call = SS13.global_proc + end + if thing_to_call == SS13.global_proc then + proc_to_call = "/proc/" .. proc_to_call + end + local promise = SS13.new("/datum/auxtools_promise", thing_to_call, proc_to_call, ...) + local promise_vars = promise.vars + while promise_vars.status == 0 do + sleep() + end + local return_value, runtime_message = promise_vars.return_value, promise_vars.runtime_message + SS13.stop_tracking(promise) + return return_value, runtime_message +end + +function SS13.register_signal(datum, signal, func, make_easy_clear_function) + if not SS13.istype(datum, "/datum") then + return + end + if not __SS13_signal_handlers[datum] then + __SS13_signal_handlers[datum] = {} + end + if signal == "_cleanup" then + return + end + if not __SS13_signal_handlers[datum][signal] then + __SS13_signal_handlers[datum][signal] = {} + end + local callback = SS13.new("/datum/callback", SS13.state, "call_function_return_first") + callback:call_proc("RegisterSignal", datum, signal, "Invoke") + local path = { "__SS13_signal_handlers", dm.global_proc("WEAKREF", datum), signal, dm.global_proc("WEAKREF", callback), "func" } + callback.vars.arguments = { path } + if not __SS13_signal_handlers[datum]["_cleanup"] then + local cleanup_path = { "__SS13_signal_handlers", dm.global_proc("WEAKREF", datum), "_cleanup", "func" } + local cleanup_callback = SS13.new("/datum/callback", SS13.state, "call_function_return_first", cleanup_path) + cleanup_callback:call_proc("RegisterSignal", datum, "parent_qdeleting", "Invoke") + __SS13_signal_handlers[datum]["_cleanup"] = { + func = function(datum) + SS13.signal_handler_cleanup(datum) + SS13.stop_tracking(cleanup_callback) + end, + callback = cleanup_callback, + } + end + if signal == "parent_qdeleting" then --We want to make sure that the cleanup function is the very last signal handler called. + local comp_lookup = datum.vars._listen_lookup + if comp_lookup then + local lookup_for_signal = comp_lookup.entries.parent_qdeleting + if lookup_for_signal and not SS13.istype(lookup_for_signal, "/datum") then + local cleanup_callback_index = + dm.global_proc("_list_find", lookup_for_signal, __SS13_signal_handlers[datum]["_cleanup"].callback) + if cleanup_callback_index ~= 0 and cleanup_callback_index ~= #comp_lookup then + dm.global_proc("_list_swap", lookup_for_signal, cleanup_callback_index, #lookup_for_signal) + end + end + end + end + __SS13_signal_handlers[datum][signal][callback] = { func = func, callback = callback } + if make_easy_clear_function then + local clear_function_name = "clear_signal_" .. tostring(datum) .. "_" .. signal .. "_" .. tostring(callback) + SS13[clear_function_name] = function() + if callback then + SS13.unregister_signal(datum, signal, callback) + end + SS13[clear_function_name] = nil + end + end + return callback +end + +function SS13.stop_tracking(datum) + SS13.state:call_proc("let_soft_delete", datum) +end + +function SS13.unregister_signal(datum, signal, callback) + local function clear_handler(handler_info) + if not handler_info then + return + end + if not handler_info.callback then + return + end + local handler_callback = handler_info.callback + handler_callback:call_proc("UnregisterSignal", datum, signal) + SS13.stop_tracking(handler_callback) + end + + local function clear_easy_clear_function(callback_to_clear) + local clear_function_name = "clear_signal_" .. tostring(datum) .. "_" .. signal .. "_" .. tostring(callback_to_clear) + SS13[clear_function_name] = nil + end + + if not __SS13_signal_handlers[datum] then + return + end + if signal == "_cleanup" then + return + end + if not __SS13_signal_handlers[datum][signal] then + return + end + + if not callback then + for handler_key, handler_info in __SS13_signal_handlers[datum][signal] do + clear_easy_clear_function(handler_key) + clear_handler(handler_info) + end + __SS13_signal_handlers[datum][signal] = nil + else + if not SS13.istype(callback, "/datum/callback") then + return + end + clear_easy_clear_function(callback) + clear_handler(__SS13_signal_handlers[datum][signal][callback]) + __SS13_signal_handlers[datum][signal][callback] = nil + end +end + +function SS13.signal_handler_cleanup(datum) + if not __SS13_signal_handlers[datum] then + return + end + + for signal, _ in __SS13_signal_handlers[datum] do + SS13.unregister_signal(datum, signal) + end + + __SS13_signal_handlers[datum] = nil +end + +return SS13 diff --git a/lua/timer.lua b/lua/timer.lua new file mode 100644 index 000000000000..605e5b98a2e5 --- /dev/null +++ b/lua/timer.lua @@ -0,0 +1,109 @@ +local SS13 = require("SS13_base") +local Timer = {} + +__Timer_timers = __Timer_timers or {} +__Timer_callbacks = __Timer_callbacks or {} + +function __add_internal_timer(func, time, loop) + local timer = { + loop = loop, + executeTime = time + dm.world:get_var("time") + } + __Timer_callbacks[tostring(func)] = function() + timer.executing = false + if loop and timer.terminate ~= true then + timer.executeTime = dm.world:get_var("time") + time + else + __stop_internal_timer(tostring(func)) + end + func() + end + __Timer_timers[tostring(func)] = timer + return tostring(func) +end + +function __stop_internal_timer(func) + local timer = __Timer_timers[func] + if timer then + if not timer.executing then + __Timer_timers[func] = nil + __Timer_callbacks[func] = nil + else + timer.terminate = true + end + end +end + +__Timer_timer_processing = __Timer_timer_processing or false +SS13.state:set_var("timer_enabled", 1) +__Timer_timer_process = function(seconds_per_tick) + if __Timer_timer_processing then + return 0 + end + __Timer_timer_processing = true + local time = dm.world:get_var("time") + for func, timeData in __Timer_timers do + if timeData.executing == true then + continue + end + if over_exec_usage(0.85) then + sleep() + end + if time >= timeData.executeTime then + SS13.state:get_var("functions_to_execute"):add(func) + timeData.executing = true + end + end + __Timer_timer_processing = false + return 1 +end + +function Timer.wait(time) + local next_yield_index = __next_yield_index + __add_internal_timer(function() + SS13.SSlua:call_proc("queue_resume", SS13.state, next_yield_index) + end, time * 10, false) + coroutine.yield() +end + +function Timer.set_timeout(time, func) + Timer.start_loop(time, 1, func) +end + +function Timer.start_loop(time, amount, func) + if not amount or amount == 0 then + return + end + if amount == -1 then + return __add_internal_timer(func, time * 10, true) + end + if amount == 1 then + return __add_internal_timer(func, time * 10, false) + end + -- Lua counts from 1 so let's keep consistent with that + local doneAmount = 1 + local funcId + local newFunc = function() + func(doneAmount) + doneAmount += 1 + if doneAmount > amount then + Timer.end_loop(funcId) + end + end + funcId = __add_internal_timer(newFunc, time * 10, true) + return funcId +end + +function Timer.end_loop(id) + __stop_internal_timer(id) +end + +function Timer.stop_all_loops() + for id, data in __Timer_timers do + if data.loop then + Timer.end_loop(id) + end + end +end + +return Timer diff --git a/monkestation/code/area/areas/station.dm b/monkestation/code/area/areas/station.dm index 9d7a6de62ea6..1b92c97cbd0c 100644 --- a/monkestation/code/area/areas/station.dm +++ b/monkestation/code/area/areas/station.dm @@ -14,3 +14,9 @@ name = "Pathology Isolation" icon = 'monkestation/icons/area/areas_station.dmi' icon_state = "patho_iso" + +// QM office replacement so the windows are shit brown and not blue! + +/area/station/cargo/quartermaster + name = "\improper Quartermaster's Office" + icon_state = "quart" diff --git a/monkestation/code/controllers/subsystem/job.dm b/monkestation/code/controllers/subsystem/job.dm index 2130791ede4c..a9e30e36976b 100644 --- a/monkestation/code/controllers/subsystem/job.dm +++ b/monkestation/code/controllers/subsystem/job.dm @@ -26,7 +26,7 @@ /// Handle antags as well as assigning people to their jobs /datum/controller/subsystem/job/proc/handle_final_setup() var/sanity = 0 - var/max_sane_loops = length(subtypesof(/datum/round_event_control/antagonist/solo) - typesof(/datum/round_event_control/antagonist/solo/ghost)) //not exact, but its close enough + var/max_sane_loops = length(subtypesof(/datum/round_event_control/antagonist/solo) - typesof(/datum/round_event_control/antagonist/solo/from_ghosts)) //not exact, but its close enough pick_desired_roundstart() while(!handle_roundstart_antags() && !sanity >= max_sane_loops) sanity++ @@ -50,7 +50,7 @@ assigned_players_by_job = list() assignable_by_job = list() - JobDebug("h_f_s pass") + log_storyteller("h_f_s pass") /datum/controller/subsystem/job/proc/handle_roundstart_antags() if(!SSgamemode.current_roundstart_event) @@ -69,11 +69,11 @@ var/antag_selection_loops = SSgamemode.current_roundstart_event.get_antag_amount() for(var/i in 1 to antag_selection_loops) if(antag_selection_loops >= 100) - JobDebug("h_r_a failed, antag_selection_loops went over 100") + log_storyteller("h_r_a failed, antag_selection_loops went over 100") return FALSE if(!length(candidates)) if(length(SSgamemode.roundstart_antag_minds) < SSgamemode.current_roundstart_event.base_antags) //we got below our min antags, reroll - JobDebug("h_r_a failed, below required candidates for selected roundstart event") + log_storyteller("h_r_a failed, below required candidates for selected roundstart event") return FALSE break var/client/dead_client = pick_n_take_weighted(weighted_candidates) @@ -98,7 +98,7 @@ SSgamemode.roundstart_antag_minds -= player_mind if(!length(weighted_candidates)) if(length(SSgamemode.roundstart_antag_minds) < SSgamemode.current_roundstart_event.base_antags) - JobDebug("h_r_a failed, removing unassigned antag player put us below current event minimum candidates") + log_storyteller("h_r_a failed, removing unassigned antag player put us below current event minimum candidates") return FALSE continue var/mob/dead/new_player/candidate @@ -110,12 +110,12 @@ candidate = null if(!candidate) if(length(SSgamemode.roundstart_antag_minds) < SSgamemode.current_roundstart_event.base_antags) - JobDebug("h_r_a failed, removing unassigned antag player put us below current event minimum candidates and we were unable to find a replacement") + log_storyteller("h_r_a failed, removing unassigned antag player put us below current event minimum candidates and we were unable to find a replacement") return FALSE else if(sanity >= 100) - JobDebug("h_r_a error, sanity check went over limit while trying to find replacement antag player but it did not make us go under our minimum antag players") + log_storyteller("h_r_a error, sanity check went over limit while trying to find replacement antag player but it did not make us go under our minimum antag players") continue - JobDebug("h_r_a error, we were unable to find a replacment for an unassigned antag player however we did not go under our minimum antag players") + log_storyteller("h_r_a error, we were unable to find a replacment for an unassigned antag player however we did not go under our minimum antag players") continue SSgamemode.roundstart_antag_minds += candidate.mind continue @@ -127,18 +127,18 @@ if(enemy_job && (enemy_count - 1) < SSgamemode.current_roundstart_event.required_enemies && !try_reassign_job(player, enemy_job_instances, \ restricted_job_instances, TRUE, enemy_players)) - JobDebug("h_r_a failed, an antag player was an enemy role and we could not find someone to replace them") + log_storyteller("h_r_a failed, an antag player was an enemy role and we could not find someone to replace them") return FALSE if(!try_reassign_job(player, enemy_job_instances, restricted_job_instances)) - JobDebug("h_r_a failed, we were unable to reassign an antag player with a restricted role") + log_storyteller("h_r_a failed, we were unable to reassign an antag player with a restricted role") return FALSE return TRUE /// Try and reassign the job of input player and return based on if we succeed or not, if need_new_enemy is passed then we will return FALSE if we cant find someone else to be an enemy /datum/controller/subsystem/job/proc/try_reassign_job(mob/dead/new_player/player, list/enemy_jobs = list(), list/restricted_jobs = list(), need_new_enemy = FALSE, list/enemy_players) if(!GiveRandomJob(player, TRUE, enemy_jobs + restricted_jobs) && !handle_temp_assignments(player, GetJobType(overflow_role))) - JobDebug("t_r_j failed, we were unable to give the reassigned player a new job, Player: [player]") + log_storyteller("t_r_j failed, we were unable to give the reassigned player a new job, Player: [player]") return FALSE if(need_new_enemy) @@ -161,7 +161,7 @@ handle_temp_assignments(new_enemy_player, enemy_job) break if(!new_enemy_player) - JobDebug("t_r_j failed, we were unable to find someone to replace the enemy role of the reassigned player, Player: [player]") + log_storyteller("t_r_j failed, we were unable to find someone to replace the enemy role of the reassigned player, Player: [player]") return FALSE return TRUE @@ -172,6 +172,7 @@ valid_rolesets = list() valid_rolesets += SSgamemode.event_pools[EVENT_TRACK_ROLESET] + log_storyteller("p_d_r valid_rolesets", list("rolesets" = english_list(valid_rolesets))) valid_rolesets -= SSgamemode.current_roundstart_event var/player_count = 0 for(var/job in assigned_players_by_job) @@ -184,14 +185,15 @@ else actual_valid_rolesets[roleset] = roleset.weight valid_rolesets = actual_valid_rolesets + log_storyteller("p_d_r actual_valid_rolesets", list("rolesets" = english_list(actual_valid_rolesets))) if(SSgamemode.current_roundstart_event && (SSgamemode.current_roundstart_event in valid_rolesets)) - JobDebug("p_d_r failed, SSgamemode.current_roundstart_event in valid_rolesets") + log_storyteller("p_d_r failed, SSgamemode.current_roundstart_event in valid_rolesets") return if(!length(valid_rolesets)) - JobDebug("p_d_r failed, no valid_rolesets") + log_storyteller("p_d_r failed, no valid_rolesets") return SSgamemode.current_roundstart_event = pick_weight(valid_rolesets) - JobDebug("p_d_r pass, Selected Roleset: [SSgamemode.current_roundstart_event]") + log_storyteller("p_d_r pass, Selected Roleset: [SSgamemode.current_roundstart_event]") diff --git a/monkestation/code/datums/achievements/misc_achievements.dm b/monkestation/code/datums/achievements/misc_achievements.dm new file mode 100644 index 000000000000..11a778899d94 --- /dev/null +++ b/monkestation/code/datums/achievements/misc_achievements.dm @@ -0,0 +1,5 @@ +/datum/award/achievement/misc/jared_leto + name = "The Jared Leto of fruits" + desc = "Cantelopes dumb friend they insist on bringing to the party. The worst part of everything it is in." + database_id = MEDAL_JARED_LETO + icon = "jared_leto" diff --git a/monkestation/code/datums/components/carbon_sprint.dm b/monkestation/code/datums/components/carbon_sprint.dm index fa877be7f514..e7f8d28f4155 100644 --- a/monkestation/code/datums/components/carbon_sprint.dm +++ b/monkestation/code/datums/components/carbon_sprint.dm @@ -55,11 +55,10 @@ dust.appear("sprint_cloud_tiny", direct, get_turf(carbon_parent), 0.3 SECONDS) last_dust = world.time sustained_moves = 0 - if(HAS_TRAIT(src, TRAIT_FREERUNNING)) - carbon_parent.stamina.adjust(-STAMINA_SPRINT_COST/2) + if(HAS_TRAIT(carbon_parent, TRAIT_FREERUNNING)) + carbon_parent.stamina.adjust(-STAMINA_SPRINT_COST * 0.7) //0.5 * cost Means almost infinnite sprint due to regen else carbon_parent.stamina.adjust(-STAMINA_SPRINT_COST) - else if(sprinting) stopSprint() diff --git a/monkestation/code/datums/components/irradiated.dm b/monkestation/code/datums/components/irradiated.dm new file mode 100644 index 000000000000..581b6ff4e0f4 --- /dev/null +++ b/monkestation/code/datums/components/irradiated.dm @@ -0,0 +1,13 @@ +/datum/component/irradiated/RegisterWithParent() + . = ..() + if(!ismob(parent)) // no, you still have to go under the shower + RegisterSignal(parent, COMSIG_ATOM_EXPOSE_REAGENT, PROC_REF(on_expose_reagent)) + +/datum/component/irradiated/UnregisterFromParent() + . = ..() + UnregisterSignal(parent, COMSIG_ATOM_EXPOSE_REAGENT) + +/datum/component/irradiated/proc/on_expose_reagent(atom/source, datum/reagent/reagent, reac_volume) + SIGNAL_HANDLER + if(istype(reagent, /datum/reagent/medicine/potass_iodide) && reac_volume >= 1) + qdel(src) diff --git a/monkestation/code/datums/dna.dm b/monkestation/code/datums/dna.dm index 2dd03c6e7d07..eebd05695c1a 100644 --- a/monkestation/code/datums/dna.dm +++ b/monkestation/code/datums/dna.dm @@ -3,7 +3,7 @@ /datum/dna/proc/update_body_height() var/mob/living/carbon/human/human_holder = holder - if(!istype(holder)) + if(!istype(human_holder)) return var/height = GLOB.body_heights[body_height] if(isnull(height)) diff --git a/monkestation/code/datums/elements/uncompressed_storage.dm b/monkestation/code/datums/elements/uncompressed_storage.dm new file mode 100644 index 000000000000..3916bf53eec3 --- /dev/null +++ b/monkestation/code/datums/elements/uncompressed_storage.dm @@ -0,0 +1,30 @@ +/// An item with this element can be compressed by a bluespace +/datum/element/uncompressed_storage + +/datum/element/uncompressed_storage/Attach(obj/item/target) + . = ..() + if(!istype(target) || QDELETED(target.atom_storage)) + return ELEMENT_INCOMPATIBLE + ADD_TRAIT(target, TRAIT_BYPASS_COMPRESS_CHECK, REF(src)) + RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(target, COMSIG_ITEM_COMPRESSED, PROC_REF(on_compressed)) + +/datum/element/uncompressed_storage/Detach(obj/item/target, ...) + . = ..() + UnregisterSignal(target, list(COMSIG_ATOM_EXAMINE, COMSIG_ITEM_COMPRESSED)) + REMOVE_TRAIT(target, TRAIT_BYPASS_COMPRESS_CHECK, REF(src)) + +/datum/element/uncompressed_storage/proc/on_examine(obj/item/source, mob/examiner, list/examine_list) + SIGNAL_HANDLER + // Only display the examine the storage hasn't been delete, and like, the user actually HAS a compression kit. + if(QDELETED(source.atom_storage) || !length(examiner.get_all_contents_type(/obj/item/compression_kit))) + return + examine_list += span_notice("It can be compressed with a bluespace compression kit, but it will lose its ability to store items if compressed.") + +/datum/element/uncompressed_storage/proc/on_compressed(obj/item/source, mob/user, obj/item/compression_kit/kit) + SIGNAL_HANDLER + if(QDELETED(source.atom_storage)) + return + to_chat(user, span_warning("\The [source] loses its ability to store items as its compressed by \the [kit]!")) + source.atom_storage.remove_all(source.drop_location()) + QDEL_NULL(source.atom_storage) diff --git a/monkestation/code/datums/meta_tokens.dm b/monkestation/code/datums/meta_tokens.dm index 751dd4a01af7..454e5eb8fcd5 100644 --- a/monkestation/code/datums/meta_tokens.dm +++ b/monkestation/code/datums/meta_tokens.dm @@ -37,6 +37,10 @@ GLOBAL_LIST_INIT(patreon_etoken_values, list( var/event_token_month = 0 ///what token event do we currently have queued var/datum/twitch_event/queued_token_event + /// The timer for the antag token timeout + var/antag_timeout + /// The timer for the event token timeout + var/event_timeout /datum/meta_token_holder/New(client/creator) . = ..() @@ -128,6 +132,9 @@ GLOBAL_LIST_INIT(patreon_etoken_values, list( in_queue = null in_queued_tier = null queued_donor = FALSE + if(antag_timeout) + deltimer(antag_timeout) + antag_timeout = null /datum/meta_token_holder/proc/reject_antag_token() if(!in_queue) @@ -135,9 +142,24 @@ GLOBAL_LIST_INIT(patreon_etoken_values, list( to_chat(owner, span_boldwarning("Your request to play as [in_queue] has been denied.")) logger.Log(LOG_CATEGORY_META, "[owner]'s antag token for [in_queue] has been denied.") + SEND_SOUND(owner, sound('sound/misc/compiler-failure.ogg', volume = 50)) in_queue = null in_queued_tier = null queued_donor = FALSE + if(antag_timeout) + deltimer(antag_timeout) + antag_timeout = null + +/datum/meta_token_holder/proc/timeout_antag_token() + if(!in_queue) + return + to_chat(owner, span_boldwarning("Your request to play as [in_queue] wasn't answered within 5 minutes. Better luck next time!")) + logger.Log(LOG_CATEGORY_META, "[owner]'s antag token for [in_queue] has timed out.") + SEND_SOUND(owner, sound('sound/misc/compiler-failure.ogg', volume = 50)) + in_queue = null + in_queued_tier = null + queued_donor = FALSE + antag_timeout = null /datum/meta_token_holder/proc/adjust_event_tokens(amount) check_event_tokens(owner) @@ -162,6 +184,9 @@ GLOBAL_LIST_INIT(patreon_etoken_values, list( adjust_event_tokens(-queued_token_event.token_cost) SStwitch.add_to_queue(initial(queued_token_event.id_tag)) queued_token_event = null + if(event_timeout) + deltimer(event_timeout) + event_timeout = null /datum/meta_token_holder/proc/reject_token_event() if(!queued_token_event) @@ -169,4 +194,17 @@ GLOBAL_LIST_INIT(patreon_etoken_values, list( to_chat(owner, span_boldwarning("Your request to trigger [queued_token_event] has been denied.")) logger.Log(LOG_CATEGORY_META, "[owner]'s event token for [queued_token_event] has been denied.") + SEND_SOUND(owner, sound('sound/misc/compiler-failure.ogg', volume = 50)) + queued_token_event = null + if(event_timeout) + deltimer(event_timeout) + event_timeout = null + +/datum/meta_token_holder/proc/timeout_event_token() + if(!queued_token_event) + return + logger.Log(LOG_CATEGORY_META, "[owner]'s event token for [queued_token_event] has timed out.") + to_chat(owner, span_boldwarning("Your request to trigger [queued_token_event] wasn't answered within 5 minutes. Better luck next time!")) + SEND_SOUND(owner, sound('sound/misc/compiler-failure.ogg', volume = 50)) queued_token_event = null + event_timeout = null diff --git a/monkestation/code/datums/quirks/negative_quirks.dm b/monkestation/code/datums/quirks/negative_quirks.dm index e1771fd2aa6c..db2648a98a13 100644 --- a/monkestation/code/datums/quirks/negative_quirks.dm +++ b/monkestation/code/datums/quirks/negative_quirks.dm @@ -4,6 +4,13 @@ value = 0 icon = FA_ICON_CROW +/datum/quirk/jailbird/add_to_holder(mob/living/new_holder, quirk_transfer, client/client_source) + // Don't bother adding to ghost players + if(istype(new_holder, /mob/living/carbon/human/ghost)) + qdel(src) + return FALSE + return ..() + /datum/quirk/jailbird/post_add() . = ..() var/mob/living/carbon/human/jailbird = quirk_holder @@ -18,6 +25,10 @@ var/crime = "[pick(world.file2list("monkestation/strings/random_police.txt"))] [(rand(9)+1)] [pick("days", "weeks", "months", "years")] ago" var/perpname = jailbird.real_name var/datum/record/crew/jailbird_record = find_record(perpname) + // remove quirk if we don't even have a record + if(QDELETED(jailbird_record)) + qdel(src) + return var/datum/crime/new_crime = new(name = crime_name, details = crime, author = "Nanotrasen Bounty Department") jailbird_record.crimes += new_crime jailbird_record.wanted_status = WANTED_PAROLE diff --git a/monkestation/code/datums/random_engines/boxstation.dm b/monkestation/code/datums/random_engines/boxstation.dm new file mode 100644 index 000000000000..546248c4887e --- /dev/null +++ b/monkestation/code/datums/random_engines/boxstation.dm @@ -0,0 +1,20 @@ +// *!! BOXSTATION ENGINES !!* +/datum/map_template/random_room/random_engines/box_supermatter + name = "Box Supermatter" + room_id = "box_supermatter" + mappath = "monkestation/_maps/RandomEngines/BoxStation/supermatter.dmm" + centerspawner = FALSE + template_height = 26 + template_width = 29 + weight = 8 + station_name = "BoxStation" + +/datum/map_template/random_room/random_engines/box_singularity + name = "Box Singularity" + room_id = "box_singularity" + mappath = "monkestation/_maps/RandomEngines/BoxStation/singularity.dmm" + centerspawner = FALSE + template_height = 26 + template_width = 29 + weight = 8 + station_name = "BoxStation" diff --git a/monkestation/code/datums/stamina_container.dm b/monkestation/code/datums/stamina_container.dm index 62b3afa7b4ca..4be931363d8d 100644 --- a/monkestation/code/datums/stamina_container.dm +++ b/monkestation/code/datums/stamina_container.dm @@ -82,3 +82,21 @@ if((amt < 0) && is_regenerating) pause(STAMINA_REGEN_TIME) return amt + +/// Revitalize the stamina to the maximum this container can have. +/datum/stamina_container/proc/revitalize(forced = FALSE) + return adjust(maximum, forced) + +/datum/stamina_container/proc/adjust_to(amount, lowest_stamina_value, forced = FALSE) + if((!amount || !COOLDOWN_FINISHED(src, stamina_grace_period)) && !forced) + return + + var/stamina_after_loss = current + amount + if(stamina_after_loss < lowest_stamina_value) + amount = current - lowest_stamina_value + + current = round(clamp(current + amount, 0, maximum), DAMAGE_PRECISION) + update() + if((amount < 0) && is_regenerating) + pause(STAMINA_REGEN_TIME) + return amount diff --git a/monkestation/code/datums/storage/storage.dm b/monkestation/code/datums/storage/storage.dm new file mode 100644 index 000000000000..0a2609c1f987 --- /dev/null +++ b/monkestation/code/datums/storage/storage.dm @@ -0,0 +1,5 @@ +/datum/storage/proc/attempt_compression(atom/source, mob/user, obj/item/compression_kit/kit) + SIGNAL_HANDLER + if(!HAS_TRAIT(source, TRAIT_BYPASS_COMPRESS_CHECK)) + to_chat(user, span_warning("You can't make [source] any smaller without compromising its storage functions!")) + return (COMPONENT_STOP_COMPRESSION | COMPONENT_HANDLED_MESSAGE) diff --git a/monkestation/code/game/machinery/cloning.dm b/monkestation/code/game/machinery/cloning.dm index 8ee36f54a0c8..b1e36308e4a7 100644 --- a/monkestation/code/game/machinery/cloning.dm +++ b/monkestation/code/game/machinery/cloning.dm @@ -51,6 +51,8 @@ var/list/unattached_flesh var/flesh_number = 0 var/datum/bank_account/current_insurance + /// Whether autoprocessing will automatically clone, or just scan. + var/auto_clone = TRUE fair_market_price = 5 // He nodded, because he knew I was right. Then he swiped his credit card to pay me for arresting him. payment_department = ACCOUNT_MED diff --git a/monkestation/code/game/machinery/computer/cloning.dm b/monkestation/code/game/machinery/computer/cloning.dm index 11eb1828904f..3dcd237a4b90 100644 --- a/monkestation/code/game/machinery/computer/cloning.dm +++ b/monkestation/code/game/machinery/computer/cloning.dm @@ -7,7 +7,7 @@ name = "record" var/list/fields = list() -/obj/machinery/computer/cloning //hippie start, re-add cloning +/obj/machinery/computer/cloning //monke start, re-add cloning name = "cloning console" desc = "Used to clone people and manage DNA." icon_screen = "dna" @@ -60,10 +60,11 @@ if(pod.is_operational && pod.efficiency > 5) return TRUE -/obj/machinery/computer/cloning/proc/GetAvailableEfficientPod(mind = null) +/obj/machinery/computer/cloning/proc/GetAvailableEfficientPod(mind = null, cloning = FALSE) if(pods) - for(var/P in pods) - var/obj/machinery/clonepod/pod = P + for(var/obj/machinery/clonepod/pod as anything in pods) + if(cloning & !pod.auto_clone) + continue if(pod.occupant && pod.clonemind == mind) return pod else if(!. && pod.is_operational && !(pod.occupant || pod.mess) && pod.efficiency > 5) @@ -79,21 +80,17 @@ if(scanner.occupant && scanner.scan_level > 2) scan_occupant(scanner.occupant) - for(var/datum/data/record/R in records) - var/obj/machinery/clonepod/pod = GetAvailableEfficientPod(R.fields["mindref"]) + for(var/datum/data/record/record in records) + var/obj/machinery/clonepod/pod = GetAvailableEfficientPod(record.fields["mindref"], TRUE) - if(!pod) + if(QDELETED(pod) || !pod.auto_clone || !QDELETED(pod.occupant)) return - - if(pod.occupant) - break - - var/result = grow_clone_from_record(pod, R) + var/result = grow_clone_from_record(pod, record) if(result & CLONING_SUCCESS) - temp = "[R.fields["name"]] => Cloning cycle in progress..." - log_cloning("Cloning of [key_name(R.fields["mindref"])] automatically started via autoprocess - [src] at [AREACOORD(src)]. Pod: [pod] at [AREACOORD(pod)].") + temp = "[record.fields["name"]] => Cloning cycle in progress..." + log_cloning("Cloning of [key_name(record.fields["mindref"])] automatically started via autoprocess - [src] at [AREACOORD(src)]. Pod: [pod] at [AREACOORD(pod)].") if(result & CLONING_DELETE_RECORD) - records -= R + records -= record /obj/machinery/computer/cloning/proc/updatemodules(findfirstcloner) @@ -539,7 +536,7 @@ scantemp = "Unable to locate valid genetic data." playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) return - + if(isbrain(mob_occupant)) dna = B.stored_dna if(!body_only && HAS_TRAIT(mob_occupant, TRAIT_SUICIDED)) diff --git a/monkestation/code/game/machinery/exp_cloner.dm b/monkestation/code/game/machinery/exp_cloner.dm index 7a1f3dd3e4e9..3c49c3caf090 100644 --- a/monkestation/code/game/machinery/exp_cloner.dm +++ b/monkestation/code/game/machinery/exp_cloner.dm @@ -7,71 +7,97 @@ req_access = null circuit = /obj/item/circuitboard/machine/clonepod/experimental internal_radio = FALSE + VAR_PRIVATE + static/list/image/cached_clone_images + +/obj/machinery/clonepod/experimental/Destroy() + clear_human_dummy(REF(src)) + return ..() //Start growing a human clone in the pod! -/obj/machinery/clonepod/experimental/growclone(clonename, ui, mutation_index, mindref, last_death, blood_type, datum/species/mrace, list/features, factions, list/quirks, datum/bank_account/insurance) - if(panel_open) - return NONE - if(mess || attempting) +/obj/machinery/clonepod/experimental/growclone(clonename, ui, mutation_index, mindref, blood_type, datum/species/mrace, list/features, factions, list/quirks, datum/bank_account/insurance) + if(panel_open || mess || attempting) return NONE attempting = TRUE //One at a time!! countdown.start() - var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) + var/mob/living/carbon/human/clonee = new /mob/living/carbon/human(src) - H.hardset_dna(ui, mutation_index, H.real_name, blood_type, mrace, features) + clonee.hardset_dna(ui, mutation_index, null, clonee.real_name, blood_type, mrace, features) if(efficiency > 2) var/list/unclean_mutations = (GLOB.not_good_mutations|GLOB.bad_mutations) - H.dna.remove_mutation_group(unclean_mutations) + clonee.dna.remove_mutation_group(unclean_mutations) if(efficiency > 5 && prob(20)) - H.easy_random_mutate(POSITIVE) + clonee.easy_random_mutate(POSITIVE) if(efficiency < 3 && prob(50)) - var/mob/M = H.easy_random_mutate(NEGATIVE+MINOR_NEGATIVE) - if(ismob(M)) - H = M + var/mob/new_mob = clonee.easy_random_mutate(NEGATIVE+MINOR_NEGATIVE) + if(ismob(new_mob)) + clonee = new_mob - occupant = H + occupant = clonee if(!clonename) //to prevent null names clonename = "clone ([rand(1,999)])" - H.real_name = clonename + clonee.real_name = clonename icon_state = "pod_1" //Get the clone body ready - maim_clone(H) - ADD_TRAIT(H, TRAIT_STABLEHEART, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_STABLELIVER, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_EMOTEMUTE, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_MUTE, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_NOBREATH, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_NOCRITDAMAGE, CLONING_POD_TRAIT) - H.Unconscious(80) - - var/list/candidates = poll_candidates_for_mob("Do you want to play as [clonename]'s defective clone?", null, null, 10 SECONDS, H, POLL_IGNORE_DEFECTIVECLONE) + maim_clone(clonee) + ADD_TRAIT(clonee, TRAIT_STABLEHEART, CLONING_POD_TRAIT) + ADD_TRAIT(clonee, TRAIT_STABLELIVER, CLONING_POD_TRAIT) + ADD_TRAIT(clonee, TRAIT_EMOTEMUTE, CLONING_POD_TRAIT) + ADD_TRAIT(clonee, TRAIT_MUTE, CLONING_POD_TRAIT) + ADD_TRAIT(clonee, TRAIT_NOBREATH, CLONING_POD_TRAIT) + ADD_TRAIT(clonee, TRAIT_NOCRITDAMAGE, CLONING_POD_TRAIT) + clonee.Unconscious(80) + + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob( + "Do you want to play as [clonename]'s defective clone?", + poll_time = 10 SECONDS, + target_mob = clonee, + ignore_category = POLL_IGNORE_DEFECTIVECLONE, + pic_source = get_clone_preview(clonee.dna) || clonee, + role_name_text = "defective clone" + ) if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - H.key = C.key + var/mob/dead/observer/candidate = pick(candidates) + clonee.key = candidate.key if(grab_ghost_when == CLONER_FRESH_CLONE) - H.grab_ghost() - to_chat(H, "Consciousness slowly creeps over you as your body regenerates.
So this is what cloning feels like?
") + clonee.grab_ghost() + to_chat(clonee, span_notice("Consciousness slowly creeps over you as your body regenerates.
So this is what cloning feels like?")) if(grab_ghost_when == CLONER_MATURE_CLONE) - H.ghostize(TRUE) //Only does anything if they were still in their old body and not already a ghost - to_chat(H.get_ghost(TRUE), "Your body is beginning to regenerate in a cloning pod. You will become conscious when it is complete.") - - if(H) - H.faction |= factions + clonee.ghostize(TRUE) //Only does anything if they were still in their old body and not already a ghost + to_chat(clonee.get_ghost(TRUE), span_notice("Your body is beginning to regenerate in a cloning pod. You will become conscious when it is complete.")) - H.set_cloned_appearance() - - H.set_suicide(FALSE) + if(!QDELETED(clonee)) + clonee.faction |= factions + clonee.set_cloned_appearance() + clonee.set_suicide(FALSE) attempting = FALSE - return CLONING_DELETE_RECORD | CLONING_SUCCESS //so that we don't spam clones with autoprocess unless we leave a body in the scanner + return CLONING_SUCCESS //so that we don't spam clones with autoprocess unless we leave a body in the scanner + +/obj/machinery/clonepod/experimental/proc/get_clone_preview(datum/dna/clone_dna) + RETURN_TYPE(/image) + if(!istype(clone_dna) || QDELING(clone_dna)) + return + var/key = copytext_char(md5("[clone_dna.unique_identity][clone_dna.unique_features][clone_dna.species.type][clone_dna.body_height]"), 1, 8) + var/image/preview = LAZYACCESS(cached_clone_images, key) + if(!isnull(preview)) + return preview + var/mob/living/carbon/human/dummy/preview_dummy = generate_or_wait_for_human_dummy(REF(src)) + clone_dna.transfer_identity(preview_dummy, transfer_SE = FALSE, transfer_species = TRUE) + preview_dummy.set_cloned_appearance() + preview_dummy.updateappearance(icon_update = TRUE, mutcolor_update = TRUE, mutations_overlay_update = TRUE) + preview = getFlatIcon(preview_dummy) + unset_busy_human_dummy(REF(src)) + LAZYSET(cached_clone_images, key, preview) + return preview //Prototype cloning console, much more rudimental and lacks modern functions such as saving records, autocloning, or safety checks. /obj/machinery/computer/prototype_cloning @@ -300,6 +326,6 @@ temp = "Cloning cycle already in progress." playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, FALSE) else - pod.growclone(mob_occupant.real_name, dna.unique_identity, dna.mutation_index, null, null, dna.blood_type, clone_species, dna.features, mob_occupant.faction) + pod.growclone(mob_occupant.real_name, dna.unique_identity, dna.mutation_index, null, dna.blood_type, clone_species, dna.features, mob_occupant.faction) temp = "[mob_occupant.real_name] => Cloning data sent to pod." playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) diff --git a/monkestation/code/game/machinery/launch_pad.dm b/monkestation/code/game/machinery/launch_pad.dm new file mode 100644 index 000000000000..55ddc9b9d47e --- /dev/null +++ b/monkestation/code/game/machinery/launch_pad.dm @@ -0,0 +1,3 @@ +/obj/item/storage/briefcase/launchpad/Initialize(mob/living/source, mob/examiner, list/examine_list) + . = ..() + AddElement(/datum/element/uncompressed_storage) diff --git a/monkestation/code/game/objects/effects/anomalies/_anomalies.dm b/monkestation/code/game/objects/effects/anomalies/_anomalies.dm new file mode 100644 index 000000000000..67676be94e8d --- /dev/null +++ b/monkestation/code/game/objects/effects/anomalies/_anomalies.dm @@ -0,0 +1,6 @@ +/obj/effect/anomaly/proc/scan_anomaly(mob/user, obj/item/scanner) + if(!aSignal) + return FALSE + playsound(get_turf(user), 'sound/machines/ping.ogg', vol = 30, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE, ignore_walls = FALSE) + to_chat(user, span_boldnotice("Analyzing... [src]'s unstable field is fluctuating along frequency [format_frequency(aSignal.frequency)], code [aSignal.code].")) + return TRUE diff --git a/monkestation/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm b/monkestation/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm new file mode 100644 index 000000000000..70867f75f8b8 --- /dev/null +++ b/monkestation/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm @@ -0,0 +1,2 @@ +/obj/effect/anomaly/bioscrambler + immortal = FALSE diff --git a/monkestation/code/game/objects/effects/anomalies/anomalies_dimensional.dm b/monkestation/code/game/objects/effects/anomalies/anomalies_dimensional.dm new file mode 100644 index 000000000000..01cb702613c1 --- /dev/null +++ b/monkestation/code/game/objects/effects/anomalies/anomalies_dimensional.dm @@ -0,0 +1,30 @@ +/obj/effect/anomaly/dimensional + /// How many remaining times this anomaly will relocate, before its detonation. + var/relocations_left + +/obj/effect/anomaly/dimensional/Initialize(mapload, new_lifespan, drops_core) + . = ..() + if(!isnum(relocations_left)) + relocations_left = rand(3, 5) + +/obj/effect/anomaly/dimensional/detonate() + . = ..() + if(!theme) + return + visible_message(span_bolddanger("[src] explodes, distorting the space around it in surreal ways!")) + var/detonate_range = range + rand(5, 7) + var/list/turf/target_turfs = spiral_range_turfs(detonate_range, src) + for(var/turf/target in target_turfs) + if(prob(15) || QDELING(target)) // the prob is so it looks more erratic + continue + theme.apply_theme(target) + +/obj/effect/anomaly/dimensional/relocate() + if(relocations_left == -1) + return ..() + if(relocations_left < 1) + detonate() + qdel(src) + return + . = ..() + relocations_left -= 1 diff --git a/monkestation/code/game/objects/effects/spawners/roomspawner.dm b/monkestation/code/game/objects/effects/spawners/roomspawner.dm index a2d0e88b258d..030dd56005bf 100644 --- a/monkestation/code/game/objects/effects/spawners/roomspawner.dm +++ b/monkestation/code/game/objects/effects/spawners/roomspawner.dm @@ -111,6 +111,12 @@ +///BoxStation Engine Area Spawner +/obj/effect/spawner/random_engines/box + name = "box engine spawner" + room_width = 29 + room_height = 26 + /// MetaStation Engine Area Spawner /obj/effect/spawner/random_engines/meta name = "meta engine spawner" @@ -165,6 +171,11 @@ template.load(get_turf(src), centered = template.centerspawner) return INITIALIZE_HINT_QDEL +/obj/effect/spawner/random_bar/box + name = "Box Bar Spawner" + room_width = 11 + room_height = 17 + /obj/effect/spawner/random_bar/icebox name = "Icebox bar spawner" room_width = 18 diff --git a/monkestation/code/game/objects/items.dm b/monkestation/code/game/objects/items.dm new file mode 100644 index 000000000000..3203d5df3dea --- /dev/null +++ b/monkestation/code/game/objects/items.dm @@ -0,0 +1,7 @@ +/obj/item/proc/adjust_weight_class(amt, min_weight = WEIGHT_CLASS_TINY, max_weight = WEIGHT_CLASS_GIGANTIC) + if(!amt || !isnum(amt)) + stack_trace("Attempted to adjust weight class by an invalid value ([amt])") + return FALSE + var/old_w_class = w_class + w_class = clamp(w_class + amt, min_weight, max_weight) + return w_class != old_w_class diff --git a/monkestation/code/game/objects/items/choice_beacon.dm b/monkestation/code/game/objects/items/choice_beacon.dm index fe00d08e0b2c..b6ce1e948893 100644 --- a/monkestation/code/game/objects/items/choice_beacon.dm +++ b/monkestation/code/game/objects/items/choice_beacon.dm @@ -92,13 +92,3 @@ return to_chat(user, span_notice("[uses] use[uses > 1 ? "s" : ""] remain[uses > 1 ? "" : "s"] on [src].")) - -/obj/item/choice_beacon/jukebox //this is probably a terrible way to do this, but its the first that worked. - name = "jukebox beacon" - desc = "Deploys a jukebox! Also comes wrenched down to the floor for you on delivery! How convenient!" -/obj/item/choice_beacon/jukebox/interact(mob/user) - to_chat(user, span_hear("You hear a crackle before a message plays through [src]: \"Thank you for picking Dave's Instant Jukebox Shipping! This beacon will now self destruct.\"")) - new /obj/machinery/media/jukebox(get_turf(user)) - playsound(src, 'sound/weapons/emitter2.ogg', 50, extrarange = SILENCED_SOUND_EXTRARANGE) - do_sparks(3, source = src) - qdel(src) diff --git a/monkestation/code/game/objects/items/devices/compression_kit.dm b/monkestation/code/game/objects/items/devices/compression_kit.dm new file mode 100644 index 000000000000..aa291c2687d1 --- /dev/null +++ b/monkestation/code/game/objects/items/devices/compression_kit.dm @@ -0,0 +1,62 @@ +/obj/item/compression_kit + name = "bluespace compression kit" + desc = "An illegally modified BSRPED, capable of reducing the size of most items." + icon = 'monkestation/icons/obj/tools.dmi' + icon_state = "compression_kit" + inhand_icon_state = "BS_RPED" + worn_icon_state = "RPED" + lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' + w_class = WEIGHT_CLASS_NORMAL + var/charges = 5 + +/obj/item/compression_kit/examine(mob/user) + . = ..() + . += span_notice("It has [charges] charges left. Recharge with bluespace crystals.") + +/obj/item/compression_kit/proc/sparks() + var/datum/effect_system/spark_spread/spark_spread = new /datum/effect_system/spark_spread + spark_spread.set_up(5, TRUE, get_turf(src)) + spark_spread.start() + +/obj/item/compression_kit/afterattack(obj/item/target, mob/user, proximity) + . = ..() + if(!proximity || !target || !istype(target)) + return + else if(charges == 0) + playsound(get_turf(src), 'sound/machines/buzz-two.ogg', vol = 50, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + to_chat(user, span_warning("The bluespace compression kit is out of charges! Recharge it with bluespace crystals.")) + return + var/pre_compress = SEND_SIGNAL(target, COMSIG_ITEM_PRE_COMPRESS, user, src) + if(pre_compress & COMPONENT_STOP_COMPRESSION) + if(!(pre_compress & COMPONENT_HANDLED_MESSAGE)) + to_chat(user, span_warning("[src] is unable to compress [target]!")) + return + if(target.w_class <= WEIGHT_CLASS_TINY) + playsound(get_turf(src), 'sound/machines/buzz-two.ogg', vol = 50, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + to_chat(user, span_warning("[target] cannot be compressed smaller!")) + return + playsound(get_turf(src), 'sound/weapons/flash.ogg', vol = 50, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + user.visible_message(span_warning("[user] is compressing [target] with [src]!"), vision_distance = COMBAT_MESSAGE_RANGE) + if(do_after(user, 4 SECONDS, target, interaction_key = "[type]") && charges > 0 && target.w_class > WEIGHT_CLASS_TINY) + playsound(get_turf(src), 'sound/weapons/emitter2.ogg', vol = 50, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + sparks() + flash_lighting_fx(range = 3, power = 3, color = LIGHT_COLOR_CYAN) + if(!target.adjust_weight_class(-1)) + to_chat(user, span_bolddanger("Bluespace compression has encountered a critical error and stopped working, please report this your superiors.")) + return + SEND_SIGNAL(target, COMSIG_ITEM_COMPRESSED, user, src) + charges -= 1 + to_chat(user, span_boldnotice("You successfully compress [target]! [src] now has [charges] charges.")) + +/obj/item/compression_kit/attackby(obj/item/stack/bs, mob/user, params) + . = ..() + var/static/list/bs_typecache = typecacheof(list(/obj/item/stack/ore/bluespace_crystal, /obj/item/stack/sheet/bluespace_crystal)) + if(is_type_in_typecache(bs, bs_typecache) && bs.use(1)) + charges += 2 + to_chat(user, span_notice("You insert [bs] into [src]. It now has [charges] charges.")) + +/obj/item/compression_kit/attackby_storage_insert(datum/storage, atom/storage_holder, mob/user) + . = ..() + if(HAS_TRAIT(storage_holder, TRAIT_BYPASS_COMPRESS_CHECK)) + return FALSE diff --git a/monkestation/code/game/objects/items/devices/scanners/gas_analyzer.dm b/monkestation/code/game/objects/items/devices/scanners/gas_analyzer.dm new file mode 100644 index 000000000000..3747d68a2550 --- /dev/null +++ b/monkestation/code/game/objects/items/devices/scanners/gas_analyzer.dm @@ -0,0 +1,7 @@ +/obj/item/analyzer/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if(proximity_flag || can_see(user, target, ranged_scan_distance)) + var/turf/target_turf = get_turf(target) + for(var/obj/effect/anomaly/anomaly in target_turf) + if(anomaly.scan_anomaly(user, src)) + return AFTERATTACK_PROCESSED_ITEM + return ..() diff --git a/monkestation/code/game/objects/items/food/misc.dm b/monkestation/code/game/objects/items/food/misc.dm new file mode 100644 index 000000000000..ebffd34bc3a0 --- /dev/null +++ b/monkestation/code/game/objects/items/food/misc.dm @@ -0,0 +1,13 @@ +/obj/item/food/honeydewslice + name = "honeydew melon slice" + desc = "a sweet slice of honeydew" + icon = 'monkestation/icons/obj/food/misc.dmi' + icon_state = "honeydewslice" + food_reagents = list( + /datum/reagent/consumable/nutriment/vitamin = 0.25, + /datum/reagent/consumable/nutriment = 0.75 + ) + tastes = list("watery honey" = 1) + foodtypes = FRUIT + food_flags = FOOD_FINGER_FOOD + w_class = WEIGHT_CLASS_SMALL diff --git a/monkestation/code/game/objects/items/jukebox_beacon.dm b/monkestation/code/game/objects/items/jukebox_beacon.dm new file mode 100644 index 000000000000..de9650818f58 --- /dev/null +++ b/monkestation/code/game/objects/items/jukebox_beacon.dm @@ -0,0 +1,23 @@ +/obj/item/jukebox_beacon + name = "jukebox beacon" + desc = "N.T. jukebox beacon, toss it down and you will have a complementary jukebox delivered to you. It comes with a free wrench to move it after deployment." + icon = 'monkestation/icons/obj/items_and_weapons.dmi' + icon_state = "music_beacon" + var/used = FALSE + +/obj/item/jukebox_beacon/attack_self() + if(used) + return + loc.visible_message(span_warning("\The [src] begins to beep loudly!")) + used = TRUE + addtimer(CALLBACK(src, PROC_REF(launch_payload)), 4 SECONDS) + +/obj/item/jukebox_beacon/proc/launch_payload() + if(QDELETED(src)) + return + podspawn(list( + "target" = get_turf(src), + "spawn" = list(/obj/item/wrench, /obj/machinery/media/jukebox), + "style" = STYLE_CENTCOM + )) + qdel(src) diff --git a/monkestation/code/game/objects/items/miningweapons.dm b/monkestation/code/game/objects/items/miningweapons.dm index 5f40110608ae..e75d782c75bc 100644 --- a/monkestation/code/game/objects/items/miningweapons.dm +++ b/monkestation/code/game/objects/items/miningweapons.dm @@ -181,322 +181,9 @@ overrides_twohandrequired = TRUE override_twohandedsprite = TRUE - /obj/item/kinetic_crusher/claw/Initialize(mapload) . = ..() AddComponent(/datum/component/butchering, \ speed = 5 SECONDS, \ effectiveness = 100, \ ) - -//Proto-Kinetic Accelerators - -/obj/item/gun/energy/recharge/kinetic_accelerator/railgun - name = "proto-kinetic railgun" - desc = "Before the nice streamlined and modern day Proto-Kinetic Accelerator was created, multiple designs were drafted by the Mining Research and Development \ - team. Many were failures, including this one, which came out too bulky and too ineffective. Well recently the MR&D Team got drunk and said 'fuck it we ball' and \ - went back to the bulky design, overclocked it, and made it functional, turning it into what is essentially a literal man portable particle accelerator. \ - The design results in a massive hard to control blast of kinetic energy, with the power to punch right through creatures and cause massive damage. The \ - only problem with the design is that it is so bulky you need to carry it with two hands, and the technology has been outfitted with a special firing pin \ - that denies use near or on the station, due to its destructive nature." - icon = 'monkestation/icons/obj/guns/guns.dmi' - icon_state = "kineticrailgun" - base_icon_state = "kineticrailgun" - inhand_icon_state = "kineticgun" - w_class = WEIGHT_CLASS_HUGE - pin = /obj/item/firing_pin/wastes - recharge_time = 3 SECONDS - ammo_type = list(/obj/item/ammo_casing/energy/kinetic/railgun) - item_flags = NONE - obj_flags = UNIQUE_RENAME - weapon_weight = WEAPON_HEAVY - can_bayonet = FALSE - max_mod_capacity = 0 //fuck off - recoil = 3 //railgun go brrrrr - gun_flags = NOT_A_REAL_GUN - disablemodification = TRUE - -/obj/item/gun/energy/recharge/kinetic_accelerator/repeater - name = "proto-kinetic repeater" - desc = "During the pizza party celebrating the release of the new crusher designs, the Mining Research and Development team members were only allowed one slice. \ - One member exclaimed 'I wish we could have more than one slice' and another replied 'I wish we could shoot the accelerator more than once' and thus, the repeater \ - on the spot. The repeater trades a bit of power for the ability to fire three shots before becoming empty, while retaining the ability to fully recharge in one \ - go. The extra technology packed inside to make this possible unfortunately reduces mod space meaning you cant carry as many mods compared to a regular accelerator." - icon = 'monkestation/icons/obj/guns/guns.dmi' - icon_state = "kineticrepeater" - base_icon_state = "kineticrepeater" - inhand_icon_state = "kineticgun" - recharge_time = 2 SECONDS - ammo_type = list(/obj/item/ammo_casing/energy/kinetic/repeater) - item_flags = NONE - obj_flags = UNIQUE_RENAME - weapon_weight = WEAPON_LIGHT - can_bayonet = TRUE - knife_x_offset = 20 - knife_y_offset = 12 - max_mod_capacity = 60 - -/obj/item/gun/energy/recharge/kinetic_accelerator/shotgun - name = "proto-kinetic shotgun" - desc = "During the crusher design pizza party, one member of the Mining Research and Development team brought out a real riot shotgun, and killed three \ - other research members with one blast. The MR&D Director immedietly thought of a genuis idea, creating the proto-kinetic shotgun moments later, which he \ - immedietly used to execute the research member who brought the real shotgun. The proto-kinetic shotgun trades off some mod capacity and cooldown in favor \ - of firing three shots at once with reduce range and power. The total damage of all three shots is higher than a regular PKA but the individual shots are weaker." - icon = 'monkestation/icons/obj/guns/guns.dmi' - icon_state = "kineticshotgun" - base_icon_state = "kineticshotgun" - inhand_icon_state = "kineticgun" - recharge_time = 2 SECONDS - ammo_type = list(/obj/item/ammo_casing/energy/kinetic/shotgun) - item_flags = NONE - obj_flags = UNIQUE_RENAME - weapon_weight = WEAPON_LIGHT - can_bayonet = TRUE - knife_x_offset = 20 - knife_y_offset = 12 - max_mod_capacity = 60 - -/obj/item/gun/energy/recharge/kinetic_accelerator/glock - name = "proto-kinetic pistol" - desc = "During the pizza party for the Mining Research and Development team, one special snowflake researcher wanted a mini murphy instead of a regular \ - pizza slice, so reluctantly the Director bought him his mini murphy, which the dumbass immedietly dropped ontop of a PKA. Suddenly the idea to create \ - a 'build your own PKA' design was created. The proto-kinetic pistol is arguably worse than the base PKA, sporting lower damage and range. But this lack \ - of base efficiency allows room for nearly double the mods, making it truely 'your own PKA'." - icon = 'monkestation/icons/obj/guns/guns.dmi' - icon_state = "kineticpistol" - base_icon_state = "kineticpistol" - inhand_icon_state = "kineticgun" - recharge_time = 2 SECONDS - ammo_type = list(/obj/item/ammo_casing/energy/kinetic/glock) - item_flags = NONE - obj_flags = UNIQUE_RENAME - weapon_weight = WEAPON_LIGHT - can_bayonet = FALSE - max_mod_capacity = 200 - -/obj/item/gun/energy/recharge/kinetic_accelerator/shockwave - name = "proto-kinetic shockwave" - desc = "Quite frankly, we have no idea how the Mining Research and Development team came up with this one, all we know is that alot of \ - beer was involved. This proto-kinetic design will slam the ground, creating a shockwave around the user, with the same power as the base PKA.\ - The only downside is the lowered mod capacity, the lack of range it offers, and the higher cooldown, but its pretty good for clearing rocks." - icon = 'monkestation/icons/obj/guns/guns.dmi' - icon_state = "kineticshockwave" - base_icon_state = "kineticshockwave" - inhand_icon_state = "kineticgun" - recharge_time = 2 SECONDS - ammo_type = list(/obj/item/ammo_casing/energy/kinetic/shockwave) - item_flags = NONE - obj_flags = UNIQUE_RENAME - weapon_weight = WEAPON_LIGHT - can_bayonet = FALSE - max_mod_capacity = 60 - -/obj/item/gun/energy/recharge/kinetic_accelerator/m79 - name = "proto-kinetic grenade launcher" - desc = "Made in a drunk frenzy during the creation of the kinetic railgun, the kinetic grenade launcher fires the same bombs used by \ - the mining modsuit. Due to the technology needed to pack the bombs into this weapon, there is no space for modification." - icon = 'monkestation/icons/obj/guns/guns.dmi' - icon_state = "kineticglauncher" - base_icon_state = "kineticglauncher" - inhand_icon_state = "kineticgun" - pin = /obj/item/firing_pin/wastes - recharge_time = 2 SECONDS - ammo_type = list(/obj/item/ammo_casing/energy/kinetic/m79) - item_flags = NONE - obj_flags = UNIQUE_RENAME - w_class = WEIGHT_CLASS_HUGE - weapon_weight = WEAPON_HEAVY - can_bayonet = FALSE - max_mod_capacity = 0 - disablemodification = TRUE - -//Accelerator Casing -/obj/item/ammo_casing/energy/kinetic/railgun - projectile_type = /obj/projectile/kinetic/railgun - select_name = "kinetic" - e_cost = 500 - fire_sound = 'sound/weapons/beam_sniper.ogg' - -/obj/item/ammo_casing/energy/kinetic/repeater - projectile_type = /obj/projectile/kinetic/repeater - select_name = "kinetic" - e_cost = 150 //about three shots - fire_sound = 'sound/weapons/kenetic_accel.ogg' - -/obj/item/ammo_casing/energy/kinetic/shotgun - projectile_type = /obj/projectile/kinetic/shotgun - select_name = "kinetic" - e_cost = 500 - pellets = 3 - variance = 50 - fire_sound = 'sound/weapons/kenetic_accel.ogg' - -/obj/item/ammo_casing/energy/kinetic/glock - projectile_type = /obj/projectile/kinetic/glock - select_name = "kinetic" - e_cost = 500 - fire_sound = 'sound/weapons/kenetic_accel.ogg' - -/obj/item/ammo_casing/energy/kinetic/shockwave - projectile_type = /obj/projectile/kinetic/shockwave - select_name = "kinetic" - e_cost = 500 - pellets = 8 - variance = 360 - fire_sound = 'sound/weapons/gun/general/cannon.ogg' - -/obj/item/ammo_casing/energy/kinetic/m79 - projectile_type = /obj/projectile/bullet/reusable/mining_bomb //uses the mining bomb projectile from the mining modsuit - select_name = "kinetic" - e_cost = 500 - fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg' - -//Accelerator Projectiles -/obj/projectile/kinetic/railgun - name = "hyper kinetic force" - icon_state = null - damage = 100 - damage_type = BRUTE - armor_flag = BOMB - range = 7 - log_override = TRUE - pressure_decrease = 0.10 //Pressured enviorments are a no go for the railgun - speed = 0.1 //NYOOM - projectile_piercing = PASSMOB - -/obj/projectile/kinetic/repeater - name = "rapid kinetic force" - icon_state = null - damage = 20 - damage_type = BRUTE - armor_flag = BOMB - range = 4 - log_override = TRUE - -/obj/projectile/kinetic/shotgun - name = "split kinetic force" - icon_state = null - damage = 20 - damage_type = BRUTE - armor_flag = BOMB - range = 3 - log_override = TRUE - -/obj/projectile/kinetic/glock - name = "light kinetic force" - icon_state = null - damage = 10 - damage_type = BRUTE - armor_flag = BOMB - range = 3 - log_override = TRUE - -/obj/projectile/kinetic/shockwave - name = "concussive kinetic force" - icon_state = null - damage = 40 - damage_type = BRUTE - armor_flag = BOMB - range = 1 - log_override = TRUE - -//Wastes firing pin - restricts a weapon to only outside when mining - based on area defines not z-level - -/obj/item/firing_pin/wastes - name = "Wastes firing pin" - desc = "This safety firing pin allows weapons to be fired only outside on the wastes of lavaland or icemoon." - fail_message = "Wastes check failed! - Try getting further from the station first." - pin_hot_swappable = FALSE - pin_removable = FALSE - var/list/wastes = list(/area/icemoon/underground/unexplored/rivers, - /area/icemoon/surface/outdoors, - /area/icemoon/surface/outdoors/unexplored/rivers/no_monsters, - /area/icemoon/underground/unexplored/rivers/deep/shoreline, - /area/icemoon/underground/explored, - /area/lavaland/surface/outdoors, - /area/lavaland/surface/outdoors/unexplored/danger, - /area/lavaland/surface/outdoors/unexplored, - /area/lavaland/surface/outdoors/explored, - /area/ocean/generated, - /area/ocean/generated_above, - /area/ruin/) - -/obj/item/firing_pin/wastes/pin_auth(mob/living/user) - if(!istype(user)) - return FALSE - if (is_type_in_list(get_area(user), wastes)) - return TRUE - return FALSE - - -//ADMIN ONLY MEMES -/obj/item/gun/energy/recharge/kinetic_accelerator/meme - name = "adminium reaper" - desc = "Mining RnD broke the fabric of space time, please return to your nearest centralcommand officer. WARNING FROM THE MINING RND DIRECTOR : DO NOT RAPIDLY PULL TRIGGER : FABRIC OF SPACE TIME LIABLE TO BREAK " - icon_state = "kineticgun" - base_icon_state = "kineticgun" - inhand_icon_state = "kineticgun" - recharge_time = 0.1 - ammo_type = list(/obj/item/ammo_casing/energy/kinetic/meme) - item_flags = NONE - obj_flags = UNIQUE_RENAME - weapon_weight = WEAPON_LIGHT - can_bayonet = TRUE - knife_x_offset = 20 - knife_y_offset = 12 - max_mod_capacity = 420 - -/obj/item/ammo_casing/energy/kinetic/meme - projectile_type = /obj/projectile/kinetic/meme - select_name = "kinetic" - e_cost = 1 - pellets = 69 - variance = 90 - fire_sound = 'sound/effects/adminhelp.ogg' - variance = 3 - -/obj/projectile/kinetic/meme - name = "proto kinetic meme force" - icon_state = null - damage = 420 - damage_type = BRUTE - range = 300 - log_override = TRUE - pressure_decrease = 1 - dismemberment = 10 - catastropic_dismemberment = TRUE - hitsound = 'sound/effects/adminhelp.ogg' - -/obj/item/gun/energy/recharge/kinetic_accelerator/meme/nonlethal - name = "adminium stunner" - desc = "Mining RnD broke the fabric of space time AGAIN, please return to your nearest centralcommand officer. WARNING FROM THE MINING RND DIRECTOR : DO NOT RAPIDLY PULL TRIGGER : FABRIC OF SPACE TIME LIABLE TO BREAK \ - Im being bullied by the admins" - icon_state = "kineticgun" - base_icon_state = "kineticgun" - inhand_icon_state = "kineticgun" - recharge_time = 0.1 - ammo_type = list(/obj/item/ammo_casing/energy/kinetic/meme/nonlethal) - can_bayonet = FALSE - max_mod_capacity = 0 - -/obj/item/ammo_casing/energy/kinetic/meme/nonlethal - projectile_type = /obj/projectile/kinetic/meme/nonlethal - select_name = "kinetic" - fire_sound = 'sound/effects/adminhelp.ogg' - -/obj/projectile/kinetic/meme/nonlethal - name = "surprisingly soft proto kinetic meme force" - damage = 0 - dismemberment = 0 - catastropic_dismemberment = FALSE - stun = 69 - knockdown = 69 - paralyze = 69 - immobilize = 69 - unconscious = 69 - eyeblur = 69 - drowsy = 69 SECONDS - jitter = 69 SECONDS - stamina = 69 SECONDS - stutter = 69 SECONDS - slur = 69 SECONDS diff --git a/monkestation/code/game/objects/items/storage/crate.dm b/monkestation/code/game/objects/items/storage/crate.dm index f3415ce707f3..1f1a4708321d 100644 --- a/monkestation/code/game/objects/items/storage/crate.dm +++ b/monkestation/code/game/objects/items/storage/crate.dm @@ -59,9 +59,7 @@ new /obj/item/toy/balloon/syndicate(src) new /obj/item/storage/box/syndimaid(src) if(44,45,46) - new /obj/item/cardboard_cutout{ - starting_cutout = "Xenomorph Maid" - }(src) + new /obj/item/cardboard_cutout/xeno_maid(src) new /obj/item/clothing/neck/maid(src) new /obj/item/clothing/head/costume/maidheadband(src) new /obj/item/clothing/gloves/maid(src) @@ -184,7 +182,7 @@ new /obj/item/toy/plush/ratplush(src) new /obj/item/toy/plush/narplush(src) if(94) - new /obj/item/clothing/under/misc/syndicate_souvenir(src) + new /obj/machinery/nuclearbomb/bee(src) //just replaces the syndicate tshirt with the bomb if(96) new /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child(src) if(95) @@ -223,3 +221,6 @@ new /obj/item/stack/spacecash/c10000(src) if(100) //Jackpot new /obj/item/storage/backpack/holding(src) + +/obj/item/cardboard_cutout/xeno_maid + starting_cutout = "Xenomorph Maid" diff --git a/monkestation/code/game/objects/items/storage/uplink_kits.dm b/monkestation/code/game/objects/items/storage/uplink_kits.dm index 073c2ef859a0..09b754b22d84 100644 --- a/monkestation/code/game/objects/items/storage/uplink_kits.dm +++ b/monkestation/code/game/objects/items/storage/uplink_kits.dm @@ -106,6 +106,7 @@ // Paper guide new /obj/item/paper/contractor_guide(src) + new /obj/item/pinpointer/area_pinpointer(src) /obj/item/storage/box/syndie_kit/contract_kit/midround/PopulateContents() // You get one item from each sub list diff --git a/monkestation/code/game/turfs/open/floor/misc_floor.dm b/monkestation/code/game/turfs/open/floor/misc_floor.dm new file mode 100644 index 000000000000..994ceea4107b --- /dev/null +++ b/monkestation/code/game/turfs/open/floor/misc_floor.dm @@ -0,0 +1,29 @@ +/obj/item/stack/tile/sandy_dirt + name = "sandy dirt tiles" + singular_name = "sandy dirt tile" + desc = "A flat tile of dirt." + icon = 'monkestation/icons/obj/tiles.dmi' + icon_state = "tile_sandy_dirt" + inhand_icon_state = "tile-sepia" + turf_type = /turf/open/floor/sandy_dirt + merge_type = /obj/item/stack/tile/sandy_dirt + +/turf/open/floor/sandy_dirt + gender = PLURAL + name = "dirt" + desc = "Upon closer examination, it's still dirt." + icon = 'icons/turf/floors.dmi' + icon_state = "sand" + base_icon_state = "sand" + bullet_bounce_sound = null + footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + tiled_dirt = FALSE + + floor_tile = /obj/item/stack/tile/sandy_dirt + +/turf/open/floor/sandy_dirt/break_tile() + . = ..() + icon_state = "sand_damaged" diff --git a/monkestation/code/modules/aesthetics/mobs/slime.dm b/monkestation/code/modules/aesthetics/mobs/slime.dm index 98a9eec3ab89..d660145fb9ba 100644 --- a/monkestation/code/modules/aesthetics/mobs/slime.dm +++ b/monkestation/code/modules/aesthetics/mobs/slime.dm @@ -1,11 +1,8 @@ -/mob/living/simple_animal/slime - icon = 'monkestation/icons/mob/slimes.dmi' - /obj/item/stock_parts/cell/emproof/slime - icon = 'monkestation/icons/mob/slimes.dmi' + icon = 'monkestation/code/modules/slimecore/icons/slimes.dmi' /obj/item/slime_extract - icon = 'monkestation/icons/mob/slimes.dmi' + icon = 'monkestation/code/modules/slimecore/icons/slimes.dmi' -/obj/item/stock_parts/cell/high/slime_hypercharged - icon = 'monkestation/icons/mob/slimes.dmi' +/obj/item/stock_parts/cell/emproof/slime/hypercharged + icon = 'monkestation/code/modules/slimecore/icons/slimes.dmi' diff --git a/monkestation/code/modules/antagonists/_common/antag_datum.dm b/monkestation/code/modules/antagonists/_common/antag_datum.dm index 084283f4b0d5..17d99c5b4962 100644 --- a/monkestation/code/modules/antagonists/_common/antag_datum.dm +++ b/monkestation/code/modules/antagonists/_common/antag_datum.dm @@ -1,3 +1,14 @@ +/datum/antagonist + ///The list of keys that are valid to see our antag hud/of huds we can see + var/list/hud_keys + +///Set our hud_keys, please only use this proc when changing them, if override_old_keys is FALSE then we will simply add keys, otherwise we we set our keys to only be passed ones +/datum/antagonist/proc/set_hud_keys(list/keys, override_old_keys = FALSE) + if(!islist(keys)) + keys = list(keys) + + hud_keys = (override_old_keys ? keys : keys + hud_keys) + /datum/antagonist/proc/antag_token(datum/mind/hosts_mind, mob/spender) SHOULD_CALL_PARENT(FALSE) if(isobserver(spender)) diff --git a/monkestation/code/modules/antagonists/_common/antag_hud.dm b/monkestation/code/modules/antagonists/_common/antag_hud.dm new file mode 100644 index 000000000000..55bf9b62cad8 --- /dev/null +++ b/monkestation/code/modules/antagonists/_common/antag_hud.dm @@ -0,0 +1,15 @@ +/datum/atom_hud/alternate_appearance/basic/has_antagonist + ///The key or list of keys that are valid to see this hud, if unset then it will display to everyone with the antag datum like normal + var/list/valid_keys + +/datum/atom_hud/alternate_appearance/basic/has_antagonist/mobShouldSee(mob/M) + var/datum/antagonist/antag_datum = M.mind?.has_antag_datum(antag_datum_type) + if(!antag_datum) + return FALSE + + if(!valid_keys) + return TRUE + + if(!islist(valid_keys)) + valid_keys = list(valid_keys) + return length(valid_keys - antag_datum.hud_keys) != length(valid_keys) diff --git a/monkestation/code/modules/antagonists/brainwashing/brainwashing.dm b/monkestation/code/modules/antagonists/brainwashing/brainwashing.dm index 3b1def375843..68c404ccf2b4 100644 --- a/monkestation/code/modules/antagonists/brainwashing/brainwashing.dm +++ b/monkestation/code/modules/antagonists/brainwashing/brainwashing.dm @@ -43,10 +43,6 @@ user.clear_alert(ALERT_BRAINWASHED) UnregisterSignal(user, COMSIG_MOB_CLIENT_LOGIN) -/datum/antagonist/brainwashed/on_mindshield(mob/implanter) - owner.remove_antag_datum(/datum/antagonist/brainwashed) - return COMPONENT_MINDSHIELD_DECONVERTED - /datum/antagonist/brainwashed/proc/greet_on_login(mob/body) SIGNAL_HANDLER if(popup_shown) diff --git a/monkestation/code/modules/antagonists/clock_cult/scriptures/preservation/summon_marauder.dm b/monkestation/code/modules/antagonists/clock_cult/scriptures/preservation/summon_marauder.dm index 42ee14738f23..79b336ca282d 100644 --- a/monkestation/code/modules/antagonists/clock_cult/scriptures/preservation/summon_marauder.dm +++ b/monkestation/code/modules/antagonists/clock_cult/scriptures/preservation/summon_marauder.dm @@ -23,7 +23,15 @@ /datum/scripture/marauder/invoke() - var/list/candidates = poll_ghost_candidates("Do you want to play as a Clockwork Marauder?", ROLE_CLOCK_CULTIST, FALSE, 100, POLL_IGNORE_CONSTRUCT) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + "Do you want to play as a Clockwork Marauder?", + check_jobban = ROLE_CLOCK_CULTIST, + role = ROLE_CLOCK_CULTIST, + poll_time = 10 SECONDS, + ignore_category = POLL_IGNORE_CONSTRUCT, + pic_source = /mob/living/basic/clockwork_marauder, + role_name_text = "clockwork marauder" + ) if(length(candidates)) selected = pick(candidates) diff --git a/monkestation/code/modules/antagonists/clock_cult/structures/eminence_beacon.dm b/monkestation/code/modules/antagonists/clock_cult/structures/eminence_beacon.dm index 0772c72c5747..b6676c23bb29 100644 --- a/monkestation/code/modules/antagonists/clock_cult/structures/eminence_beacon.dm +++ b/monkestation/code/modules/antagonists/clock_cult/structures/eminence_beacon.dm @@ -42,7 +42,14 @@ return if(!eminence) - var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you want to play as the eminence?", ROLE_CLOCK_CULTIST, poll_time = 10 SECONDS) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + "Do you want to play as the eminence", + check_jobban = ROLE_CLOCK_CULTIST, + role = ROLE_CLOCK_CULTIST, + poll_time = 10 SECONDS, + pic_source = /mob/living/eminence, + role_name_text = "eminence" + ) if(LAZYLEN(candidates)) eminence = pick(candidates) diff --git a/monkestation/code/modules/antagonists/clock_cult/structures/sigil/sigil_vitality.dm b/monkestation/code/modules/antagonists/clock_cult/structures/sigil/sigil_vitality.dm index 6b8d53b9bc90..b75111bd7ab4 100644 --- a/monkestation/code/modules/antagonists/clock_cult/structures/sigil/sigil_vitality.dm +++ b/monkestation/code/modules/antagonists/clock_cult/structures/sigil/sigil_vitality.dm @@ -44,8 +44,15 @@ if(!affected_mob.client || affected_mob.client.is_afk()) set waitfor = FALSE - var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as a [affected_mob.real_name], an inactive clock cultist?", \ - ROLE_CLOCK_CULTIST, ROLE_CLOCK_CULTIST, 5 SECONDS, affected_mob) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob( + "Do you want to play as a [affected_mob.real_name], an inactive clock cultist?", + check_jobban = ROLE_CLOCK_CULTIST, + role = ROLE_CLOCK_CULTIST, + poll_time = 5 SECONDS, + target_mob = affected_mob, + pic_source = affected_mob, + role_name_text = "clock cultist" + ) if(LAZYLEN(candidates)) var/mob/dead/observer/candidate = pick(candidates) to_chat(affected_mob.mind, "Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form.") diff --git a/monkestation/code/modules/antagonists/contractor/datums/contractor_items.dm b/monkestation/code/modules/antagonists/contractor/datums/contractor_items.dm index 09a9401e0287..d6afdb55a1c8 100644 --- a/monkestation/code/modules/antagonists/contractor/datums/contractor_items.dm +++ b/monkestation/code/modules/antagonists/contractor/datums/contractor_items.dm @@ -86,8 +86,15 @@ to_chat(user, span_notice("The uplink vibrates quietly, connecting to nearby agents...")) - var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you want to play as the Contractor Support Unit for [user.real_name]?", ROLE_TRAITOR, FALSE, 100, \ - POLL_IGNORE_CONTRACTOR_SUPPORT) + var/list/candidates = SSpolling.poll_ghost_candidates( + question = "Do you want to play as the Contractor Support Unit for [user.real_name]?", + check_jobban = ROLE_TRAITOR, + role = ROLE_TRAITOR, + poll_time = 10 SECONDS, + ignore_category = POLL_IGNORE_CONTRACTOR_SUPPORT, + pic_source = user, + role_name_text = "contractor support unit", + ) if(LAZYLEN(candidates)) var/mob/dead/observer/candidate = pick(candidates) diff --git a/monkestation/code/modules/antagonists/contractor/datums/outfit.dm b/monkestation/code/modules/antagonists/contractor/datums/outfit.dm index bfa4b00994a5..31e8eda19d2d 100644 --- a/monkestation/code/modules/antagonists/contractor/datums/outfit.dm +++ b/monkestation/code/modules/antagonists/contractor/datums/outfit.dm @@ -18,7 +18,8 @@ /obj/item/storage/box/survival/syndie, /obj/item/storage/box/syndie_kit/contract_kit/midround, /obj/item/knife/combat/survival, - /obj/item/pinpointer/crew/contractor + /obj/item/pinpointer/crew/contractor, + /obj/item/pinpointer/area_pinpointer, ) implants = list( diff --git a/monkestation/code/modules/antagonists/contractor/items/misc.dm b/monkestation/code/modules/antagonists/contractor/items/misc.dm index 12f4db60ecf3..13fa368c573d 100644 --- a/monkestation/code/modules/antagonists/contractor/items/misc.dm +++ b/monkestation/code/modules/antagonists/contractor/items/misc.dm @@ -12,3 +12,240 @@ desc = "A modified fulton pack that can be used indoors thanks to Bluespace technology. Favored by Syndicate Contractors." icon = 'monkestation/icons/obj/items/fulton.dmi' can_use_indoors = TRUE + +/obj/item/pinpointer + var/special_examine = FALSE + +/obj/item/pinpointer/area_pinpointer + name = "hacked pinpointer" + desc = "A handheld tracking device that locks onto certain signals. This one seems to have wires sticking out of it, and can point onto areas instead of humans." + icon_state = "pinpointer_syndicate" + worn_icon_state = "pinpointer_black" + special_examine = TRUE + /// We save our position every time we scan_for_target() + /// Its used to check if we moved so we may ignore calculations when being still, along with calculations between us and the target turfs. + var/turf/pinpointer_turf + /// The area we are currently tracking + var/area/tracked_area + + /// The list of all open turfs within our tracked area + var/list/turf/all_tracked_area_turfs = list() + /// The list of all open turfs within our tracked area that we dont track, used exclusivelly for the debug pinpointer + var/list/turf/open/not_tracked_area_turfs = list() + /// The list of all open turfs within our tracked area, trimmed down to only the turfs we track + var/list/turf/open/tracked_area_turfs = list() + /// The list of all turfs with doors on them, used for the door mode + var/list/turf/open/door_turfs = list() + + /// a switch, if TRUE it will display all door turfs instead of all open turfs + var/door_mode = FALSE + +/obj/item/pinpointer/area_pinpointer/Destroy() + tracked_area = null + pinpointer_turf = null + + all_tracked_area_turfs = null + not_tracked_area_turfs = null + tracked_area_turfs = null + door_turfs = null + + return ..() + +/obj/item/pinpointer/area_pinpointer/AltClick(mob/living/carbon/user) + if(!istype(user) || !user.can_perform_action(src)) + return + user.visible_message(span_notice("[user] quietly flips a switch in [user.p_their()] pinpointer."), span_notice("You quietly flip the switch your pinpointer.")) + door_mode = !door_mode + +// we need to get our own examine text, since it would be "tracking the floor" otherwise +/obj/item/pinpointer/area_pinpointer/examine(mob/user) + . = ..() + if(target) + . += span_notice("It is currently tracking [tracked_area].") + if(door_mode) + . += span_notice("It is currently tracking the nearest door in the given area, alt+click to switch modes") + else + . += span_notice("It is currently tracking the nearest floor in the given area, alt+click to switch modes") + +/obj/item/pinpointer/area_pinpointer/get_direction_icon(here, there) + // if we are in an area, we cheat a bit and instead of tracking our target, we just display the icon of being in the location + for(var/turf/possible_turf as anything in all_tracked_area_turfs) + if(pinpointer_turf == possible_turf) + return "pinon[alert ? "alert" : ""]direct[icon_suffix]" + + return ..() + +/obj/item/pinpointer/area_pinpointer/proc/create_target_turfs() + all_tracked_area_turfs = get_area_turfs(tracked_area) + // Treatment 1: store all open turfs, exclude all walls right-away and store open turfs with doors on a seperate variable + for(var/turf/floor as anything in all_tracked_area_turfs) // Lets go over everything and store the turfs we care about + if(floor.density) // catch all the walls, we dont want them + not_tracked_area_turfs += floor + continue + tracked_area_turfs += floor + if(locate(/obj/machinery/door/airlock) in floor) + door_turfs += floor + + // Treatment 2: Any tile that is not near a wall is removed from our list + // This majorly improves our performance in large rooms + for(var/turf/open/open_turf as anything in tracked_area_turfs) + var/marked_for_deletion = TRUE + + for(var/turf/unknown_turf as anything in RANGE_TURFS(1, open_turf)) + // we are near a wall, this turf is important + // this also ignores windows, might need to change it depending on how relevant it is + if(unknown_turf.density) + marked_for_deletion = FALSE + + if(marked_for_deletion) + not_tracked_area_turfs += open_turf + tracked_area_turfs -= open_turf // it has no walls around it, so this turf is just bloating calculations for tracking. Cut it off + +/obj/item/pinpointer/area_pinpointer/scan_for_target() + var/current_turf = drop_location() + + if(pinpointer_turf == current_turf) // if our position has not changed, we dont need to update our target. + return + + pinpointer_turf = current_turf + + // we dont need to track our target when they are in the area already + for(var/turf/possible_turf as anything in all_tracked_area_turfs) + if(pinpointer_turf == possible_turf) + return + + /// The turf that has the lowest possible range towards us and the area + var/turf/closest_turf + /// Whats the range between us and the closest turf? + var/closest_turf_range = 255 + if(!door_mode) + for(var/turf/open/floor as anything in tracked_area_turfs) // Lets go over every turf and check their distances for the closest tile + if(get_dist_euclidian(pinpointer_turf, floor) < closest_turf_range) + closest_turf_range = get_dist_euclidian(pinpointer_turf, floor) + closest_turf = floor + + else // if door_mode is TRUE, we instead want to track the nearest airlock instead of all turfs + for(var/turf/open/floor as anything in door_turfs) // Lets go over every door and check their distances for the closest tile + if(get_dist_euclidian(pinpointer_turf, floor) < closest_turf_range) + closest_turf_range = get_dist_euclidian(pinpointer_turf, floor) + closest_turf = floor + + target = closest_turf + +/obj/item/pinpointer/area_pinpointer/attack_self(mob/living/user) + if(active) + toggle_on() + user.visible_message(span_notice("[user] deactivates [user.p_their()] pinpointer."), span_notice("You deactivate your pinpointer.")) + + // empty the lists so we can fill it on the next activation with the new area's turfs + all_tracked_area_turfs = list() + not_tracked_area_turfs = list() + tracked_area_turfs = list() + door_turfs = list() + + return + + if(!user) + CRASH("[src] has had attack_self attempted by a non-existing user.") + + // This list should ONLY include areas that are on our z-level and are actually recognizable, else we confuse the contractor + var/list/possible_areas = list() + for(var/area/area in GLOB.areas) + var/our_z = user.z + var/area_z = area.z + if(!our_z) + // What the actual hell are you doing + CRASH("[src] was activated in an area without a valid z-level") + + if(our_z != area_z) + continue + + possible_areas += area + + if(!length(possible_areas)) + CRASH("[src] has failed to detect a valid area, this should never happen!") + + var/target_area = tgui_input_list(user, "Area to track", "Pinpoint", sort_list(possible_areas)) + if(isnull(target_area)) + return + if(QDELETED(src) || QDELETED(user) || !user.is_holding(src) || user.incapacitated()) + return + + tracked_area = target_area + + create_target_turfs() + + target = get_first_open_turf_in_area(target_area) // failsafe + + toggle_on() + + user.visible_message(span_notice("[user] activates [user.p_their()] pinpointer."), span_notice("You activate your pinpointer.")) + +/** + * Debug area pinpointer focuses on visualization, to better show how the area pinpointer interacts with turfs + * Red - This tile is ignored by tracking, but recognized as a part of the target area + * Green - This tile is a potential target, but not yet our current target + * Yellow - The tile would be a potential target, but the tracking is currently off due to the pinpointer being in its area + * Blue - This is the tile we are currently tracking + */ +/obj/item/pinpointer/area_pinpointer/debug + name = "debug area pinpointer" + desc = "A debug version of the area pinpointer, this one visualizes all of the turfs that are being tracked and ignored." + var/list/obj/machinery/door/airlock/affected_airlock_list = list() + +/obj/item/pinpointer/area_pinpointer/debug/create_target_turfs() + . = ..() + for(var/turf/non_tracked_turf as anything in not_tracked_area_turfs) // this tile will never be a potential target, no need to refresh it + non_tracked_turf.color = rgb(255, 0, 0) + non_tracked_turf.maptext = MAPTEXT("X") + + // we want to make the alpha of all the doors in the area lower so we can see the turf's colors easier + for(var/turf/open/door_turf as anything in door_turfs) + var/obj/machinery/door/airlock/affected_airlock = locate(/obj/machinery/door/airlock) in door_turf + if(!affected_airlock) + CRASH("[src] has tried to locate an airlock that was inside of the (door_turfs) list, but failed. This should never happen!") + + affected_airlock_list += affected_airlock + affected_airlock.alpha = 50 + +/obj/item/pinpointer/area_pinpointer/debug/scan_for_target() + . = ..() + // we dont track turfs when the person holding us is in the area we are pointing to + for(var/turf/possible_turf as anything in all_tracked_area_turfs) + if(pinpointer_turf == possible_turf) + for(var/turf/open/tracked_turf as anything in tracked_area_turfs) + tracked_turf.color = rgb(255, 255, 0) + tracked_turf.maptext = MAPTEXT("-") + return + + for(var/turf/open/tracked_turf as anything in tracked_area_turfs) + tracked_turf.color = rgb(0, 255, 0) + tracked_turf.maptext = MAPTEXT("+") + + target.color = rgb(0, 0, 255) // higher color priority than any other turfs + target.maptext = MAPTEXT("T") + +/obj/item/pinpointer/area_pinpointer/debug/attack_self(mob/living/user) + if(active) + for(var/turf/floor as anything in all_tracked_area_turfs) // we need to clear all the colors we created + floor.color = initial(floor.color) + floor.maptext = initial(floor.maptext) + + // we need to reset the alpha on the airlocks + for(var/obj/machinery/door/airlock/affected_airlock as anything in affected_airlock_list) + affected_airlock.alpha = initial(affected_airlock.alpha) + + affected_airlock_list = list() // empty da list when we are done cleaning + return ..() + +/obj/item/pinpointer/area_pinpointer/debug/Destroy() + if(active) + for(var/turf/floor as anything in all_tracked_area_turfs) // we need to clear all th- wait why am i getting dejavu? + floor.color = initial(floor.color) + floor.maptext = initial(floor.maptext) + + for(var/obj/machinery/door/airlock/affected_airlock as anything in affected_airlock_list) + affected_airlock.alpha = initial(affected_airlock.alpha) + + affected_airlock_list = null + return ..() diff --git a/monkestation/code/modules/antagonists/florida_man/_florida_man.dm b/monkestation/code/modules/antagonists/florida_man/_florida_man.dm index f3bdcf1f17d0..2525a4c7fd50 100644 --- a/monkestation/code/modules/antagonists/florida_man/_florida_man.dm +++ b/monkestation/code/modules/antagonists/florida_man/_florida_man.dm @@ -2,8 +2,10 @@ name = "Space Florida Man" roundend_category = "Florida Men" antagpanel_category = "Florida Man" + job_rank = ROLE_FLORIDA_MAN objectives = list() show_to_ghosts = TRUE + preview_outfit = /datum/outfit/florida_man_one /datum/antagonist/florida_man/on_gain() forge_objectives() diff --git a/monkestation/code/modules/antagonists/florida_man/florida_events.dm b/monkestation/code/modules/antagonists/florida_man/florida_events.dm index 2cb54c226321..d25aa8c25d8a 100644 --- a/monkestation/code/modules/antagonists/florida_man/florida_events.dm +++ b/monkestation/code/modules/antagonists/florida_man/florida_events.dm @@ -26,10 +26,16 @@ return H.equipOutfit(/datum/outfit/florida_man_four) /datum/round_event/ghost_role/florida_man/spawn_role() - var/list/candidates = get_candidates() + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + "Do you want to play as Florida Man?", + role = ROLE_FLORIDA_MAN, + poll_time = 20 SECONDS, + pic_source = /datum/antagonist/florida_man, + role_name_text = "florida man" + ) var/turf/spawn_loc = find_safe_turf()//Used for the Drop Pod type of spawn - if(!candidates.len) + if(!length(candidates)) return NOT_ENOUGH_PLAYERS var/mob/dead/selected = pick_n_take(candidates) diff --git a/monkestation/code/modules/antagonists/heretic/items/forbidden_book.dm b/monkestation/code/modules/antagonists/heretic/items/forbidden_book.dm new file mode 100644 index 000000000000..493dddb95d21 --- /dev/null +++ b/monkestation/code/modules/antagonists/heretic/items/forbidden_book.dm @@ -0,0 +1,2 @@ +/obj/item/codex_cicatrix + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF diff --git a/monkestation/code/modules/antagonists/heretic/items/heretic_armor.dm b/monkestation/code/modules/antagonists/heretic/items/heretic_armor.dm new file mode 100644 index 000000000000..773179d1261c --- /dev/null +++ b/monkestation/code/modules/antagonists/heretic/items/heretic_armor.dm @@ -0,0 +1,11 @@ +/obj/item/clothing/head/hooded/cult_hoodie/eldritch + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/obj/item/clothing/suit/hooded/cultrobes/eldritch + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/obj/item/clothing/head/hooded/cult_hoodie/void + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/obj/item/clothing/suit/hooded/cultrobes/void + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF diff --git a/monkestation/code/modules/antagonists/heretic/knowledge/ash_lore.dm b/monkestation/code/modules/antagonists/heretic/knowledge/ash_lore.dm new file mode 100644 index 000000000000..5d6a6eaac495 --- /dev/null +++ b/monkestation/code/modules/antagonists/heretic/knowledge/ash_lore.dm @@ -0,0 +1,18 @@ +/datum/heretic_knowledge/limited_amount/starting/base_ash/on_gain(mob/user, datum/antagonist/heretic/our_heretic) + . = ..() + RegisterSignal(user, COMSIG_CARBON_GAIN_WOUND, PROC_REF(on_wound_gain)) + +/datum/heretic_knowledge/limited_amount/starting/base_ash/on_lose(mob/user, datum/antagonist/heretic/our_heretic) + . = ..() + UnregisterSignal(user, COMSIG_CARBON_GAIN_WOUND) + +/datum/heretic_knowledge/limited_amount/starting/base_ash/proc/on_wound_gain(mob/living/carbon/source, datum/wound/burn/flesh/flesh_wound, obj/item/bodypart/bodypart) + SIGNAL_HANDLER + if(!istype(flesh_wound)) + return + // Ensure ash heretics never succumb to infections from burn wounds. + // The wound itself still remains an issue, it just won't get infected. + flesh_wound.infestation_rate = 0 + flesh_wound.infestation = 0 + flesh_wound.sanitization = INFINITY + flesh_wound.strikes_to_lose_limb = INFINITY diff --git a/monkestation/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm b/monkestation/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm new file mode 100644 index 000000000000..96014d32b322 --- /dev/null +++ b/monkestation/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm @@ -0,0 +1,12 @@ +/datum/status_effect/unholy_determination/on_apply() + . = ..() + owner.add_traits(list(TRAIT_SLEEPIMMUNE, TRAIT_FEARLESS, TRAIT_STABLEHEART, TRAIT_STABLELIVER, TRAIT_ANTICONVULSANT, TRAIT_TUMOR_SUPPRESSED), type) + owner.stamina.revitalize(forced = TRUE) + owner.SetSleeping(0) + owner.SetUnconscious(0) + owner.SetAllImmobility(0) + owner.set_resting(FALSE, silent = TRUE, instant = TRUE) + +/datum/status_effect/unholy_determination/on_remove() + . = ..() + REMOVE_TRAITS_IN(owner, type) diff --git a/monkestation/code/modules/antagonists/nukeop/equipment/nuclear_bomb/bee_nuke.dm b/monkestation/code/modules/antagonists/nukeop/equipment/nuclear_bomb/bee_nuke.dm new file mode 100644 index 000000000000..b36b1ecfd701 --- /dev/null +++ b/monkestation/code/modules/antagonists/nukeop/equipment/nuclear_bomb/bee_nuke.dm @@ -0,0 +1,42 @@ +/// A fake nuke that actually contains bee. +/obj/machinery/nuclearbomb/bee + name = "\improper Rayne Corp brand nuclear fission explosive" + desc = "One of the more successful achievements of the Rayne Corporation Biological Warfare Division, their nuclear fission explosives are renowned for being affordable to produce and devastatingly effective. Signs explain that though this particular device has been (hopefully) decommissioned, you should probably be careful around it considering it's a bomb. - at least, the sign says that's what it is. There seems to be a picture of a bee on the back." + proper_bomb = FALSE + /// The keg located within the beer nuke. + /// Reagent that is produced once the nuke detonates. + /// Round event control we might as well keep track of instead of locating every time + +/obj/machinery/nuclearbomb/bee/Initialize(mapload) + . = ..() + QDEL_NULL(core) + +/obj/machinery/nuclearbomb/bee/Destroy() + return ..() + + + +/obj/machinery/nuclearbomb/bee/actually_explode() + SSticker.roundend_check_paused = FALSE + var/turf/bomb_location = get_turf(src) + if(!bomb_location) + disarm_nuke() + return + if(is_station_level(bomb_location.z)) + addtimer(CALLBACK(src, PROC_REF(really_actually_explode)), 11 SECONDS) + else + visible_message(span_notice("[src] fizzes ominously.")) + + +/obj/machinery/nuclearbomb/bee/disarm_nuke(mob/disarmer) + exploding = FALSE + exploded = TRUE + return ..() + +/obj/machinery/nuclearbomb/bee/really_actually_explode(detonation_status) + //if it's always hooked in it'll override admin choices + disarm_nuke() + force_event(/datum/round_event_control/scrubber_clog/flood, "A bee nuke") + +/// signal sent from overflow control when it fires an event + diff --git a/monkestation/code/modules/antagonists/slasher/abilities/incorporealize.dm b/monkestation/code/modules/antagonists/slasher/abilities/incorporealize.dm index 4b1b4c34796c..242075f5052a 100644 --- a/monkestation/code/modules/antagonists/slasher/abilities/incorporealize.dm +++ b/monkestation/code/modules/antagonists/slasher/abilities/incorporealize.dm @@ -46,6 +46,15 @@ continue if(isdead(watcher)) continue + if(isaicamera(watcher)) + var/mob/camera/ai_eye/ai_eye = watcher + var/mob/living/silicon/ai/true_ai = ai_eye.ai + true_ai.disconnect_shell() // should never happen, lets try it anyway + true_ai.view_core() + to_chat(true_ai, span_warning("UNEXPECTED ENERGY SURGE -- RETURNING TO THE CORE")) + do_sparks(3, FALSE, true_ai) + true_ai.adjustBruteLoss(30) // same as a light explosion, to dis-encurage the AI always watching the slasher and telling their location + continue target.balloon_alert(owner, "you can only vanish unseen.") return diff --git a/monkestation/code/modules/antagonists/slasher/ghost_role.dm b/monkestation/code/modules/antagonists/slasher/ghost_role.dm index c3bcb3140536..2cfa064048f0 100644 --- a/monkestation/code/modules/antagonists/slasher/ghost_role.dm +++ b/monkestation/code/modules/antagonists/slasher/ghost_role.dm @@ -13,10 +13,17 @@ fakeable = FALSE /datum/round_event/ghost_role/slasher/spawn_role() - var/list/candidates = get_candidates() + var/list/candidates = SSpolling.poll_ghost_candidates( + question = "Do you want to play as a Slasher?", + role = ROLE_SLASHER, + check_jobban = ROLE_SLASHER, + poll_time = 20 SECONDS, + pic_source = /datum/antagonist/slasher, + role_name_text = "slasher" + ) var/turf/spawn_loc = find_safe_turf()//Used for the Drop Pod type of spawn - if(!candidates.len) + if(!length(candidates)) return NOT_ENOUGH_PLAYERS var/mob/dead/selected = pick_n_take(candidates) diff --git a/monkestation/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm b/monkestation/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm index 6d6c13d7db9d..dae5f7f4ff50 100644 --- a/monkestation/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm +++ b/monkestation/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm @@ -1,5 +1,5 @@ -/datum/spellbook_entry/mindswap +/*/datum/spellbook_entry/mindswap name = "Mindswap" desc = "This spell will randomly swap the minds of everyone around you, yourself included." spell_type = /datum/action/cooldown/spell/aoe/mind_swap - category = "Mobility" + category = "Mobility"*/ diff --git a/monkestation/code/modules/art_sci_overrides/artifact_components/borger.dm b/monkestation/code/modules/art_sci_overrides/artifact_components/borger.dm index cb57a7dbc55f..e87a58fbe398 100644 --- a/monkestation/code/modules/art_sci_overrides/artifact_components/borger.dm +++ b/monkestation/code/modules/art_sci_overrides/artifact_components/borger.dm @@ -8,16 +8,25 @@ /datum/artifact_activator/touch/carbon, /datum/artifact_activator/touch/silicon ) - explict_examine = "Vaguely Foreboding" - ///the time between each limb replacement + explict_examine = span_bolddanger("It is vaguely forboding, touching this might be a bad idea...") + /// The time between each limb replacement var/limb_replace_time = 1 SECONDS + /// People who've already touched it once. Touching it again will cause it to react. + var/list/first_touched + /// The cooldown between borgings. COOLDOWN_DECLARE(borg_cooldown) /datum/component/artifact/borger/effect_touched(mob/living/user) - if(!iscarbon(user) || !COOLDOWN_FINISHED(src, borg_cooldown)) + if(!iscarbon(user) || !COOLDOWN_FINISHED(src, borg_cooldown) || QDELETED(user.client) || did_robot_touch(user)) holder.visible_message(span_smallnoticeital("[holder] does not react to [user].")) return + if(!LAZYACCESS(first_touched, user)) + eat_limb(user) + LAZYSET(first_touched, user, TRUE) + COOLDOWN_START(src, borg_cooldown, 5 SECONDS) // so you don't get fucked over by spam-clicking it + return + var/mob/living/carbon/carbon_target = user var/timer = 2 SECONDS for (var/_limb in carbon_target.bodyparts) @@ -44,3 +53,15 @@ timer += 2 SECONDS addtimer(CALLBACK(carbon_target, TYPE_PROC_REF(/mob/, Robotize)), timer + 5) COOLDOWN_START(src, borg_cooldown, 10 SECONDS) + +/datum/component/artifact/borger/proc/eat_limb(mob/living/carbon/victim) + var/arm_name = victim.get_held_index_name(victim.active_hand_index) + victim.visible_message(span_warning("[holder] lashes out and clamps down on [victim], rapidly transmuting [victim.p_their()] [arm_name]!"), \ + span_userdanger("[holder] lashes out and clamps down onto your [arm_name], rapidly transmuting it into cold metal!")) + var/new_arm_type = (victim.active_hand_index % 2) ? /obj/item/bodypart/arm/left/robot : /obj/item/bodypart/arm/right/robot + victim.del_and_replace_bodypart(new new_arm_type) + victim.emote("scream") + +/datum/component/artifact/borger/proc/did_robot_touch(mob/living/carbon/user) + var/obj/item/bodypart/arm/active_arm = user.get_active_hand() + return istype(active_arm) && (active_arm.bodytype & BODYTYPE_ROBOTIC) diff --git a/monkestation/code/modules/art_sci_overrides/asteroids/asteroid_generation.dm b/monkestation/code/modules/art_sci_overrides/asteroids/asteroid_generation.dm index d1769261d410..0ea3c8152080 100644 --- a/monkestation/code/modules/art_sci_overrides/asteroids/asteroid_generation.dm +++ b/monkestation/code/modules/art_sci_overrides/asteroids/asteroid_generation.dm @@ -75,7 +75,7 @@ /// Cleanup our currently loaded mining template /proc/CleanupAsteroidMagnet(turf/center, size) - var/list/turfs_to_destroy = ReserveTurfsForAsteroidGeneration(center, size, space_only = FALSE) + var/list/turfs_to_destroy = ReserveTurfsForAsteroidGeneration(center, size, baseturf_only = FALSE) for(var/turf/T as anything in turfs_to_destroy) CHECK_TICK @@ -88,12 +88,12 @@ T.ChangeTurf(/turf/baseturf_bottom) /// Sanitizes a block of turfs to prevent writing over undesired locations -/proc/ReserveTurfsForAsteroidGeneration(turf/center, size, space_only = TRUE) +/proc/ReserveTurfsForAsteroidGeneration(turf/center, size, baseturf_only = TRUE) . = list() var/list/turfs = RANGE_TURFS(size, center) for(var/turf/T as anything in turfs) - if(space_only && !isspaceturf(T)) + if(baseturf_only && !islevelbaseturf(T)) continue if(!(istype(T.loc, /area/station/cargo/mining/asteroid_magnet))) continue diff --git a/monkestation/code/modules/art_sci_overrides/asteroids/asteroid_magnet.dm b/monkestation/code/modules/art_sci_overrides/asteroids/asteroid_magnet.dm index dfc3e33c5f42..82014ce46e2c 100644 --- a/monkestation/code/modules/art_sci_overrides/asteroids/asteroid_magnet.dm +++ b/monkestation/code/modules/art_sci_overrides/asteroids/asteroid_magnet.dm @@ -3,6 +3,7 @@ /obj/machinery/asteroid_magnet name = "asteroid magnet computer" + desc = "Control panel for the asteroid magnet." icon_state = "blackbox" resistance_flags = INDESTRUCTIBLE use_power = NO_POWER_USE @@ -28,10 +29,18 @@ var/coords_x = 0 var/coords_y = 0 - var/ping_result = "N/A
...
" + var/ping_result = "Awaiting first ping" /// Status of the user interface var/status = STATUS_OKAY + /// Boolean to keep track of state and protect against double summoning + var/summon_in_progress = FALSE + /// Are we currently automatically pinging the target? + var/Auto_pinging = FALSE + + + /// The cooldown between uses. + COOLDOWN_DECLARE(summon_cd) /obj/machinery/asteroid_magnet/Initialize(mapload) . = ..() @@ -51,186 +60,6 @@ GenerateMap() -/obj/machinery/asteroid_magnet/Topic(href, href_list) - . = ..() - if(.) - return - - var/list/map_offsets = map.return_offsets() - var/list/map_bounds = map.return_bounds() - var/value = text2num(href_list["x"] || href_list["y"]) - if(!isnull(value)) // round(null) = 0 - value = round(value, 1) - if("x" in href_list) - coords_x = WRAP(coords_x + map_offsets[1] + value, map_bounds[1] + map_offsets[1], map_bounds[2] + map_offsets[1]) - coords_x -= map_offsets[1] - updateUsrDialog() - - else if("y" in href_list) - coords_y = WRAP(coords_y + map_offsets[2] + value, map_bounds[3] + map_offsets[2], map_bounds[4] + map_offsets[2]) - coords_y -= map_offsets[2] - updateUsrDialog() - return - - if(href_list["ping"]) - ping(coords_x, coords_y) - updateUsrDialog() - return - - if(href_list["select"]) - var/datum/mining_template/T = locate(href_list["select"]) in available_templates - if(!T) - return - selected_template = T - updateUsrDialog() - return - - if(href_list["summon_selected"]) - summon_sequence() - return - -/obj/machinery/asteroid_magnet/ui_interact(mob/user, datum/tgui/ui) - var/content = list() - - content += {" -
-
- - Magnet Controls - - "} - - // X selector - content += {" -
- - X-Axis - -
-
[button_element(src, "-100", "x=-100")]
-
[button_element(src, "-10", "x=-10")]
-
[button_element(src, "-1", "x=-1")]
-
- [coords_x] -
-
[button_element(src, "1", "x=1")]
-
[button_element(src, "10", "x=10")]
-
[button_element(src, "100", "x=100")]
- --- -
-
- "} - - // Y selector - content += {" -
- - Y-Axis - -
-
[button_element(src, "-100", "y=-100")]
-
[button_element(src, "-10", "y=-10")]
-
[button_element(src, "-1", "y=-1")]
-
- [coords_y] -
-
[button_element(src, "1", "y=1")]
-
[button_element(src, "10", "y=10")]
-
[button_element(src, "100", "y=100")]
- --- -
-
- "} - - // Ping button - content += {" -
- - Ping - -
- [ping_result] -
-
- [button_element(src, "PING", "ping=1")] -
-
- "} - - // Summoner - content += {" -
- - Summon - -
- [status] -
-
- [button_element(src, "SUMMON", "summon_selected=1")] -
-
- "} - - // Close coordinates fieldset - content += "
" - - // Asteroids list fieldset - content += {" -
- - Celestial Bodies - - "} - // Selected asteroid container - var/asteroid_name - var/asteroid_desc - if(selected_template) - asteroid_name = selected_template.name - asteroid_desc = jointext(selected_template.get_description(), "") - - content += {" -
-
- [asteroid_name || "N/A"] -
- [asteroid_desc ? "
[asteroid_desc]
" : "
N/A
"] -
- "} - - // Asteroid list container - content += {" -
- "} - - var/i = 0 - for(var/datum/mining_template/template as anything in available_templates) - i++ - var/bg_color = i % 2 == 0 ? "#7c5500" : "#533200" - if(selected_template == template) - bg_color = "#e67300 !important" - content += {" -
- [template.name] ([template.x],[template.y]) -
- "} - - content += "
" - - content += {" - - "} - - - var/datum/browser/popup = new(user, "asteroidmagnet", name, 920, 475) - popup.set_content(jointext(content,"")) - popup.set_window_options("can_close=1;can_minimize=1;can_maximize=0;can_resize=1;titlebar=1;") - popup.open() - /obj/machinery/asteroid_magnet/proc/ping(coords_x, coords_y) var/datum/mining_template/T = map.return_coordinate(coords_x, coords_y) if(T && !T.found) @@ -257,30 +86,41 @@ if(dx < 0) // If the X-axis distance is negative, put it between 181 and 359. 180 and 360/0 are impossible, as that requires X == 0. angle = 360 - angle - ping_result = "AZIMUTH
[round(angle, 0.01)]" + ping_result = "AZIMUTH [round(angle, 0.01)]" else - ping_result = "ERR" + ping_result = "UKNOWN ERROR, NO ASTEROIDS DETECTED. PLEASE CONTACT CENTCOM TECHNICIANS" /// Test to see if we should clear the magnet area. /// Returns FALSE if it can clear, returns a string error message if it can't. -/obj/machinery/asteroid_magnet/proc/check_for_magnet_errors() +/obj/machinery/asteroid_magnet/proc/check_for_magnet_errors(datum/mining_template/template) . = FALSE - if(isnull(selected_template)) - return "ERROR N1" + if(summon_in_progress) + return "ERROR: ASTEROID ALREADY BEING SUMMONED" + + if(!COOLDOWN_FINISHED(src, summon_cd)) + return "ERROR: MAGNET COOLING DOWN" + + if(isnull(template)) + return "ERROR: ASTEROID NOT DETECTED" + + if(template.summoned) + return "ERROR: ASTEROID ALREADY SUMMONED" for(var/mob/M as mob in range(area_size + 1, center_turf)) if(isliving(M)) - return "ERROR C3" + return "ERROR: HEAT SIGNATURES DETECTED ON THE ASTEROID" /// Performs a full summoning sequence, including putting up boundaries, clearing out the area, and bringing in the new asteroid. /obj/machinery/asteroid_magnet/proc/summon_sequence(datum/mining_template/template) - var/magnet_error = check_for_magnet_errors() + var/magnet_error = check_for_magnet_errors(template) if(magnet_error) status = magnet_error updateUsrDialog() return var/area/station/cargo/mining/asteroid_magnet/A = get_area(center_turf) + + summon_in_progress = TRUE A.area_flags |= NOTELEPORT // We dont want people getting nuked during the generation sequence status = "Summoning[ellipsis()]" available_templates -= template @@ -289,21 +129,24 @@ var/time = world.timeofday var/list/forcefields = PlaceForcefield() CleanupTemplate() - PlaceTemplate(selected_template) + PlaceTemplate(template) /// This process should take ATLEAST 20 seconds time = (world.timeofday + 20 SECONDS) - time if(time > 0) - addtimer(CALLBACK(src, PROC_REF(_FinishSummonSequence), forcefields), time) + addtimer(CALLBACK(src, PROC_REF(_FinishSummonSequence), template, forcefields), time) else - _FinishSummonSequence(forcefields) + _FinishSummonSequence(template, forcefields) return -/obj/machinery/asteroid_magnet/proc/_FinishSummonSequence(list/forcefields) +/obj/machinery/asteroid_magnet/proc/_FinishSummonSequence(datum/mining_template/template, list/forcefields) QDEL_LIST(forcefields) var/area/station/cargo/mining/asteroid_magnet/A = get_area(center_turf) A.area_flags &= ~NOTELEPORT // Annnnd done + summon_in_progress = FALSE + template.summoned = TRUE + COOLDOWN_START(src, summon_cd, 1 MINUTE) status = STATUS_OKAY updateUsrDialog() @@ -326,7 +169,7 @@ /obj/machinery/asteroid_magnet/proc/CleanupTemplate() PRIVATE_PROC(TRUE) - var/list/turfs_to_destroy = ReserveTurfsForAsteroidGeneration(center_turf, area_size, space_only = FALSE) + var/list/turfs_to_destroy = ReserveTurfsForAsteroidGeneration(center_turf, area_size, baseturf_only = FALSE) for(var/turf/T as anything in turfs_to_destroy) CHECK_TICK @@ -384,5 +227,79 @@ while (collisions <= MAX_COLLISIONS_BEFORE_ABORT) +/obj/machinery/asteroid_magnet/ui_interact(mob/user, datum/tgui/ui) + . = ..() + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AsteroidMagnet") + ui.open() + ui.set_autoupdate(TRUE) + +/obj/machinery/asteroid_magnet/ui_data(mob/user) + . = ..() + var/list/data = list() + + data["coords_x"] = coords_x + data["coords_y"] = coords_y + data["ping_result"] = ping_result + data["Auto_pinging"] = Auto_pinging + + var/list/asteroid_data = list() + for(var/datum/mining_template/asteroid as anything in available_templates) + asteroid_data += list(list( + "name" = "[asteroid.name] ([asteroid.x] [asteroid.y])", + "ref" = REF(asteroid), + "size" = asteroid.size, + "rarity" = asteroid.rarity, + )) + data["asteroids"] = asteroid_data + + return data + +/obj/machinery/asteroid_magnet/ui_act(action, list/params) // im sorry for this code + . = ..() + if (.) + return + + var/list/map_offsets = map.return_offsets() + var/list/map_bounds = map.return_bounds() + switch(action) + if("Change X Coordinates") + var/amount = params["Position_Change"] + if(amount == 0) // if position change is zero, we are trying to reset the coordinates instead of changing them + coords_x = 0 + if(Auto_pinging) + ping(coords_x, coords_y) + return + + coords_x = WRAP(coords_x + map_offsets[1] + amount, map_bounds[1] + map_offsets[1], map_bounds[2] + map_offsets[1]) + coords_x -= map_offsets[1] + if(Auto_pinging) + ping(coords_x, coords_y) + + if("Change Y Coordinates") + var/amount = params["Position_Change"] + if(amount == 0) // if position change is zero, we are trying to reset the coordinates instead of changing them + coords_y = 0 + if(Auto_pinging) + ping(coords_x, coords_y) + return + + coords_y = WRAP(coords_y + map_offsets[2] + amount, map_bounds[3] + map_offsets[2], map_bounds[4] + map_offsets[2]) + coords_y -= map_offsets[2] + if(Auto_pinging) + ping(coords_x, coords_y) + + if("TogglePinging") + Auto_pinging = !Auto_pinging + + if("ping") + ping(coords_x, coords_y) + + if("select") + var/datum/mining_template/asteroid = locate(params["asteroid_reference"]) in available_templates + selected_template = asteroid + summon_sequence(selected_template) + #undef MAX_COLLISIONS_BEFORE_ABORT #undef STATUS_OKAY diff --git a/monkestation/code/modules/art_sci_overrides/asteroids/asteroid_template.dm b/monkestation/code/modules/art_sci_overrides/asteroids/asteroid_template.dm index 3b184047d5d5..2edf807938a5 100644 --- a/monkestation/code/modules/art_sci_overrides/asteroids/asteroid_template.dm +++ b/monkestation/code/modules/art_sci_overrides/asteroids/asteroid_template.dm @@ -11,9 +11,11 @@ // Asteroid Map location var/x var/y - var/found = FALSE - + /// Has this template been located by players? + var/found = FALSE + /// Has this template been summoned? + var/summoned = FALSE /datum/mining_template/New(center, max_size) . = ..() diff --git a/monkestation/code/modules/art_sci_overrides/asteroids/cartesian_plane.dm b/monkestation/code/modules/art_sci_overrides/asteroids/cartesian_plane.dm index 56030039bb4e..e34c47298175 100644 --- a/monkestation/code/modules/art_sci_overrides/asteroids/cartesian_plane.dm +++ b/monkestation/code/modules/art_sci_overrides/asteroids/cartesian_plane.dm @@ -1,9 +1,9 @@ /* * For a new plane of (x,x'),(y,y') : offset_x,offset_y,x_size,y_size * - * //Sign changes must account for 0-crossing + * // Sign changes must account for 0-crossing * (-100,100),(0,0) : 101,1,201,1 - * //Otherwise, it does not + * // Otherwise, it does not * (-100,-50),(0,0) : 101,1,50,1 * (50,100) , (0,0) : -49,1,50,1 */ diff --git a/monkestation/code/modules/atmospherics/machinery/air_alarm/air_alarm_ac.dm b/monkestation/code/modules/atmospherics/machinery/air_alarm/air_alarm_ac.dm new file mode 100644 index 000000000000..ff6df9ecc2fb --- /dev/null +++ b/monkestation/code/modules/atmospherics/machinery/air_alarm/air_alarm_ac.dm @@ -0,0 +1,122 @@ +#define AC_MIN_TEMP T20C - 5 +#define AC_MAX_TEMP T20C + 10 +#define AC_DEFAULT_TARGET T20C +#define AC_TARGET_SKEW 2 +#define AC_SWITCH_COOLDOWN 5 SECONDS +#define AC_DEFAULT_INC 1.5 +#define AC_ADJACENT_MUL 0.6 + +/obj/machinery/airalarm + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION + /// Whether air conditioning is enabled or not. + var/air_conditioning = TRUE + /// Whether the air alarm is currently trying to actively regulate the temperature. + var/ac_active = FALSE + /// The amount of temperature (in K) the air conditioner will "push" towards the target temperature, per tick. + var/ac_temp_inc = AC_DEFAULT_INC + /// The minimum target temperature the air conditioner can be set to. + var/ac_temp_min = AC_MIN_TEMP + /// The maximum target temperature the air conditioner can be set to. + var/ac_temp_max = AC_MAX_TEMP + /// The target temperature the air conditioner is trying to reach, if active. + var/ac_temp_target = AC_DEFAULT_TARGET + /// The multiplier to [ac_temp_target] for tiles adjacent to the alarm. + var/ac_adjacent_mul = AC_ADJACENT_MUL + VAR_PRIVATE/cached_target_min = AC_DEFAULT_TARGET - AC_TARGET_SKEW + VAR_PRIVATE/cached_target_max = AC_DEFAULT_TARGET + AC_TARGET_SKEW + /// Cooldown for the air conditioning (de)activating, to prevent spam. + COOLDOWN_DECLARE(ac_switch_cooldown) + +/obj/machinery/airalarm/Initialize(mapload, ndir, nbuild) + . = ..() + if(air_conditioning) + SSair.start_processing_machine(src) + +/obj/machinery/airalarm/examine(mob/user) + . = ..() + . += span_notice("A small light indicates that the air conditioning is [span_bold(air_conditioning ? (ac_active ? "active" : "idle") : "disabled")].") + +/obj/machinery/airalarm/ui_data(mob/user) + . = ..() + .["ac"] = list( + "enabled" = air_conditioning, + "active" = ac_active, + "target" = ac_temp_target, + "min" = ac_temp_min, + "max" = ac_temp_max + ) + +/obj/machinery/airalarm/proc/set_ac_target(new_target = AC_DEFAULT_TARGET) + if(new_target == ac_temp_target || !isnum(new_target) || !ISINRANGE(new_target, ac_temp_min, ac_temp_max)) + return + ac_temp_target = new_target + cached_target_min = ac_temp_target - AC_TARGET_SKEW + cached_target_max = ac_temp_target + AC_TARGET_SKEW + +/obj/machinery/airalarm/proc/start_ac() + air_conditioning = TRUE + ac_active = FALSE + update_use_power(IDLE_POWER_USE) + SSair.start_processing_machine(src) + +/obj/machinery/airalarm/proc/stop_ac() + air_conditioning = FALSE + ac_active = FALSE + update_use_power(IDLE_POWER_USE) + SSair.stop_processing_machine(src) + +/obj/machinery/airalarm/process_atmos() + if(panel_open || (machine_stat & (NOPOWER | BROKEN)) || shorted) + return + if(!air_conditioning) + stop_ac() + return PROCESS_KILL + var/turf/open/location = get_turf(src) + if(!istype(location) || QDELING(location)) + update_use_power(IDLE_POWER_USE) + ac_active = FALSE + return + var/datum/gas_mixture/environment = location.return_air() + if(QDELETED(environment)) + update_use_power(IDLE_POWER_USE) + ac_active = FALSE + return + var/current_temp = environment.return_temperature() + if(COOLDOWN_FINISHED(src, ac_switch_cooldown)) + var/previous_active = ac_active + ac_active = !ISINRANGE_EX(current_temp, cached_target_min, cached_target_max) + if(previous_active != ac_active) + visible_message(span_notice("[src] makes a quiet click as it [ac_active ? "starts trying to regulate" : "stops regulating"] the area's temperature."), blind_message = span_hear("You hear a silent click."), vision_distance = 3) + playsound(src, 'sound/machines/terminal_on.ogg', vol = 30, vary = TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, ignore_walls = FALSE) + update_use_power(ac_active ? ACTIVE_POWER_USE : IDLE_POWER_USE) + COOLDOWN_START(src, ac_switch_cooldown, AC_SWITCH_COOLDOWN) + if(ac_active) + if(current_temp < ac_temp_target) + environment.temperature = min(current_temp + ac_temp_inc, ac_temp_target) + else + environment.temperature = max(current_temp - ac_temp_inc, ac_temp_target) + air_update_turf(update = FALSE, remove = FALSE) + // Update the air of adjacent turfs too + if(!TURF_SHARES(location)) + return + var/adjacent_inc = CEILING(ac_temp_inc * ac_adjacent_mul, 0.1) + for(var/turf/open/adjacent_turf in location.get_atmos_adjacent_turfs(alldir = TRUE)) + if(QDELING(adjacent_turf) || isspaceturf(adjacent_turf)) + continue + var/datum/gas_mixture/adj_environment = adjacent_turf.return_air() + if(QDELETED(adj_environment)) + continue + var/adj_temp = adj_environment.return_temperature() + if(adj_temp < ac_temp_target) + adj_environment.temperature = min(adj_temp + adjacent_inc, ac_temp_target) + else + adj_environment.temperature = max(adj_temp - adjacent_inc, ac_temp_target) + adjacent_turf.air_update_turf(update = FALSE, remove = FALSE) + +#undef AC_ADJACENT_MUL +#undef AC_DEFAULT_INC +#undef AC_SWITCH_COOLDOWN +#undef AC_TARGET_SKEW +#undef AC_DEFAULT_TARGET +#undef AC_MAX_TEMP +#undef AC_MIN_TEMP diff --git a/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_conversion.dm b/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_conversion.dm index 0674abb65551..7cf8ea6c97e5 100644 --- a/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_conversion.dm +++ b/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_conversion.dm @@ -25,7 +25,7 @@ * conversion_target - Person being vassalized */ /datum/antagonist/bloodsucker/proc/can_make_vassal(mob/living/conversion_target) - if(!iscarbon(conversion_target) || conversion_target.stat > UNCONSCIOUS) + if(!iscarbon(conversion_target)) return FALSE if(length(vassals) == return_current_max_vassals()) to_chat(owner.current, span_danger("You find that your powers run thin and are unable to dominate their mind with your blood!")) diff --git a/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_datum.dm b/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_datum.dm index ab8cddfd2434..613f44e9d4fb 100644 --- a/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_datum.dm +++ b/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_datum.dm @@ -94,6 +94,7 @@ TRAIT_VIRUSIMMUNE, TRAIT_TOXIMMUNE, TRAIT_HARDLY_WOUNDED, + TRAIT_NO_MIRROR_REFLECTION ) /** diff --git a/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_guardian.dm b/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_guardian.dm index 309b5b059b06..0dc2d13e4a72 100644 --- a/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_guardian.dm +++ b/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_guardian.dm @@ -32,11 +32,13 @@ used = TRUE to_chat(user, use_message) var/guardian_type_name = capitalize(initial(guardian_path.creator_name)) - var/list/mob/dead/observer/candidates = poll_ghost_candidates( + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( "Do you want to play as [user.real_name]'s [guardian_type_name] [mob_name]?", - jobban_type = ROLE_PAI, + check_jobban = ROLE_PAI, poll_time = 10 SECONDS, ignore_category = POLL_IGNORE_HOLOPARASITE, + pic_source = guardian_path, + role_name_text = "guardian spirit", ) if(LAZYLEN(candidates)) var/mob/dead/observer/candidate = pick(candidates) diff --git a/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_ruleset.dm b/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_ruleset.dm index efb365f1742e..69607ecb4461 100644 --- a/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_ruleset.dm +++ b/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_ruleset.dm @@ -30,7 +30,7 @@ var/num_bloodsuckers = get_antag_cap(population) * (scaled_times + 1) for(var/i = 1 to num_bloodsuckers) - if(candidates.len <= 0) + if(length(candidates) <= 0) break var/mob/selected_mobs = pick_n_take(candidates) assigned += selected_mobs.mind @@ -83,7 +83,7 @@ candidates.Remove(player) /datum/dynamic_ruleset/midround/bloodsucker/execute() - if(!candidates || !candidates.len) + if(!candidates || !length(candidates)) return FALSE var/mob/selected_mobs = pick_n_take(candidates) assigned += selected_mobs.mind diff --git a/monkestation/code/modules/bloodsuckers/clans/malkavian.dm b/monkestation/code/modules/bloodsuckers/clans/malkavian.dm index 36b82b96925c..446ed33de1ce 100644 --- a/monkestation/code/modules/bloodsuckers/clans/malkavian.dm +++ b/monkestation/code/modules/bloodsuckers/clans/malkavian.dm @@ -41,7 +41,7 @@ if(prob(85) || bloodsuckerdatum.owner.current.stat != CONSCIOUS || HAS_TRAIT(bloodsuckerdatum.owner.current, TRAIT_MASQUERADE)) return var/message = pick(strings("malkavian_revelations.json", "revelations", "fulp_modules/strings/bloodsuckers")) - INVOKE_ASYNC(bloodsuckerdatum.owner.current, /atom/movable/proc/say, message, , , , , , CLAN_MALKAVIAN) + INVOKE_ASYNC(bloodsuckerdatum.owner.current, TYPE_PROC_REF(/atom/movable, say), message, , , , , , CLAN_MALKAVIAN) /datum/bloodsucker_clan/malkavian/on_favorite_vassal(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) var/mob/living/carbon/carbonowner = vassaldatum.owner.current diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/events/wonderland_apocalypse.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/events/wonderland_apocalypse.dm index c934e93f2961..3946bdf1845f 100644 --- a/monkestation/code/modules/bloodsuckers/monster_hunters/events/wonderland_apocalypse.dm +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/events/wonderland_apocalypse.dm @@ -39,6 +39,7 @@ range = 5 immortal = TRUE drops_core = FALSE + relocations_left = -1 /obj/effect/anomaly/dimensional/wonderland/Initialize(mapload, new_lifespan, drops_core) INVOKE_ASYNC(src, PROC_REF(prepare_area), /datum/dimension_theme/wonderland) diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_datum.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_datum.dm index a522dc6cab31..963e54152a53 100644 --- a/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_datum.dm +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_datum.dm @@ -22,12 +22,14 @@ . = ..() var/mob/living/current_mob = mob_override || owner.current current_mob.add_traits(list(TRAIT_NOSOFTCRIT, TRAIT_NOCRITDAMAGE), HUNTER_TRAIT) + ADD_TRAIT(owner, TRAIT_BLOODSUCKER_HUNTER, HUNTER_TRAIT) owner.unconvertable = TRUE /datum/antagonist/monsterhunter/remove_innate_effects(mob/living/mob_override) . = ..() var/mob/living/current_mob = mob_override || owner.current - current_mob.remove_traits(list(TRAIT_NOSOFTCRIT, TRAIT_NOCRITDAMAGE), HUNTER_TRAIT) + REMOVE_TRAITS_IN(current_mob, HUNTER_TRAIT) + REMOVE_TRAITS_IN(owner, HUNTER_TRAIT) owner.unconvertable = FALSE /datum/antagonist/monsterhunter/on_gain() diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_weapons.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_weapons.dm index edadc3934cfd..124dc71aa4ac 100644 --- a/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_weapons.dm +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_weapons.dm @@ -363,6 +363,7 @@ icon_state = "rabbit_mask" worn_icon = 'monkestation/icons/bloodsuckers/worn_mask.dmi' worn_icon_state = "rabbit_mask" + clothing_flags = SNUG_FIT flags_inv = HIDEFACE|HIDEFACIALHAIR|HIDESNOUT flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF flash_protect = FLASH_PROTECTION_WELDER diff --git a/monkestation/code/modules/bloodsuckers/structures/bloodsucker_crypt.dm b/monkestation/code/modules/bloodsuckers/structures/bloodsucker_crypt.dm index 2f854ff4e12d..0bcb6a479938 100644 --- a/monkestation/code/modules/bloodsuckers/structures/bloodsucker_crypt.dm +++ b/monkestation/code/modules/bloodsuckers/structures/bloodsucker_crypt.dm @@ -130,6 +130,12 @@ var/disloyalty_confirm = FALSE /// Prevents popup spam. var/disloyalty_offered = FALSE + // Prevent spamming torture via spam click. Otherwise they're able to lose a lot of blood quickly + var/blood_draining = FALSE + +/obj/structure/bloodsucker/vassalrack/Initialize(mapload) + . = ..() + AddElement(/datum/element/elevation, pixel_shift = 14) /obj/structure/bloodsucker/vassalrack/deconstruct(disassembled = TRUE) . = ..() @@ -268,12 +274,19 @@ */ /obj/structure/bloodsucker/vassalrack/proc/torture_victim(mob/living/user, mob/living/target) var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(target.stat > UNCONSCIOUS) + balloon_alert(user, "too badly injured!") + return FALSE + if(IS_VASSAL(target)) var/datum/antagonist/vassal/vassaldatum = target.mind.has_antag_datum(/datum/antagonist/vassal) if(!vassaldatum.master.broke_masquerade) balloon_alert(user, "someone else's vassal!") return FALSE + if(!ishuman(target)) + balloon_alert(user, "you can't torture an animal or basic mob!") + return FALSE var/disloyalty_requires = RequireDisloyalty(user, target) if(HAS_TRAIT(target, TRAIT_MINDSHIELD)) @@ -286,6 +299,11 @@ // Conversion Process if(convert_progress) + //Are we currently torturing this person? If so, do not spill blood more. + if(blood_draining) + return + //We're torturing. Do not start another torture on this rack. + blood_draining = TRUE balloon_alert(user, "spilling blood...") bloodsuckerdatum.AddBloodVolume(-TORTURE_BLOOD_HALF_COST) if(!do_torture(user, target)) @@ -304,26 +322,27 @@ balloon_alert(user, "has external loyalties! more persuasion required!") else balloon_alert(user, "ready for communion!") - return - - if(!disloyalty_confirm && disloyalty_requires) - if(!do_disloyalty(user, target)) return - if(!disloyalty_confirm) - balloon_alert(user, "refused persuasion!") - else - balloon_alert(user, "ready for communion!") - return - user.balloon_alert_to_viewers("smears blood...", "painting bloody marks...") - if(!do_after(user, 5 SECONDS, target)) - balloon_alert(user, "interrupted!") - return - // Convert to Vassal! - bloodsuckerdatum.AddBloodVolume(-TORTURE_CONVERSION_COST) - if(bloodsuckerdatum.make_vassal(target)) - remove_loyalties(target) - SEND_SIGNAL(bloodsuckerdatum, BLOODSUCKER_MADE_VASSAL, user, target) + if(!disloyalty_confirm && disloyalty_requires) + if(!do_disloyalty(user, target)) + return + if(!disloyalty_confirm) + balloon_alert(user, "refused persuasion!") + else + balloon_alert(user, "ready for communion!") + return + //If they don't need any more torture, start converting them into a vassal! + else + user.balloon_alert_to_viewers("smears blood...", "painting bloody marks...") + if(!do_after(user, 5 SECONDS, target)) + balloon_alert(user, "interrupted!") + return + // Convert to Vassal! + bloodsuckerdatum.AddBloodVolume(-TORTURE_CONVERSION_COST) + if(bloodsuckerdatum.make_vassal(target)) + remove_loyalties(target) + SEND_SIGNAL(bloodsuckerdatum, BLOODSUCKER_MADE_VASSAL, user, target) /obj/structure/bloodsucker/vassalrack/proc/do_torture(mob/living/user, mob/living/carbon/target, mult = 1) // Fifteen seconds if you aren't using anything. Shorter with weapons and such. @@ -355,6 +374,8 @@ torture_time = max(5 SECONDS, torture_time * 10) // Now run process. if(!do_after(user, (torture_time * mult), target)) + //Torture failed. You can start again. + blood_draining = FALSE return FALSE if(held_item) @@ -366,6 +387,8 @@ INVOKE_ASYNC(target, TYPE_PROC_REF(/mob, emote), "scream") target.set_timed_status_effect(5 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE) target.apply_damages(brute = torture_dmg_brute, burn = torture_dmg_burn, def_zone = selected_bodypart.body_zone) + //Torture succeeded. You may torture again. + blood_draining = FALSE return TRUE /// Offer them the oppertunity to join now. @@ -406,9 +429,9 @@ /obj/structure/bloodsucker/vassalrack/proc/remove_loyalties(mob/living/target) // Find Mind Implant & Destroy - for(var/obj/item/implant/all_implants as anything in target.implants) - if(all_implants.type == /obj/item/implant/mindshield) - all_implants.removed(target, silent = TRUE) + for(var/obj/item/implant/implant as anything in target.implants) + if(istype(implant, /obj/item/implant/mindshield) && implant.removed(target, silent = TRUE)) + qdel(implant) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/monkestation/code/modules/bloodsuckers/vassals/ex_vassal.dm b/monkestation/code/modules/bloodsuckers/vassals/ex_vassal.dm index 27cca3b4611f..0599972c219e 100644 --- a/monkestation/code/modules/bloodsuckers/vassals/ex_vassal.dm +++ b/monkestation/code/modules/bloodsuckers/vassals/ex_vassal.dm @@ -32,7 +32,7 @@ /datum/antagonist/ex_vassal/proc/on_examine(datum/source, mob/examiner, examine_text) SIGNAL_HANDLER - var/datum/antagonist/vassal/revenge/vassaldatum = examiner.mind.has_antag_datum(/datum/antagonist/vassal/revenge) + var/datum/antagonist/vassal/revenge/vassaldatum = examiner.mind?.has_antag_datum(/datum/antagonist/vassal/revenge) if(vassaldatum && !revenge_vassal) examine_text += span_notice("[owner.current] is an ex-vassal!") diff --git a/monkestation/code/modules/cargo/crates/livestock.dm b/monkestation/code/modules/cargo/crates/livestock.dm index 4636d713a93f..3aef5cb31f1e 100644 --- a/monkestation/code/modules/cargo/crates/livestock.dm +++ b/monkestation/code/modules/cargo/crates/livestock.dm @@ -15,16 +15,9 @@ /datum/supply_pack/critter/bears/fill(obj/structure/closet/crate/critter/C) for(var/i in 1 to 3) - var/item = pick( - prob (20); - /mob/living/basic/bear, - prob (20); - /mob/living/basic/bear/snow, - prob (20); - /mob/living/basic/bear/russian, - prob (20); - /mob/living/basic/bear/butter, - prob (20); - /mob/living/basic/bear/hudson - ) + var/item = pick(/mob/living/basic/bear, + /mob/living/basic/bear/snow, + /mob/living/basic/bear/russian, + /mob/living/basic/bear/butter, + /mob/living/basic/bear/hudson) new item(C) diff --git a/monkestation/code/modules/cargo/crates/materials.dm b/monkestation/code/modules/cargo/crates/materials.dm index c03fda42592a..447799f2d25f 100644 --- a/monkestation/code/modules/cargo/crates/materials.dm +++ b/monkestation/code/modules/cargo/crates/materials.dm @@ -6,30 +6,17 @@ /datum/supply_pack/materials/random_materials/fill(obj/structure/closet/crate/C) for(var/i in 1 to 5) - var/item = pick( - prob(200); - /obj/item/stack/sheet/iron/fifty, - prob(100); - /obj/item/stack/sheet/glass/fifty, - prob(50); - /obj/item/stack/sheet/plastic/fifty, - prob(50); - /obj/item/stack/sheet/mineral/plasma/twenty, - prob(20); - /obj/item/stack/sheet/plasteel/twenty, - prob(20); - /obj/item/stack/sheet/mineral/titanium/twenty, - prob(10); - /obj/item/stack/sheet/mineral/silver/twenty, - prob(10); - /obj/item/stack/sheet/mineral/gold/five, - prob(5); - /obj/item/stack/sheet/mineral/diamond/five, - prob(5); - /obj/item/stack/sheet/bluespace_crystal/five, - prob(5); - /obj/item/stack/sheet/mineral/uranium/five - ) + var/item = pick(200;/obj/item/stack/sheet/iron/fifty, + 100;/obj/item/stack/sheet/glass/fifty, + 50;/obj/item/stack/sheet/plastic/fifty, + 50;/obj/item/stack/sheet/mineral/plasma/twenty, + 20;/obj/item/stack/sheet/plasteel/twenty, + 20;/obj/item/stack/sheet/mineral/titanium/twenty, + 10;/obj/item/stack/sheet/mineral/silver/twenty, + 10;/obj/item/stack/sheet/mineral/gold/five, + 5;/obj/item/stack/sheet/mineral/diamond/five, + 5;/obj/item/stack/sheet/bluespace_crystal/five, + 5;/obj/item/stack/sheet/mineral/uranium/five) new item(C) diff --git a/monkestation/code/modules/cargo/crates/medical.dm b/monkestation/code/modules/cargo/crates/medical.dm index 8e532fb907a5..5bc4ed541ff7 100644 --- a/monkestation/code/modules/cargo/crates/medical.dm +++ b/monkestation/code/modules/cargo/crates/medical.dm @@ -49,22 +49,13 @@ /datum/supply_pack/medical/randommedkit/fill/(obj/structure/closet/crate/C) for(var/i in 1 to 6) - var/item = pick( - prob(10); - /obj/item/storage/medkit/regular, - prob(20); - /obj/item/storage/medkit/brute, - prob(20); - /obj/item/storage/medkit/fire, - prob(20); - /obj/item/storage/medkit/toxin, - prob(20); - /obj/item/storage/medkit/o2, - prob(10); - /obj/item/storage/medkit/advanced, - prob(10); - /obj/item/storage/medkit/surgery - ) + var/item = pick(10;/obj/item/storage/medkit/regular, + 20;/obj/item/storage/medkit/brute, + 20;/obj/item/storage/medkit/fire, + 20;/obj/item/storage/medkit/toxin, + 20;/obj/item/storage/medkit/o2, + 10;/obj/item/storage/medkit/advanced, + 10;/obj/item/storage/medkit/surgery) new item(C) /datum/supply_pack/medical/maintpills diff --git a/monkestation/code/modules/cargo/crates/science.dm b/monkestation/code/modules/cargo/crates/science.dm index 3d9705b86d1e..0ae3dddbc5c6 100644 --- a/monkestation/code/modules/cargo/crates/science.dm +++ b/monkestation/code/modules/cargo/crates/science.dm @@ -5,8 +5,9 @@ access = ACCESS_XENOBIOLOGY contains = list(/obj/item/slime_extract/grey = 2, /obj/item/reagent_containers/syringe/plasma, - /obj/item/circuitboard/computer/xenobiology, - /obj/item/circuitboard/machine/monkey_recycler, - /obj/item/circuitboard/machine/processor/slime) + /obj/item/circuitboard/computer/slime_market, + /obj/item/circuitboard/machine/slime_market_pad, + /obj/item/circuitboard/machine/biomass_recycler, + /obj/item/vacuum_pack) crate_name = "xenobiology starter crate" crate_type = /obj/structure/closet/crate/secure/science diff --git a/monkestation/code/modules/cargo/crates/service.dm b/monkestation/code/modules/cargo/crates/service.dm index 0dc8a9492410..66077f9c5147 100644 --- a/monkestation/code/modules/cargo/crates/service.dm +++ b/monkestation/code/modules/cargo/crates/service.dm @@ -33,7 +33,7 @@ name = "Jukebox Beacon Crate" desc = "Last one stolen? Broken? Burnt down in an insurance scam? then this crate is for you. Contains one Jukebox Beacon." cost = CARGO_CRATE_VALUE * 20 //the crew shouldnt be able to just buy 15 jukeboxes all playing among us at the same time - contains = list(/obj/item/choice_beacon/jukebox) + contains = list(/obj/item/jukebox_beacon) crate_name = "jukebox beacon crate" /datum/supply_pack/service/cassettes diff --git a/monkestation/code/modules/cassettes/cassette.dm b/monkestation/code/modules/cassettes/cassette.dm index 27f9490b4189..3f68a83bd401 100644 --- a/monkestation/code/modules/cassettes/cassette.dm +++ b/monkestation/code/modules/cassettes/cassette.dm @@ -28,15 +28,15 @@ var/random = FALSE var/cassette_desc_string = "Generic Desc" -/obj/item/device/cassette_tape/Initialize() +/obj/item/device/cassette_tape/Initialize(mapload, spawned_id) . = ..() - var/ids_exist = file("data/cassette_storage/ids.json") + if(!length(GLOB.approved_ids)) + GLOB.approved_ids = initialize_approved_ids() - if(!length(GLOB.approved_ids) && fexists(ids_exist)) - GLOB.approved_ids = json_decode(file2text("data/cassette_storage/ids.json")) - - if(random && fexists(ids_exist)) - if(length(GLOB.approved_ids)) + if(length(GLOB.approved_ids)) + if(spawned_id && (spawned_id in GLOB.approved_ids)) + id = spawned_id + else if(random) id = pick(GLOB.approved_ids) var/file = file("data/cassette_storage/[id].json") @@ -61,7 +61,7 @@ ..() icon_state = flipped ? side1_icon : side2_icon flipped = !flipped - to_chat(user,"You flip [src]") + to_chat(user, span_notice("You flip [src].")) /obj/item/device/cassette_tape/update_desc(updates) . = ..() @@ -75,31 +75,31 @@ /obj/item/device/cassette_tape/attackby(obj/item/item, mob/living/user) if(!istype(item, /obj/item/pen)) return ..() - var/choice = input("What would you like to change?") in list("Cassette Name", "Cassette Description", "Cancel") + var/choice = tgui_input_list(usr, "What would you like to change?", items = list("Cassette Name", "Cassette Description", "Cancel")) switch(choice) if("Cassette Name") ///the name we are giving the cassette - var/newcassettename = reject_bad_text(stripped_input(user, "Write a new Cassette name:", name, name)) + var/newcassettename = reject_bad_text(tgui_input_text(user, "Write a new Cassette name:", name, name, max_length = MAX_NAME_LEN)) if(!user.can_perform_action (src, TRUE)) return - if (length(newcassettename) > 20) - to_chat(user, "That name is too long!") + if(length(newcassettename) > MAX_NAME_LEN) + to_chat(user, span_warning("That name is too long!")) return if(!newcassettename) - to_chat(user, "That name is invalid.") + to_chat(user, span_warning("That name is invalid.")) return else name = "[lowertext(newcassettename)]" if("Cassette Description") ///the description we are giving the cassette - var/newdesc = stripped_input(user, "Write a new description:", name, desc) + var/newdesc = tgui_input_text(user, "Write a new description:", name, desc, max_length = 180) if(!user.can_perform_action(src, TRUE)) return if (length(newdesc) > 180) - to_chat(user, "That description is too long!") + to_chat(user, span_warning("That description is too long!")) return if(!newdesc) - to_chat(user, "That description is invalid.") + to_chat(user, span_warning("That description is invalid.")) return cassette_desc_string = newdesc update_appearance() diff --git a/monkestation/code/modules/cassettes/machines/cassette_rack.dm b/monkestation/code/modules/cassettes/machines/cassette_rack.dm new file mode 100644 index 000000000000..3d3ef21aaebd --- /dev/null +++ b/monkestation/code/modules/cassettes/machines/cassette_rack.dm @@ -0,0 +1,58 @@ +#define MAX_STORED_CASSETTES 28 +#define DEFAULT_CASSETTES_TO_SPAWN 5 +#define DEFAULT_BLANKS_TO_SPAWN 10 + +/obj/structure/cassette_rack + name = "cassette pouch" + desc = "Safely holds cassettes for storage." + icon = 'monkestation/code/modules/cassettes/icons/radio_station.dmi' + icon_state = "cassette_pouch" + anchored = FALSE + density = FALSE + +/obj/structure/cassette_rack/Initialize(mapload) + . = ..() + create_storage(storage_type = /datum/storage/cassette_rack) + if(mapload) + set_anchored(TRUE) + +/obj/structure/cassette_rack/update_overlays() + . = ..() + var/number = length(contents) ? min(length(contents), 7) : 0 + . += mutable_appearance(icon, "[icon_state]_[number]") + +/datum/storage/cassette_rack + max_slots = MAX_STORED_CASSETTES + max_specific_storage = WEIGHT_CLASS_SMALL + max_total_storage = WEIGHT_CLASS_SMALL * MAX_STORED_CASSETTES + numerical_stacking = TRUE + +/datum/storage/cassette_rack/New() + . = ..() + set_holdable(/obj/item/device/cassette_tape) + +// Allow opening on a normal left click +/datum/storage/cassette_rack/on_attack(datum/source, mob/user) + var/obj/structure/cassette_rack/resolve_parent = parent?.resolve() + if(!resolve_parent) + return + if(QDELETED(user) || !user.Adjacent(resolve_parent) || user.incapacitated() || !user.canUseStorage()) + return ..() + INVOKE_ASYNC(src, PROC_REF(open_storage), user) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/obj/structure/cassette_rack/prefilled + var/spawn_random = DEFAULT_CASSETTES_TO_SPAWN + var/spawn_blanks = DEFAULT_BLANKS_TO_SPAWN + +/obj/structure/cassette_rack/prefilled/Initialize(mapload) + . = ..() + for(var/i in 1 to spawn_blanks) + new /obj/item/device/cassette_tape/blank(src) + for(var/id in unique_random_tapes(spawn_random)) + new /obj/item/device/cassette_tape(src, id) + update_appearance() + +#undef DEFAULT_BLANKS_TO_SPAWN +#undef DEFAULT_CASSETTES_TO_SPAWN +#undef MAX_STORED_CASSETTES diff --git a/monkestation/code/modules/cassettes/machines/cassette_storage/cassette_rack.dm b/monkestation/code/modules/cassettes/machines/cassette_storage/cassette_rack.dm deleted file mode 100644 index 39b709fcc488..000000000000 --- a/monkestation/code/modules/cassettes/machines/cassette_storage/cassette_rack.dm +++ /dev/null @@ -1,62 +0,0 @@ -/obj/structure/cassette_rack - name = "cassette pouch" - desc = "safely holds cassettes for storage" - - icon = 'monkestation/code/modules/cassettes/icons/radio_station.dmi' - icon_state = "cassette_pouch" - - anchored = FALSE - density = FALSE - - var/list/held_cassettes = list() - var/max_cassettes = 28 - - -/obj/structure/cassette_rack/attackby(obj/item/attacking_item, mob/user, params) - . = ..() - if(!istype(attacking_item, /obj/item/device/cassette_tape)) - return - - if(length(held_cassettes) >= max_cassettes) - to_chat(user, span_warning("You can't fit anything else inside the [src].")) - return - - - var/matrix/old_matrix = src.transform - animate(src, time = 1.5, loop = 0, transform = src.transform.Scale(1.07, 0.9)) - animate(time = 2, transform = old_matrix) - - playsound(src, SFX_RUSTLE, 50, TRUE, -5) - - attacking_item.forceMove(src) - held_cassettes |= attacking_item - to_chat(user, span_notice("You put [attacking_item] into \the [src].")) - update_appearance() - -/obj/structure/cassette_rack/attack_hand(mob/living/user, list/modifiers) - . = ..() - if(!length(held_cassettes)) - return - var/obj/item/choice = tgui_input_list(user, "Choose a cassette to remove", src, held_cassettes) - if(!choice) - return - - user.put_in_hands(choice) - held_cassettes -= choice - - var/matrix/old_matrix = src.transform - animate(src, time = 1.5, loop = 0, transform = src.transform.Scale(1.07, 0.9)) - animate(time = 2, transform = old_matrix) - - playsound(src, SFX_RUSTLE, 50, TRUE, -5) - - to_chat(user, span_notice("You take [choice] from \the [src].")) - update_appearance() - -/obj/structure/cassette_rack/update_overlays() - . = ..() - var/number = 0 - if(length(held_cassettes)) - number = CEILING(length(held_cassettes) / 7 , 1) - - . += mutable_appearance(icon, "[icon_state]_[number]") diff --git a/monkestation/code/modules/cassettes/machines/dj_station.dm b/monkestation/code/modules/cassettes/machines/dj_station.dm index e8091e9270b9..24198aea13cc 100644 --- a/monkestation/code/modules/cassettes/machines/dj_station.dm +++ b/monkestation/code/modules/cassettes/machines/dj_station.dm @@ -60,11 +60,11 @@ GLOBAL_VAR(dj_booth) if(waiting_for_yield) return time_left -= round(seconds_per_tick) - if(time_left < 0) + if(time_left <= 0) time_left = 0 if(COOLDOWN_FINISHED(src, next_song_timer) && broadcasting) COOLDOWN_START(src, next_song_timer, 10 MINUTES) - broadcasting = 0 + broadcasting = FALSE /obj/machinery/cassette/dj_station/attack_hand(mob/user) . = ..() diff --git a/monkestation/code/modules/cassettes/machines/media/__base_machine.dm b/monkestation/code/modules/cassettes/machines/media/__base_machine.dm index 6b80c590d906..ce403d1b1df5 100644 --- a/monkestation/code/modules/cassettes/machines/media/__base_machine.dm +++ b/monkestation/code/modules/cassettes/machines/media/__base_machine.dm @@ -1,13 +1,13 @@ -/proc/mobs_in_area(var/area/A) +/proc/mobs_in_area(var/area/passed_area) var/list/mobs = list() - for(var/M in GLOB.mob_list) - if(get_area(M) == A) - mobs += M + for(var/glob_mob in GLOB.mob_list) + if(get_area(glob_mob) == passed_area) + mobs += glob_mob return mobs // Machinery serving as a media source. /obj/machinery/media - var/playing = 0 // Am I playing right now? + var/playing = FALSE // Am I playing right now? var/media_url = "" // URL of media I am playing var/media_start_time = 0 // world.time when it started playing var/volume = 1 // 0 - 1 for ease of coding. @@ -19,28 +19,30 @@ /obj/machinery/media/proc/update_music() update_media_source() // Send update to clients. - for(var/mob/M in range(15, get_turf(src))) //15 being the max volume of the radio - if(M && M.client) - M.update_music() + for(var/mob/mob in range(15, get_turf(src))) //15 being the max volume of the radio + if(mob && mob.client) + mob.update_music() /obj/machinery/media/proc/update_media_source() // Check if there's a media source already. - for(var/area/A in get_areas_in_range(15, src)) - if(A.media_source && A.media_source != src) // If it does, the new media source replaces it. basically, the last media source arrived gets played on top. - A.media_source.disconnect_media_source() // You can turn a media source off and on for it to come back on top. - A.media_source = src + for(var/area/area in get_areas_in_range(15, src)) + if(area.media_source && area.media_source != src) // If it does, the new media source replaces it. basically, the last media source arrived gets played on top. + area.media_source.disconnect_media_source() // You can turn a media source off and on for it to come back on top. + area.media_source = src return else - A.media_source = src + area.media_source = src /obj/machinery/media/proc/disconnect_media_source() - for(var/area/A in get_areas_in_range(15, src)) + for(var/area/area in get_areas_in_range(15, src)) // Update Media Source. - A.media_source = null + area.media_source = null // Clients - for(var/mob/M as anything in range(15)) - M.update_music() + for(var/mob/mob as anything in range(15)) + if(!istype(mob)) //might be possible to simply make this not be as() anything + continue + mob.update_music() /obj/machinery/media/Move() disconnect_media_source() diff --git a/monkestation/code/modules/cassettes/random_cassette_selection.dm b/monkestation/code/modules/cassettes/random_cassette_selection.dm index a1cf95270aaf..19b27f0fdd81 100644 --- a/monkestation/code/modules/cassettes/random_cassette_selection.dm +++ b/monkestation/code/modules/cassettes/random_cassette_selection.dm @@ -1,4 +1,21 @@ -GLOBAL_LIST_INIT(approved_ids, list()) +GLOBAL_LIST_INIT(approved_ids, initialize_approved_ids()) + +/proc/unique_random_tapes(amt = 1) + . = list() + if(!length(GLOB.approved_ids)) + GLOB.approved_ids = initialize_approved_ids() + if(!length(GLOB.approved_ids)) + return + var/list/ids_to_choose = GLOB.approved_ids.Copy() + amt = min(amt, length(ids_to_choose)) + for(var/i in 1 to amt) + . += pick_n_take(ids_to_choose) + +/proc/initialize_approved_ids() + var/ids_exist = file("data/cassette_storage/ids.json") + if(!fexists(ids_exist)) + return list() + return json_decode(file2text(ids_exist)) /obj/item/device/cassette_tape/random name = "Not Correctly Created Random Cassette" diff --git a/monkestation/code/modules/cassettes/track_folder/base_tracks.json b/monkestation/code/modules/cassettes/track_folder/base_tracks.json index 502858a7ac67..20c98475f40e 100644 --- a/monkestation/code/modules/cassettes/track_folder/base_tracks.json +++ b/monkestation/code/modules/cassettes/track_folder/base_tracks.json @@ -4964,5 +4964,205 @@ "secret": false, "lobby": false, "jukebox": true + }, + { + "url" : "https://files.catbox.moe/8jfqnz.mp3", + "title": "CRISIS CITY: ACT 1", + "duration": 1500, + "artist": "SEGA", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/y2yn8p.mp3", + "title": "CRISIS CITY: ACT 2", + "duration": 1830, + "artist": "SEGA", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/5qhvax.mp3", + "title": "Dangerous", + "duration": 2780, + "artist": "Big Data & Joywave", + "genre": "Rock", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/amy1g1.mp3", + "title": "Electric Avenue", + "duration": 2280, + "artist": "Eddy Grant", + "genre": "Disco, Funk, Soul, and R&B", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/1plpjp.mp3", + "title": "Hardware Store", + "duration": 2230, + "artist": "Weird Al Yankovic", + "genre": "Rock", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/995vw3.mp3", + "title": "Hayloft", + "duration": 1810, + "artist": "Mother Mother", + "genre": "Rock", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/bg1e3t.mp3", + "title": "Hayloft II", + "duration": 2150, + "artist": "Mother Mother", + "genre": "Rock", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/6ka39h.mp3", + "title": "INVISIBLE", + "duration": 1910, + "artist": "Duran Duran", + "genre": "Pop", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/q2flt8.mp3", + "title": "Messages from the Stars", + "duration": 4600, + "artist": "The Rah Band", + "genre": "Disco, Funk, Soul, and R&B", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/b75c8c.mp3", + "title": "Midnight City", + "duration": 2440, + "artist": "M83", + "genre": "Electronic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/m6mznt.mp3", + "title": "My Way (2008 Remaster)", + "duration": 2760, + "artist": "Frank Sinatra", + "genre": "Pop", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/9i8ich.mp3", + "title": "My Way Of Life", + "duration": 1870, + "artist": "Frank Sinatra", + "genre": "Pop", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/aa1f1q.mp3", + "title": "Tequila", + "duration": 1340, + "artist": "The Champs", + "genre": "Rock", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/dxud77.mp3", + "title": "TF2: Faster Than A Speeding Bullet", + "duration": 850, + "artist": "Valve Studio Orchestra", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/xs9sjk.mp3", + "title": "TF2: Main Theme", + "duration": 720, + "artist": "Valve Studio Orchestra", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/k80s76.mp3", + "title": "TF2: Right Behind You", + "duration": 1010, + "artist": "Valve Studio Orchestra", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/x18qw0.mp3", + "title": "TF2: Rocket Jump Waltz", + "duration": 390, + "artist": "Valve Studio Orchestra", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/bfj6e7.mp3", + "title": "TF2: Rocket Jump Waltz (Remix)", + "duration": 1900, + "artist": "Squiller", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/9i47e3.mp3", + "title": "TF2: Soldier Of Dance", + "duration": 680, + "artist": "Valve Studio Orchestra", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url" : "https://files.catbox.moe/ro7172.mp3", + "title": "The Set Up", + "duration": 2430, + "artist": "Favored Nations", + "genre": "Pop", + "secret": false, + "lobby": false, + "jukebox": true } ] diff --git a/monkestation/code/modules/client/preferences/alt_jobs/titles.dm b/monkestation/code/modules/client/preferences/alt_jobs/titles.dm index c32ef37878e9..71f6524ee833 100644 --- a/monkestation/code/modules/client/preferences/alt_jobs/titles.dm +++ b/monkestation/code/modules/client/preferences/alt_jobs/titles.dm @@ -78,6 +78,7 @@ /datum/job/cargo_technician alt_titles = list( + "Cargo Technician", "Warehouse Technician", "Deck Worker", "Mailman", @@ -258,12 +259,14 @@ /datum/job/quartermaster alt_titles = list( + "Quartermaster", "Union Requisitions Officer", "Deck Chief", "Warehouse Supervisor", "Supply Foreman", - "Head of Supply", + "Pretend Head of Supply", "Logistics Coordinator", + "Cargyptian Overseer", ) /datum/job/research_director @@ -312,6 +315,7 @@ /datum/job/shaft_miner alt_titles = list( + "Shaft Miner", "Union Miner", "Excavator", "Spelunker", diff --git a/monkestation/code/modules/client/verbs.dm b/monkestation/code/modules/client/verbs.dm index 505627ebbf73..663221f424bf 100644 --- a/monkestation/code/modules/client/verbs.dm +++ b/monkestation/code/modules/client/verbs.dm @@ -57,9 +57,12 @@ GLOBAL_LIST_INIT(antag_token_config, load_antag_token_config()) client_token_holder.in_queue = new chosen_antagonist to_chat(src, span_boldnotice("Your request has been sent to the admins.")) - SEND_NOTFIED_ADMIN_MESSAGE('sound/items/bikehorn.ogg', "[span_admin("[span_prefix("ANTAG TOKEN:")] [key_name(src)] \ - [ADMIN_APPROVE_ANTAG_TOKEN(src)] [ADMIN_REJECT_ANTAG_TOKEN(src)] | \ - [src] has requested to use their antag token to be a [chosen_antagonist::name].")]") + send_formatted_admin_message( \ + "[ADMIN_LOOKUPFLW(src)] has requested to use their antag token to be a [chosen_antagonist::name].\n\n[ADMIN_APPROVE_ANTAG_TOKEN(src)] | [ADMIN_REJECT_ANTAG_TOKEN(src)]", \ + title = "Antag Token Request", \ + color_override = "orange" \ + ) + client_token_holder.antag_timeout = addtimer(CALLBACK(client_token_holder, TYPE_PROC_REF(/datum/meta_token_holder, timeout_antag_token)), 5 MINUTES, TIMER_STOPPABLE | TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_DELETE_ME) /client/verb/trigger_token_event() set category = "IC" @@ -92,9 +95,12 @@ GLOBAL_LIST_INIT(antag_token_config, load_antag_token_config()) client_token_holder.queued_token_event = selected_event to_chat(src, span_boldnotice("Your request has been sent.")) logger.Log(LOG_CATEGORY_META, "[usr] has requested to use their event tokens to trigger [selected_event.event_name]([selected_event]).") - SEND_NOTFIED_ADMIN_MESSAGE('sound/items/bikehorn.ogg', "[span_admin("[span_prefix("TOKEN EVENT:")] [key_name(src)] \ - [ADMIN_APPROVE_TOKEN_EVENT(src)] [ADMIN_REJECT_TOKEN_EVENT(src)] | \ - [src] has requested use their event tokens to trigger [selected_event.event_name]([selected_event]).")]") + send_formatted_admin_message( \ + "[ADMIN_LOOKUPFLW(src)] has requested use their event tokens to trigger [selected_event.event_name]([selected_event]).\n\n[ADMIN_APPROVE_TOKEN_EVENT(src)] | [ADMIN_REJECT_TOKEN_EVENT(src)]", \ + title = "Event Token Request", \ + color_override = "orange" \ + ) + client_token_holder.event_timeout = addtimer(CALLBACK(client_token_holder, TYPE_PROC_REF(/datum/meta_token_holder, timeout_event_token)), 5 MINUTES, TIMER_STOPPABLE | TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_DELETE_ME) return to_chat(src, "You dont have enough tokens to trigger this event.") diff --git a/monkestation/code/modules/clothing/head/costume.dm b/monkestation/code/modules/clothing/head/costume.dm index 0091dca81b26..e3bbb1c68c93 100644 --- a/monkestation/code/modules/clothing/head/costume.dm +++ b/monkestation/code/modules/clothing/head/costume.dm @@ -46,6 +46,13 @@ worn_icon = 'monkestation/icons/mob/clothing/head.dmi' icon_state = "milkman_hat" +/obj/item/clothing/head/harlequinhat + name = "harlequin hat" + desc = "I wear officer I'm not a pirate!" + icon = 'monkestation/icons/obj/clothing/hats.dmi' + worn_icon = 'monkestation/icons/mob/clothing/head.dmi' + icon_state = "harlequin_hat" + /obj/item/clothing/head/guardmanhelmet name = "guardman's helmet" desc = "Keeps your brain intact when fighting heretics" diff --git a/monkestation/code/modules/clothing/neck/cloaks.dm b/monkestation/code/modules/clothing/neck/cloaks.dm index 041770bab071..0f4bb2ce3bd8 100644 --- a/monkestation/code/modules/clothing/neck/cloaks.dm +++ b/monkestation/code/modules/clothing/neck/cloaks.dm @@ -146,3 +146,20 @@ worn_icon = 'monkestation/icons/obj/clothing/necks.dmi' icon_state = "admin" worn_icon_state = "admin" + +/obj/item/clothing/neck/helldivercape + name = "helldiver cape" + desc = "For Super Earth!." + icon = 'monkestation/icons/obj/clothing/necks.dmi' + worn_icon = 'monkestation/icons/mob/clothing/neck.dmi' + icon_state = "helldiver_cape" + worn_icon_state = "helldiver_cape" + +/datum/loadout_item/neck/helldivercape + name = "Helldiver Cape" + item_path = /obj/item/clothing/neck/helldivercape + +/datum/store_item/neck/helldivercape + name = "Helldiver Cape" + item_path = /obj/item/clothing/neck/helldivercape + item_cost = 20000 \ No newline at end of file diff --git a/monkestation/code/modules/clothing/shoes/clown.dm b/monkestation/code/modules/clothing/shoes/clown.dm index 30e92ca0d7a1..fc78311da038 100644 --- a/monkestation/code/modules/clothing/shoes/clown.dm +++ b/monkestation/code/modules/clothing/shoes/clown.dm @@ -22,3 +22,11 @@ icon = 'icons/obj/clothing/shoes.dmi' squeak_sound = list('monkestation/sound/effects/clown_jingle1.ogg'=1, 'monkestation/sound/effects/clown_jingle2.ogg') //jingHONK jinglHONK jHONKgle jiHONKgle +/obj/item/clothing/shoes/clown_shoes/harlequin_boots + name = "harlequin boots" + desc = "For the more serious clowns, Now with a internal bell" + icon = 'monkestation/icons/obj/clothing/shoes.dmi' + icon_state = "harlequin_boots" + worn_icon = 'monkestation/icons/mob/clothing/feet.dmi' + worn_icon_state = "harlequin_boots" + squeak_sound = list('monkestation/sound/effects/clown_jingle1.ogg'=1, 'monkestation/sound/effects/clown_jingle2.ogg') \ No newline at end of file diff --git a/monkestation/code/modules/clothing/suits/.vs/ProjectSettings.json b/monkestation/code/modules/clothing/suits/.vs/ProjectSettings.json new file mode 100644 index 000000000000..f8b4888565ca --- /dev/null +++ b/monkestation/code/modules/clothing/suits/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/monkestation/code/modules/clothing/suits/.vs/VSWorkspaceState.json b/monkestation/code/modules/clothing/suits/.vs/VSWorkspaceState.json new file mode 100644 index 000000000000..6b6114114f4e --- /dev/null +++ b/monkestation/code/modules/clothing/suits/.vs/VSWorkspaceState.json @@ -0,0 +1,6 @@ +{ + "ExpandedNodes": [ + "" + ], + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/monkestation/code/modules/clothing/suits/.vs/slnx.sqlite b/monkestation/code/modules/clothing/suits/.vs/slnx.sqlite new file mode 100644 index 000000000000..e7643e69aedd Binary files /dev/null and b/monkestation/code/modules/clothing/suits/.vs/slnx.sqlite differ diff --git a/monkestation/code/modules/clothing/suits/costume.dm b/monkestation/code/modules/clothing/suits/costume.dm index 56966de0fe32..b3fc4c6f60a7 100644 --- a/monkestation/code/modules/clothing/suits/costume.dm +++ b/monkestation/code/modules/clothing/suits/costume.dm @@ -65,4 +65,40 @@ worn_icon = 'monkestation/icons/mob/clothing/head.dmi' icon_state = "kingofbugs_helmet" worn_icon_state = "kingofbugs_helmet" - worn_y_offset = 5 \ No newline at end of file + worn_y_offset = 5 + +/obj/item/clothing/head/helldiverhelmet + name = "helldiver helmet" + desc = "Have a Nice Cup of LIBER-TEA" + icon = 'monkestation/icons/obj/clothing/hats.dmi' + worn_icon = 'monkestation/icons/mob/clothing/head.dmi' + icon_state = "helldiver_helm" + worn_icon_state = "helldiver_helm" + flags_inv = HIDEHAIR|HIDEFACE|HIDEFACIALHAIR|HIDESNOUT + +/datum/loadout_item/head/helldiverhelmet + name = "Helldiver Helmet" + item_path = /obj/item/clothing/head/helldiverhelmet + +/datum/store_item/head/helldiverhelmet + name = "Helldiver Helmet" + item_path = /obj/item/clothing/head/helldiverhelmet + item_cost = 10000 + +/obj/item/clothing/suit/helldiverarmor + name = "helldiver armor" + desc = "How Do You Like The Taste of DEMOCRACY?!" + icon = 'monkestation/icons/obj/clothing/suits.dmi' + worn_icon = 'monkestation/icons/mob/clothing/suit.dmi' + icon_state = "helldiver_armor" + worn_icon_state = "helldiver_armor" + flags_inv = HIDEJUMPSUIT + +/datum/loadout_item/suit/helldiverarmor + name = "Helldiver Armor" + item_path = /obj/item/clothing/suit/helldiverarmor + +/datum/store_item/suit/helldiverarmor + name = "Helldiver Armor" + item_path = /obj/item/clothing/suit/helldiverarmor + item_cost = 10000 \ No newline at end of file diff --git a/monkestation/code/modules/clothing/under/_under.dm b/monkestation/code/modules/clothing/under/_under.dm new file mode 100644 index 000000000000..0cf4a471e76c --- /dev/null +++ b/monkestation/code/modules/clothing/under/_under.dm @@ -0,0 +1,32 @@ + +/obj/item/clothing/under + /// A weak reference to the current accessory that's providing armor. + var/datum/weakref/current_armored_accessory + +/obj/item/clothing/under/proc/refresh_armor() + SIGNAL_HANDLER + var/obj/item/clothing/accessory/armored_accesory = current_armored_accessory?.resolve() + if(armored_accesory) + set_armor(get_armor().subtract_other_armor(armored_accesory.get_armor())) + current_armored_accessory = null + for(var/obj/item/clothing/accessory/accessory as anything in attached_accessories) + if(QDELETED(accessory)) + continue + var/datum/armor/armor = accessory.get_armor() + if(!armor || istype(armor, /datum/armor/none)) + continue + set_armor(get_armor().add_other_armor(accessory.get_armor())) + current_armored_accessory = WEAKREF(accessory) + return + +/obj/item/clothing/under/attach_accessory(obj/item/clothing/accessory/accessory, mob/living/user, attach_message = TRUE) + . = ..() + if(!.) + return + RegisterSignal(accessory, COMSIG_QDELETING, PROC_REF(refresh_armor)) + refresh_armor() + +/obj/item/clothing/under/remove_accessory(obj/item/clothing/accessory/removed) + . = ..() + UnregisterSignal(removed, COMSIG_QDELETING) + refresh_armor() diff --git a/monkestation/code/modules/clothing/under/accessories/medals.dm b/monkestation/code/modules/clothing/under/accessories/medals.dm new file mode 100644 index 000000000000..d3b2619ec9cb --- /dev/null +++ b/monkestation/code/modules/clothing/under/accessories/medals.dm @@ -0,0 +1,6 @@ + +/obj/item/clothing/accessory/medal/plasma + armor_type = /datum/armor/medal_plasma + +/datum/armor/medal_plasma + fire = -10 diff --git a/monkestation/code/modules/clothing/under/accessories/tribal.dm b/monkestation/code/modules/clothing/under/accessories/tribal.dm new file mode 100644 index 000000000000..fb197fba32cc --- /dev/null +++ b/monkestation/code/modules/clothing/under/accessories/tribal.dm @@ -0,0 +1,35 @@ +/obj/item/clothing/accessory/talisman + armor_type = /datum/armor/accessory_talisman + +/datum/armor/accessory_talisman + melee = 5 + bullet = 5 + laser = 5 + energy = 5 + bomb = 20 + bio = 20 + acid = 25 + +/obj/item/clothing/accessory/skullcodpiece + armor_type = /datum/armor/accessory_skullcodpiece + +/datum/armor/accessory_skullcodpiece + melee = 5 + bullet = 5 + laser = 5 + energy = 5 + bomb = 20 + bio = 20 + acid = 25 + +/obj/item/clothing/accessory/skilt + armor_type = /datum/armor/accessory_skilt + +/datum/armor/accessory_skilt + melee = 5 + bullet = 5 + laser = 5 + energy = 5 + bomb = 20 + bio = 20 + acid = 25 diff --git a/monkestation/code/modules/clothing/under/costume.dm b/monkestation/code/modules/clothing/under/costume.dm index 500d8f2fa8bc..2f639f36189e 100644 --- a/monkestation/code/modules/clothing/under/costume.dm +++ b/monkestation/code/modules/clothing/under/costume.dm @@ -72,6 +72,14 @@ alternate_worn_layer = GLOVES_LAYER can_adjust = FALSE +/obj/item/clothing/under/costume/harlequin + name = "harlequin jumpsuit" + desc = "This is what you wear if you wanna be a weird fusion of a clown and mime." + icon = 'monkestation/icons/obj/clothing/uniforms.dmi' + worn_icon = 'monkestation/icons/mob/clothing/uniform.dmi' + icon_state = "harlequin" + can_adjust = FALSE + /obj/item/clothing/under/costume/bee name = "bee hide costume" desc = "A suit made of beehide" diff --git a/monkestation/code/modules/clothing/~donator/clothing.dm b/monkestation/code/modules/clothing/~donator/clothing.dm index f91f8358c722..aada29f2b240 100644 --- a/monkestation/code/modules/clothing/~donator/clothing.dm +++ b/monkestation/code/modules/clothing/~donator/clothing.dm @@ -44,7 +44,7 @@ /obj/item/canvas/drawingtablet/ui_action_click(mob/user, action) if(istype(action, /datum/action/item_action/dtselectcolor)) - currentcolor = input(user, "", "Choose Color", currentcolor) as color|null + currentcolor = tgui_color_picker(user, "", "Choose Color", currentcolor) else if(istype(action, /datum/action/item_action/dtcolormenu)) var/list/selects = colors.Copy() selects["Save"] = "Save" diff --git a/monkestation/code/modules/datums/components/nanites.dm b/monkestation/code/modules/datums/components/nanites.dm index a2d5a962e249..8f700058b4e2 100644 --- a/monkestation/code/modules/datums/components/nanites.dm +++ b/monkestation/code/modules/datums/components/nanites.dm @@ -302,12 +302,12 @@ var/datum/nanite_program/NP = X NP.on_death(gibbed) -/datum/component/nanites/proc/receive_signal(datum/source, code, source = "an unidentified source") +/datum/component/nanites/proc/receive_signal(datum/source, code, signal_source = "an unidentified source") SIGNAL_HANDLER for(var/X in programs) var/datum/nanite_program/NP = X - NP.receive_signal(code, source) + NP.receive_signal(code, signal_source) /datum/component/nanites/proc/receive_comm_signal(datum/source, comm_code, comm_message, comm_source = "an unidentified source") SIGNAL_HANDLER diff --git a/monkestation/code/modules/donator/README.txt b/monkestation/code/modules/donator/README.txt index c2c8b19a8f1d..36fc31477708 100644 --- a/monkestation/code/modules/donator/README.txt +++ b/monkestation/code/modules/donator/README.txt @@ -33,6 +33,8 @@ This PR adds adds donator specific items to the game. Also migrates old donator -Code and sprites done by Lmenvs. +Code and most sprites done by Lmenvs. +Lamb cloak by Dimwhat. +Sprites for Zed's clothing done by CannibalHunter. diff --git a/monkestation/code/modules/donator/code/datum/loadout.dm b/monkestation/code/modules/donator/code/datum/loadout.dm index 8523db21608c..a045877dc054 100644 --- a/monkestation/code/modules/donator/code/datum/loadout.dm +++ b/monkestation/code/modules/donator/code/datum/loadout.dm @@ -240,6 +240,31 @@ donator_only = TRUE requires_purchase = FALSE +/datum/loadout_item/under/miscellaneous/aotuniform + name = "Survey Corps Uniform" + item_path = /obj/item/clothing/under/costume/aotuniform + donator_only = TRUE + requires_purchase = FALSE + +/datum/loadout_item/pocket_items/donator/plantcrab + name = "Pet Delivery Beacon - Plant Crab" + item_path = /obj/item/choice_beacon/pet/donator/plantcrab + donator_only = TRUE + requires_purchase = FALSE + ckeywhitelist = list("Rickdude1231") + +/datum/loadout_item/effects/plantcrab + ckeywhitelist = list("Rickdude1231") + name = "Plant Crab Transformation" + item_path = /obj/item/effect_granter/donator/plant_crab + requires_purchase = FALSE + +/datum/loadout_item/toys/liefflos + name = "Lief Flos Plush" + item_path = /obj/item/toy/plush/liefflos + donator_only = TRUE + requires_purchase = FALSE + //kon chieko /datum/loadout_item/head/bells name = "Hair ribbons with bells" @@ -268,7 +293,7 @@ donator_only = TRUE requires_purchase = FALSE -/datum/loadout_item/toys/puppycat +/datum/loadout_item/toys/jackfrost name = "Jack Frost Plush" item_path = /obj/item/toy/plush/jackfrost donator_only = TRUE @@ -284,5 +309,32 @@ /datum/loadout_item/effects/void_butterfly ckeywhitelist = list("tonymcsp") name = "Void Butterfly Transformation" - item_path = /obj/item/effect_granter/donator/void_butterfly/ + item_path = /obj/item/effect_granter/donator/void_butterfly + requires_purchase = FALSE + + +//Django +/datum/loadout_item/suit/lambcloak + name = "Lamb's Cloak" + item_path = /obj/item/clothing/suit/lambcloak + donator_only = TRUE + requires_purchase = FALSE + +//quilark +/datum/loadout_item/suit/coat_quilark + name = "discontinued winter coat" + item_path = /obj/item/clothing/suit/toggle/quilark + donator_only = TRUE + requires_purchase = FALSE + +/datum/loadout_item/head/fur_cap_quilark + name = "discontinued cross hat" + item_path = /obj/item/clothing/head/costume/fur_cap_quilark + donator_only = TRUE + requires_purchase = FALSE + +/datum/loadout_item/suit/org_thirteen + name = "Organization 13 Cloak" + item_path = /obj/item/clothing/suit/hooded/org_thirteen + donator_only = TRUE requires_purchase = FALSE diff --git a/monkestation/code/modules/donator/code/item/choice_beacon.dm b/monkestation/code/modules/donator/code/item/choice_beacon.dm index 8e2ee55c063c..074a47087946 100644 --- a/monkestation/code/modules/donator/code/item/choice_beacon.dm +++ b/monkestation/code/modules/donator/code/item/choice_beacon.dm @@ -70,3 +70,8 @@ name = "Void Butterfly" default_name = "Void Butterfly" donator_pet = /mob/living/basic/butterfly/void/spacial + +/obj/item/choice_beacon/pet/donator/plantcrab + name = "Plant Crab" + default_name = "Plant Crab" + donator_pet = /mob/living/basic/crab/plant diff --git a/monkestation/code/modules/donator/code/item/clothing.dm b/monkestation/code/modules/donator/code/item/clothing.dm index 97d052f6f832..e2ae9a3d457a 100644 --- a/monkestation/code/modules/donator/code/item/clothing.dm +++ b/monkestation/code/modules/donator/code/item/clothing.dm @@ -188,6 +188,17 @@ /obj/item/toy, ) +/obj/item/clothing/under/costume/aotuniform + name = "\improper Survey Corps Uniform" + desc = "The uniform of a Survey Corps member." + icon = 'monkestation/code/modules/donator/icons/obj/clothing.dmi' + worn_icon = 'monkestation/code/modules/donator/icons/mob/clothing.dmi' + icon_state = "aotuniform" + worn_icon_state = "aotuniform" + inhand_icon_state = null + body_parts_covered = CHEST|ARMS|LEGS + + /obj/item/clothing/head/hooded/aotcloak name = "survey corps cloak hood" desc = "A cozy winter hood attached to a heavy winter jacket." @@ -231,3 +242,85 @@ icon_state = "violet_jacket" inhand_icon_state = null body_parts_covered = CHEST|ARMS + +/obj/item/clothing/suit/toggle/quilark + name = "discontinued winter coat" + desc = "An old world coat, it has an old red cross no longer in use. It smells strangely of iron around the neck." + icon = 'monkestation/code/modules/donator/icons/obj/clothing.dmi' + worn_icon = 'monkestation/code/modules/donator/icons/mob/clothing.dmi' + icon_state = "coat_quilark" + toggle_noun = "zipper" + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + +/obj/item/clothing/suit/toggle/quilark/Initialize(mapload) + . = ..() + allowed += list( + /obj/item/flashlight, + /obj/item/lighter, + /obj/item/modular_computer/pda, + /obj/item/radio, + /obj/item/storage/bag/books, + /obj/item/storage/fancy/cigarettes, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/toy, + ) + + +/obj/item/clothing/head/costume/fur_cap_quilark + name = "discontinued cross hat" + desc = "An old world hat, it has a red cross no longer in use. The inside has a strong scent of iron." + icon = 'monkestation/code/modules/donator/icons/obj/clothing.dmi' + worn_icon = 'monkestation/code/modules/donator/icons/mob/clothing.dmi' + icon_state = "fur_hat_quilark" + +/obj/item/clothing/suit/lambcloak + name = "lamb's cloak" + desc = "A brilliant red cloak adorned with a bell." + icon = 'monkestation/code/modules/donator/icons/obj/clothing.dmi' + worn_icon = 'monkestation/code/modules/donator/icons/mob/clothing.dmi' + icon_state = "lambcloak" + body_parts_covered = CHEST|ARMS + cold_protection = CHEST|ARMS + layer = NECK_LAYER + +/obj/item/clothing/suit/hooded/org_thirteen + name = "\improper Organization 13 Cloak" + desc = "A large, hooded jacket belonging to an Organization 13 member." + icon = 'monkestation/code/modules/donator/icons/obj/clothing.dmi' + worn_icon = 'monkestation/code/modules/donator/icons/mob/clothing.dmi' + icon_state = "org_thirteen" + inhand_icon_state = null + body_parts_covered = CHEST|ARMS + cold_protection = CHEST|ARMS + allowed = list() + armor_type = /datum/armor/hooded_wintercoat + hoodtype = /obj/item/clothing/head/hooded/org_thirteen + + +/obj/item/clothing/suit/hooded/org_thirteen/Initialize(mapload) + . = ..() + allowed += list( + /obj/item/flashlight, + /obj/item/lighter, + /obj/item/modular_computer/pda, + /obj/item/radio, + /obj/item/storage/bag/books, + /obj/item/storage/fancy/cigarettes, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/toy, + ) + +/obj/item/clothing/head/hooded/org_thirteen + name = "organization 13 hood" + desc = "A cozy winter hood attached to a heavy winter jacket." + icon = 'monkestation/code/modules/donator/icons/obj/clothing.dmi' + worn_icon = 'monkestation/code/modules/donator/icons/mob/clothing.dmi' + icon_state = "org_thirteen_hood" + body_parts_covered = HEAD + cold_protection = HEAD + flags_inv = HIDEHAIR|HIDEEARS + armor_type = /datum/armor/hooded_winterhood diff --git a/monkestation/code/modules/donator/code/item/effects.dm b/monkestation/code/modules/donator/code/item/effects.dm index d439d5aa18de..f6ba30f474b0 100644 --- a/monkestation/code/modules/donator/code/item/effects.dm +++ b/monkestation/code/modules/donator/code/item/effects.dm @@ -64,3 +64,9 @@ name = "void butterfly transformation" icon_state = "void_butterfly" animal_transformation = /mob/living/basic/butterfly/void/spacial + +//rickdude +/obj/item/effect_granter/donator/plant_crab + name = "plantcrab transformation" + icon_state = "crab_plant" + animal_transformation = /mob/living/basic/crab/plant diff --git a/monkestation/code/modules/donator/code/item/plush.dm b/monkestation/code/modules/donator/code/item/plush.dm index 593afad90f41..b2da3d9f5532 100644 --- a/monkestation/code/modules/donator/code/item/plush.dm +++ b/monkestation/code/modules/donator/code/item/plush.dm @@ -55,3 +55,10 @@ desc = "A plush of Jack Frost. ~Handcrafted lovingly for tonymcsp" icon = 'monkestation/code/modules/donator/icons/obj/plushes.dmi' icon_state = "jack_frost" + +/obj/item/toy/plush/liefflos + name = "lief flos plush" + desc = "A plush of the Floran Lief Flos. ~Handcrafted lovingly for rickdude" + icon = 'monkestation/code/modules/donator/icons/obj/plushes.dmi' + icon_state = "lief_flos" + diff --git a/monkestation/code/modules/donator/code/mob/pets.dm b/monkestation/code/modules/donator/code/mob/pets.dm index 38665bbdd648..08331de53b3e 100644 --- a/monkestation/code/modules/donator/code/mob/pets.dm +++ b/monkestation/code/modules/donator/code/mob/pets.dm @@ -126,3 +126,12 @@ /mob/living/basic/butterfly/void/spacial fixed_color = TRUE + +/mob/living/basic/crab/plant + name = "Plant crab" + desc = "Is it a crab made of plant or a plant made of crab?" + icon = 'monkestation/code/modules/donator/icons/mob/pets.dmi' + icon_state = "crab_plant" + icon_living = "crab_plant" + icon_dead = "crab_plant_dead" + gold_core_spawnable = NO_SPAWN diff --git a/monkestation/code/modules/donator/icons/mob/clothing.dmi b/monkestation/code/modules/donator/icons/mob/clothing.dmi index a4c6d9eeded3..22f12dbda98f 100644 Binary files a/monkestation/code/modules/donator/icons/mob/clothing.dmi and b/monkestation/code/modules/donator/icons/mob/clothing.dmi differ diff --git a/monkestation/code/modules/donator/icons/mob/pets.dmi b/monkestation/code/modules/donator/icons/mob/pets.dmi index 594f3c184c76..348824e1c7b2 100644 Binary files a/monkestation/code/modules/donator/icons/mob/pets.dmi and b/monkestation/code/modules/donator/icons/mob/pets.dmi differ diff --git a/monkestation/code/modules/donator/icons/obj/clothing.dmi b/monkestation/code/modules/donator/icons/obj/clothing.dmi index 26886ccb21f3..02c934c0e240 100644 Binary files a/monkestation/code/modules/donator/icons/obj/clothing.dmi and b/monkestation/code/modules/donator/icons/obj/clothing.dmi differ diff --git a/monkestation/code/modules/donator/icons/obj/plushes.dmi b/monkestation/code/modules/donator/icons/obj/plushes.dmi index 83f81ea59204..21b301c38fd2 100644 Binary files a/monkestation/code/modules/donator/icons/obj/plushes.dmi and b/monkestation/code/modules/donator/icons/obj/plushes.dmi differ diff --git a/monkestation/code/modules/events/ghost_role/drifting_contractor.dm b/monkestation/code/modules/events/ghost_role/drifting_contractor.dm index 24596dc49bf2..61d0215e93a2 100644 --- a/monkestation/code/modules/events/ghost_role/drifting_contractor.dm +++ b/monkestation/code/modules/events/ghost_role/drifting_contractor.dm @@ -16,7 +16,14 @@ role_name = "Drifting Contractor" /datum/round_event/ghost_role/contractor/spawn_role() - var/list/candidates = get_candidates(ROLE_DRIFTING_CONTRACTOR) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + "Do you want to play as a drifting contractor?", + check_jobban = ROLE_DRIFTING_CONTRACTOR, + role = ROLE_DRIFTING_CONTRACTOR, + poll_time = 20 SECONDS, + pic_source = /datum/antagonist/traitor/contractor, + role_name_text = "drifting contractor" + ) if(!length(candidates)) return NOT_ENOUGH_PLAYERS diff --git a/monkestation/code/modules/events/gravity_generator_blackout.dm b/monkestation/code/modules/events/gravity_generator_blackout.dm new file mode 100644 index 000000000000..289c5e7998e6 --- /dev/null +++ b/monkestation/code/modules/events/gravity_generator_blackout.dm @@ -0,0 +1,3 @@ +/datum/round_event_control/gravity_generator_blackout + weight = 8 + max_occurrences = 2 diff --git a/monkestation/code/modules/events/radiation_storm.dm b/monkestation/code/modules/events/radiation_storm.dm new file mode 100644 index 000000000000..8437e3d5e18b --- /dev/null +++ b/monkestation/code/modules/events/radiation_storm.dm @@ -0,0 +1,3 @@ +/datum/round_event_control/radiation_storm + weight = 5 + max_occurrences = 1 diff --git a/monkestation/code/modules/events/scrubber_clog.dm b/monkestation/code/modules/events/scrubber_clog.dm new file mode 100644 index 000000000000..101888746b16 --- /dev/null +++ b/monkestation/code/modules/events/scrubber_clog.dm @@ -0,0 +1,28 @@ +/datum/round_event_control/scrubber_clog + shared_occurence_type = /datum/round_event_control/scrubber_clog + +/datum/round_event_control/scrubber_clog/flood //I have it here cause of the extra silly spaghetti code all of the scrubbers depend on being in here + name = "Scrubber Clog: Flood" + typepath = /datum/round_event/scrubber_clog/flood + weight = 0 + max_occurrences = 0 + description = "Bees absolutely flood out of a scrubber, used by the Rayne corp bee nuke." + min_wizard_trigger_potency = 3 + max_wizard_trigger_potency = 6 + +/datum/round_event/scrubber_clog/flood + maximum_spawns = 250 + +/datum/round_event/scrubber_clog/flood/setup() + . = ..() + end_when = rand(2000, 4000) + spawn_delay = rand(1, 2) //IT MUST FLOOD + +/datum/round_event/scrubber_clog/flood/announce() + priority_announce("Unusual lifesign readings detected in the entire ventilation network.", "Lifesign Alert", ANNOUNCER_ALIENS) + +/datum/round_event/scrubber_clog/flood/get_mob() + var/static/list/mob_list = list( + /mob/living/basic/bee, + ) + return pick(mob_list) diff --git a/monkestation/code/modules/events/scrubber_overflow.dm b/monkestation/code/modules/events/scrubber_overflow.dm new file mode 100644 index 000000000000..565c982e0dfb --- /dev/null +++ b/monkestation/code/modules/events/scrubber_overflow.dm @@ -0,0 +1,2 @@ +/datum/round_event_control/scrubber_overflow + shared_occurence_type = /datum/round_event_control/scrubber_clog diff --git a/monkestation/code/modules/events/summon_wizard_event.dm b/monkestation/code/modules/events/summon_wizard_event.dm index eebde2200466..23686f45a312 100644 --- a/monkestation/code/modules/events/summon_wizard_event.dm +++ b/monkestation/code/modules/events/summon_wizard_event.dm @@ -1,7 +1,7 @@ /datum/round_event_control/summon_wizard_event name = "Summon Wizard Event" typepath = /datum/round_event/summon_wizard_event - weight = 8 + weight = 0 category = EVENT_CATEGORY_WIZARD description = "Trigger a random wizard event that meets its normal conditions." track = EVENT_TRACK_MAJOR diff --git a/monkestation/code/modules/food_and_drinks/recipes/boiling.dm b/monkestation/code/modules/food_and_drinks/recipes/boiling.dm index 29f0ac91f126..3e46dcdda6b9 100644 --- a/monkestation/code/modules/food_and_drinks/recipes/boiling.dm +++ b/monkestation/code/modules/food_and_drinks/recipes/boiling.dm @@ -5,3 +5,27 @@ results = list(/datum/reagent/water = 5) max_outputs = 10 Nonsouprecipe = TRUE + +/datum/chemical_reaction/food/soup/boiledrice + required_ingredients = list(/obj/item/food/uncooked_rice = 1) + required_reagents = list(/datum/reagent/water = 50) + outputted_ingredients = list(/obj/item/food/boiledrice = 1) + results = list(/datum/reagent/water = 5) + max_outputs = 10 + Nonsouprecipe = TRUE + +// Machinery: Stove +/datum/crafting_recipe/food/stove + machinery = list(/obj/machinery/stove) + steps = list("Add all ingredients into a soup pot","Heat up to 450K") + category = CAT_SPAGHETTI + non_craftable = TRUE + +/datum/crafting_recipe/food/stove/boiledspaghetti + reqs = list(/datum/reagent/water = 50, /obj/item/reagent_containers/cup/soup_pot, /obj/item/food/spaghetti/raw = 1) + result = /obj/item/food/spaghetti/boiledspaghetti + +/datum/crafting_recipe/food/stove/boiledrice + reqs = list(/datum/reagent/water = 50, /obj/item/reagent_containers/cup/soup_pot, /obj/item/food/uncooked_rice = 1) + result = /obj/item/food/boiledrice + category = CAT_SALAD diff --git a/monkestation/code/modules/food_and_drinks/recipes/order_console.dm b/monkestation/code/modules/food_and_drinks/recipes/order_console.dm new file mode 100644 index 000000000000..f2fd77444b12 --- /dev/null +++ b/monkestation/code/modules/food_and_drinks/recipes/order_console.dm @@ -0,0 +1,4 @@ +/datum/orderable_item/reagents/honey + name = "Honey" + item_path = /obj/item/reagent_containers/condiment/honey + cost_per_order = 75 diff --git a/monkestation/code/modules/ghost_players/area_changes.dm b/monkestation/code/modules/ghost_players/area_changes.dm index 13d2caac5f8c..157ef27366be 100644 --- a/monkestation/code/modules/ghost_players/area_changes.dm +++ b/monkestation/code/modules/ghost_players/area_changes.dm @@ -1,88 +1,116 @@ /area/centcom/central_command_areas - area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | NO_EXPLOSIONS_DURING + area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA + ban_explosions = TRUE + grace = TRUE /area/centcom/tdome - area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | NO_EXPLOSIONS_DURING + area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA + ban_explosions = TRUE /area/centcom/tdome/arena/actual name = "Thunder Dome Arena Area" + ban_explosions = FALSE + // the grace effect has special handling for dueling /area/centcom/central_command_areas/ghost_spawn name = "Centcom Ghost Spawn" icon = 'monkestation/icons/area/areas_centcom.dmi' icon_state = "centcom_ghostspawn" - area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA | NO_EXPLOSIONS_DURING + area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA /area/centcom/central_command_areas/supply - area_flags = UNIQUE_AREA | NOTELEPORT | NO_EXPLOSIONS_DURING + area_flags = UNIQUE_AREA | NOTELEPORT /area/centcom/central_command_areas/pre_shuttle name = "Centcomm Pre Shuttle" - area_flags = UNIQUE_AREA | NOTELEPORT | NO_EXPLOSIONS_DURING + area_flags = UNIQUE_AREA | NOTELEPORT /area/centcom/central_command_areas/supply - area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA | NO_EXPLOSIONS_DURING | NO_GHOSTS_DURING_ROUND + area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA | NO_GHOSTS_DURING_ROUND /area/centcom/central_command_areas/borbop name = "Borbop's Bar" icon = 'monkestation/icons/area/areas_centcom.dmi' icon_state = "borbop" - area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA | NO_EXPLOSIONS_DURING + area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA /area/centcom/central_command_areas/kitchen name = "Papa's Pizzeria" icon = 'monkestation/icons/area/areas_centcom.dmi' icon_state = "centcom_kitchen" - area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA | NO_EXPLOSIONS_DURING + area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA /area/centcom/central_command_areas/medical name = "Centcom Medical" icon = 'monkestation/icons/area/areas_centcom.dmi' icon_state = "centcom_medical" - area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA | NO_EXPLOSIONS_DURING + area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA /area/centcom/central_command_areas/botany name = "Centcom Botany" icon = 'monkestation/icons/area/areas_centcom.dmi' icon_state = "centcom_botany" - area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | NO_EXPLOSIONS_DURING + area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA /area/centcom/central_command_areas/hall name = "Centcom Hall" icon = 'monkestation/icons/area/areas_centcom.dmi' icon_state = "centcom_hall" - area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA | NO_EXPLOSIONS_DURING + area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA /area/centcom/central_command_areas/admin_hangout name = "Admin Hangout" icon = 'monkestation/icons/area/areas_centcom.dmi' icon_state = "centcom_hangout" - area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA | NO_EXPLOSIONS_DURING | NO_GHOSTS_DURING_ROUND + area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA | NO_GHOSTS_DURING_ROUND /area/centcom/central_command_areas/ghost_blocker name = "During Round Ghost Blocker" - area_flags = NOTELEPORT | GHOST_AREA | PASSIVE_AREA | NO_EXPLOSIONS_DURING | NO_GHOSTS_DURING_ROUND + area_flags = NOTELEPORT | GHOST_AREA | PASSIVE_AREA | NO_GHOSTS_DURING_ROUND /area/centcom/central_command_areas/evacuation - area_flags = NOTELEPORT | GHOST_AREA | NO_EXPLOSIONS_DURING | NO_GHOSTS_DURING_ROUND + area_flags = NOTELEPORT | GHOST_AREA | NO_GHOSTS_DURING_ROUND /area/centcom/central_command_areas/admin - area_flags = NOTELEPORT | GHOST_AREA | NO_EXPLOSIONS_DURING | NO_GHOSTS_DURING_ROUND + area_flags = NOTELEPORT | GHOST_AREA | NO_GHOSTS_DURING_ROUND /area/centcom/central_command_areas/firing_range name = "Centcom Firing Range" icon = 'monkestation/icons/area/areas_centcom.dmi' icon_state = "centcom_firingrange" - area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | NO_EXPLOSIONS_DURING + area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA + ban_explosions = FALSE + grace = FALSE /area/centcom/central_command_areas/firing_range_checkpoint_control - area_flags = UNIQUE_AREA | NOTELEPORT | NO_EXPLOSIONS_DURING + area_flags = UNIQUE_AREA | NOTELEPORT /area/centcom/central_command_areas/arcade name = "Centcom Arcade" icon = 'monkestation/icons/area/areas_centcom.dmi' icon_state = "centcom_arcade" - area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA | NO_EXPLOSIONS_DURING + area_flags = UNIQUE_AREA | NOTELEPORT | GHOST_AREA | PASSIVE_AREA + +/area/centcom + /// Whether to ban explosions in this area. + var/ban_explosions = FALSE + /// Whether this area gives the "grace" status effect or not. + var/grace = FALSE + +/area/centcom/Initialize(mapload) + . = ..() + RegisterSignals(src, list(COMSIG_AREA_INTERNAL_EXPLOSION, COMSIG_AREA_EXPLOSION_SHOCKWAVE), PROC_REF(explosion_check)) + +/area/centcom/Entered(atom/movable/thing) + . = ..() + if(grace && isliving(thing)) + var/mob/living/thingy = thing + thingy.apply_status_effect(/datum/status_effect/centcom_grace) + +/area/centcom/proc/explosion_check() + SIGNAL_HANDLER + if(ban_explosions) + return COMSIG_CANCEL_EXPLOSION // Override that handles teleporting ghost player's mobs back to Centcom ghostspawn, if they try to // move out of it during the round. diff --git a/monkestation/code/modules/ghost_players/arena/fight_button.dm b/monkestation/code/modules/ghost_players/arena/fight_button.dm index 1dbe4e8a2066..494b68f8c2e7 100644 --- a/monkestation/code/modules/ghost_players/arena/fight_button.dm +++ b/monkestation/code/modules/ghost_players/arena/fight_button.dm @@ -25,7 +25,7 @@ /obj/item/grenade/clusterbuster, /obj/item/spear/bamboospear, /obj/item/reagent_containers/spray/chemsprayer/magical, //unsure if this would cause issues but they do already have access to a full chem lab so it should be fine - /obj/item/gun/energy/laser/instakill, //first to hit the other wins, very fast matches +// /obj/item/gun/energy/laser/instakill, //first to hit the other wins, very fast matches /obj/item/melee/baton/security/loaded, /obj/item/chainsaw, /obj/item/melee/energy/sword/saber, @@ -152,17 +152,19 @@ spawned_weapons += WEAKREF(one_weapon) var/turf/one_spot = locate(148, 34, SSmapping.levels_by_trait(ZTRAIT_CENTCOM)[1]) player_one.forceMove(one_spot) - player_one.equipOutfit(/datum/outfit/job/assistant) + player_one.equipOutfit(/datum/outfit/ghost_player) player_one.put_in_active_hand(one_weapon, TRUE) player_one.dueling = TRUE + SEND_SIGNAL(player_one, COMSIG_HUMAN_BEGIN_DUEL) var/obj/item/two_weapon = new weapon_of_choice(src) spawned_weapons += WEAKREF(two_weapon) var/turf/two_spot = locate(164, 34, SSmapping.levels_by_trait(ZTRAIT_CENTCOM)[1]) player_two.forceMove(two_spot) - player_two.equipOutfit(/datum/outfit/job/assistant) + player_two.equipOutfit(/datum/outfit/ghost_player) player_two.put_in_active_hand(two_weapon, TRUE) player_two.dueling = TRUE + SEND_SIGNAL(player_two, COMSIG_HUMAN_BEGIN_DUEL) /obj/structure/fight_button/proc/end_duel(mob/living/carbon/human/ghost/loser) if(loser == player_one) @@ -175,6 +177,8 @@ player_two.linked_button = null player_one.dueling = FALSE player_two.dueling = FALSE + SEND_SIGNAL(player_one, COMSIG_HUMAN_END_DUEL) + SEND_SIGNAL(player_two, COMSIG_HUMAN_END_DUEL) player_one = null player_two = null diff --git a/monkestation/code/modules/ghost_players/centcom_grace.dm b/monkestation/code/modules/ghost_players/centcom_grace.dm new file mode 100644 index 000000000000..d97f50637089 --- /dev/null +++ b/monkestation/code/modules/ghost_players/centcom_grace.dm @@ -0,0 +1,67 @@ +/datum/status_effect/centcom_grace + id = "centcom_grace" + tick_interval = -1 + alert_type = null + var/last_active = FALSE + +/datum/status_effect/centcom_grace/on_apply() + . = ..() + if(!.) + return + giveth_taketh() + RegisterSignals(owner, list(COMSIG_ENTER_AREA, COMSIG_HUMAN_BEGIN_DUEL, COMSIG_HUMAN_END_DUEL), PROC_REF(giveth_taketh)) + +/datum/status_effect/centcom_grace/on_remove() + . = ..() + take_traits() + UnregisterSignal(owner, list(COMSIG_ENTER_AREA, COMSIG_HUMAN_BEGIN_DUEL, COMSIG_HUMAN_END_DUEL)) + +/datum/status_effect/centcom_grace/proc/giveth_taketh() + SIGNAL_HANDLER + if(active()) + if(!last_active) + owner.SetAllImmobility(0) + owner.set_safe_hunger_level() + owner.extinguish_mob() + give_traits() + last_active = TRUE + else + take_traits() + last_active = FALSE + +/datum/status_effect/centcom_grace/proc/active() + . = TRUE + if(istype(owner, /mob/living/carbon/human/ghost)) + var/mob/living/carbon/human/ghost/ghost_owner = owner + if(ghost_owner.dueling) + return FALSE + var/area/centcom/centcom_area = get_area(owner) + if(!istype(centcom_area) || !centcom_area.grace) + return FALSE + +/datum/status_effect/centcom_grace/proc/give_traits() + if(QDELETED(owner)) + qdel(src) + return + owner.add_traits(list( + TRAIT_RESISTCOLD, + TRAIT_RESISTHEAT, + TRAIT_RESISTLOWPRESSURE, + TRAIT_RESISTHIGHPRESSURE, + TRAIT_NOBREATH, + TRAIT_NOHUNGER, + TRAIT_STABLEHEART, + TRAIT_STABLELIVER, + TRAIT_BOMBIMMUNE, + TRAIT_RADIMMUNE, + TRAIT_TUMOR_SUPPRESSED, + TRAIT_IGNORESLOWDOWN, + TRAIT_NOFIRE, + TRAIT_NODISMEMBER + ), id) + +/datum/status_effect/centcom_grace/proc/take_traits() + if(QDELETED(owner)) + qdel(src) + return + REMOVE_TRAITS_IN(owner, id) diff --git a/monkestation/code/modules/ghost_players/ghost_player.dm b/monkestation/code/modules/ghost_players/ghost_player.dm index 38827f2bf667..74212640c6db 100644 --- a/monkestation/code/modules/ghost_players/ghost_player.dm +++ b/monkestation/code/modules/ghost_players/ghost_player.dm @@ -23,8 +23,7 @@ GLOBAL_VAR_INIT(disable_ghost_spawning, FALSE) /mob/living/carbon/human/ghost/death(gibbed) . = ..() - fully_heal() - move_to_ghostspawn() + life_or_death() /mob/living/carbon/human/ghost/New(_old_key, datum/mind/_old_mind, _old_reenter, obj/item/organ/internal/brain/_old_human) . = ..() @@ -48,24 +47,26 @@ GLOBAL_VAR_INIT(disable_ghost_spawning, FALSE) return ..() /mob/living/carbon/human/ghost/Life(seconds_per_tick, times_fired) - if(stat > SOFT_CRIT) - if(dueling) - linked_button?.end_duel(src) - move_to_ghostspawn() - fully_heal() . = ..() + if(. && stat > SOFT_CRIT) + life_or_death() /mob/living/carbon/human/ghost/proc/disolve_ghost() - var/mob/dead/observer/new_ghost = ghostize(FALSE) - new_ghost.key = old_key - new_ghost.mind = old_mind - new_ghost.can_reenter_corpse = old_reenter - - if(old_human) - old_human.temporary_sleep = FALSE - + var/mob/dead/observer/new_ghost = ghostize(can_reenter_corpse = FALSE) + if(!QDELETED(new_ghost)) + new_ghost.key = old_key + new_ghost.mind = old_mind + new_ghost.can_reenter_corpse = old_reenter + old_human?.temporary_sleep = FALSE qdel(src) +/mob/living/carbon/human/ghost/proc/life_or_death() + if(QDELING(src) || QDELETED(client) || client.is_afk()) + disolve_ghost() + else + move_to_ghostspawn() + revive(full_heal_flags = ADMIN_HEAL_ALL) + /datum/action/cooldown/mob_cooldown/return_to_ghost name = "Return to Ghost" desc = "Either returns you to being a ghost or sends your soul back to your last body if it's revived." @@ -132,12 +133,16 @@ GLOBAL_VAR_INIT(disable_ghost_spawning, FALSE) brain.temporary_sleep = TRUE var/client/our_client = client || GLOB.directory[ckey] - var/mob/living/carbon/human/ghost/new_existance = new(key, mind, can_reenter_corpse, brain) - our_client?.prefs.safe_transfer_prefs_to(new_existance, TRUE, FALSE) - new_existance.move_to_ghostspawn() - new_existance.key = key - new_existance.equipOutfit(/datum/outfit/job/assistant) - SSquirks.AssignQuirks(new_existance, our_client) + var/mob/living/carbon/human/ghost/new_existence = new(key, mind, can_reenter_corpse, brain) + our_client?.prefs.safe_transfer_prefs_to(new_existence, TRUE, FALSE) + new_existence.move_to_ghostspawn() + new_existence.key = key + new_existence.equip_outfit_and_loadout(/datum/outfit/ghost_player, our_client.prefs) + for(var/datum/loadout_item/item as anything in loadout_list_to_datums(our_client?.prefs?.loadout_list)) + if(length(item.restricted_roles)) + continue + item.post_equip_item(our_client.prefs, new_existence) + SSquirks.AssignQuirks(new_existence, our_client) our_client?.init_verbs() qdel(src) return TRUE diff --git a/monkestation/code/modules/ghost_players/ghost_player_outfit.dm b/monkestation/code/modules/ghost_players/ghost_player_outfit.dm new file mode 100644 index 000000000000..92b84072981f --- /dev/null +++ b/monkestation/code/modules/ghost_players/ghost_player_outfit.dm @@ -0,0 +1,17 @@ +/datum/outfit/ghost_player + name = "Ghost Player" + shoes = /obj/item/clothing/shoes/sneakers/black + box = /obj/item/storage/box/survival/engineer + +/datum/outfit/ghost_player/pre_equip(mob/living/carbon/human/target, visualsOnly) + . = ..() + uniform = (target.jumpsuit_style == PREF_SKIRT) ? /obj/item/clothing/under/color/jumpskirt/grey : /obj/item/clothing/under/color/grey + switch(target.backpack) + if(GSATCHEL, DSATCHEL) + back = /obj/item/storage/backpack/satchel + if(GDUFFELBAG, DDUFFELBAG) + back = /obj/item/storage/backpack/duffelbag + if(LSATCHEL) + back = /obj/item/storage/backpack/satchel/leather + else + back = /obj/item/storage/backpack diff --git a/monkestation/code/modules/ghost_players/job_helpers/_centcom_item_spawner.dm b/monkestation/code/modules/ghost_players/job_helpers/_centcom_item_spawner.dm index bae067fb671e..64656c7863e0 100644 --- a/monkestation/code/modules/ghost_players/job_helpers/_centcom_item_spawner.dm +++ b/monkestation/code/modules/ghost_players/job_helpers/_centcom_item_spawner.dm @@ -23,17 +23,13 @@ /obj/structure/centcom_item_spawner/attack_hand(mob/living/user, list/modifiers) . = ..() - var/choice - if(length(items_to_spawn == 1)) - choice = 1 //this will act as an access key - else - choice = tgui_input_list(user, "What do you wish to fabricate?", "[src.name]", items_to_spawn) + var/choice = length(items_to_spawn) == 1 ? 1 : tgui_input_list(user, "What do you wish to fabricate?", "[src.name]", items_to_spawn) // the 1 acts as an access key if(!choice) return var/atom/second_choice = tgui_input_list(user, "Choose what to fabricate", "[choice]", items_to_spawn[choice]) - if(type in blacklisted_items) //should not be visible but just be extra sure we cant print these + if(!ispath(second_choice) || (type in blacklisted_items)) //should not be visible but just be extra sure we cant print these return spawn_chosen_item(second_choice) diff --git a/monkestation/code/modules/hydroponics/grown/honeydew.dm b/monkestation/code/modules/hydroponics/grown/honeydew.dm new file mode 100644 index 000000000000..eb313b71cd09 --- /dev/null +++ b/monkestation/code/modules/hydroponics/grown/honeydew.dm @@ -0,0 +1,46 @@ +/obj/item/seeds/watermelon/honeydew + name = "pack of honeydew melon seeds" + desc = "These seeds grow into sweet honeydew melon plants." + icon = 'monkestation/icons/obj/hydroponics/fruit.dmi' + icon_state = "honeydew-seed" + icon_dead = "honeydew-dead" + species = "honeydew" + plantname = "Honeydew Melon Vines" + product = /obj/item/food/grown/honeydew + lifespan = 60 + endurance = 40 + growing_icon = 'monkestation/icons/obj/hydroponics/growing.dmi' + genes = list(/datum/plant_gene/trait/repeated_harvest) + reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.1, /datum/reagent/consumable/nutriment = 0.15) + rarity = 20 + graft_gene = /datum/plant_gene/trait/repeated_harvest + +/obj/item/food/grown/honeydew + seed = /obj/item/seeds/watermelon/honeydew + name = "honeydew melon" + desc = "A sweet melon variant that, bizarrely, distills into honey." + icon = 'monkestation/icons/obj/hydroponics/harvest.dmi' + icon_state = "honeydew" + foodtypes = FRUIT + distill_reagent = /datum/reagent/consumable/honey + +/obj/item/food/grown/honeydew/make_processable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/honeydewslice, 6, 20, screentip_verb = "Slice") + +/obj/item/food/grown/honeydew/Initialize() + . = ..() + // Used to check if they are wearing a horsemask + RegisterSignal(src, COMSIG_FOOD_EATEN, PROC_REF(check_horse_mask)) + +/// Checks if the consumer of this honeydew is wearing a horse mask, if they are give them an achievement +/obj/item/food/grown/honeydew/proc/check_horse_mask(obj/item/our_plant, mob/living/carbon/human/eater, mob/feeder) + SIGNAL_HANDLER + + // If they arent wearing a horsemask they dont get the achievement + if(!istype(eater.wear_mask, /obj/item/clothing/mask/animal/horsehead)) + return + + to_chat(eater, span_notice("Not bad actually.")) + // Gives them the honeydew achievement + eater.client.give_award(/datum/award/achievement/misc/jared_leto, eater) + diff --git a/monkestation/code/modules/hydroponics/mutations/base.dm b/monkestation/code/modules/hydroponics/mutations/base.dm index 85f4aed01fb1..4d01ae6db6b1 100644 --- a/monkestation/code/modules/hydroponics/mutations/base.dm +++ b/monkestation/code/modules/hydroponics/mutations/base.dm @@ -418,3 +418,10 @@ required_endurance = list(60, 70) required_yield = list(5, 10) required_lifespan = list(-INFINITY, 20) + +/datum/hydroponics/plant_mutation/honeydew + mutates_from = list(/obj/item/seeds/watermelon) + created_product = /obj/item/food/grown/honeydew + created_seed = /obj/item/seeds/watermelon/honeydew + required_yield = list(20, INFINITY) + required_lifespan = list(60, INFINITY) diff --git a/monkestation/code/modules/hydroponics/seeds.dm b/monkestation/code/modules/hydroponics/seeds.dm index bc1de174a79f..b271390e939c 100644 --- a/monkestation/code/modules/hydroponics/seeds.dm +++ b/monkestation/code/modules/hydroponics/seeds.dm @@ -76,6 +76,9 @@ for(var/g in genes) var/datum/plant_gene/G = g S.genes += G.Copy() + + for(var/datum/plant_gene/trait/traits in S.genes) + traits.on_new_seed(S) // Copy all the stats S.set_lifespan(lifespan) S.set_endurance(endurance) diff --git a/monkestation/code/modules/job_xp/milestones/_milestones.dm b/monkestation/code/modules/job_xp/milestones/_milestones.dm index 2d6f74bc98c6..6c1ec4bad623 100644 --- a/monkestation/code/modules/job_xp/milestones/_milestones.dm +++ b/monkestation/code/modules/job_xp/milestones/_milestones.dm @@ -18,7 +18,7 @@ var/datum/loadout_item/listed_loadout = milestone_type if(!force) for(var/path in user.prefs.job_rewards_claimed[key_id]) - if(path == initial(milestone_type)) + if(path == milestone_type) return if(!user.prefs.inventory[initial(listed_loadout.item_path)]) user.prefs.inventory += initial(listed_loadout.item_path) diff --git a/monkestation/code/modules/jobs/job_types/chaplain.dm b/monkestation/code/modules/jobs/job_types/chaplain.dm new file mode 100644 index 000000000000..71e59f810752 --- /dev/null +++ b/monkestation/code/modules/jobs/job_types/chaplain.dm @@ -0,0 +1,4 @@ +/datum/job/chaplain/after_spawn(mob/living/spawned, client/player_client) + . = ..() + if(spawned.mind) + ADD_TRAIT(spawned.mind, TRAIT_BLOODSUCKER_HUNTER, JOB_TRAIT) diff --git a/monkestation/code/modules/jobs/job_types/curator.dm b/monkestation/code/modules/jobs/job_types/curator.dm new file mode 100644 index 000000000000..1748076be53f --- /dev/null +++ b/monkestation/code/modules/jobs/job_types/curator.dm @@ -0,0 +1,4 @@ +/datum/job/curator/after_spawn(mob/living/spawned, client/player_client) + . = ..() + if(spawned.mind) + ADD_TRAIT(spawned.mind, TRAIT_BLOODSUCKER_HUNTER, JOB_TRAIT) diff --git a/monkestation/code/modules/library/skill_learning/job_skillchips/shaft_miner.dm b/monkestation/code/modules/library/skill_learning/job_skillchips/shaft_miner.dm index 951ef7611af6..73950765a024 100644 --- a/monkestation/code/modules/library/skill_learning/job_skillchips/shaft_miner.dm +++ b/monkestation/code/modules/library/skill_learning/job_skillchips/shaft_miner.dm @@ -133,6 +133,7 @@ //Items: Misc /obj/item/toy/plush/moth/ = list("Bug!", "Found a bug!", "There's a bug here!", "Moth!", "Moth here!", "🐛"), + /obj/item/reagent_containers/cup/glass/drinkingglass/filled/sunset_sarsaparilla = list("Patroling the lavalands almost makes you wish for an ash storm."), //Machines /obj/machinery/mineral/ore_redemption/ = list("ORM! Drop off your rocks and stones!", "It's a mystery to me how all these minerals fit inside!", "Making a deposit!", "Molly!", "Bloody scientists never upgrade this thing..."), diff --git a/monkestation/code/modules/liquids/liquid_controller.dm b/monkestation/code/modules/liquids/liquid_controller.dm index acdb58359679..6fdd85e5ff61 100644 --- a/monkestation/code/modules/liquids/liquid_controller.dm +++ b/monkestation/code/modules/liquids/liquid_controller.dm @@ -46,6 +46,9 @@ SUBSYSTEM_DEF(liquids) if(length(arrayed_groups)) for(var/g in arrayed_groups) var/datum/liquid_group/LG = g + if(!LG) + arrayed_groups -= g + continue while(!MC_TICK_CHECK && length(LG.splitting_array)) // three at a time until we either finish or over-run, this should be done before anything else LG.work_on_split_queue() LG.cleanse_members() @@ -87,6 +90,9 @@ SUBSYSTEM_DEF(liquids) temperature_queue -= temperature_turf if(!temperature_turf.liquids) continue + if(!temperature_turf.liquids.liquid_group) + qdel(temperature_turf.liquids) + continue temperature_turf.liquids.liquid_group.act_on_queue(temperature_turf) run_type = SSLIQUIDS_RUN_TYPE_EVAPORATION diff --git a/monkestation/code/modules/liquids/liquid_effect.dm b/monkestation/code/modules/liquids/liquid_effect.dm index 201d95fae7b3..9e1e8324791f 100644 --- a/monkestation/code/modules/liquids/liquid_effect.dm +++ b/monkestation/code/modules/liquids/liquid_effect.dm @@ -122,6 +122,9 @@ /obj/effect/abstract/liquid_turf/proc/movable_entered(datum/source, atom/movable/AM) SIGNAL_HANDLER + if(!liquid_group) + qdel(src) + return var/turf/T = source if(isobserver(AM)) @@ -143,8 +146,9 @@ liquid_group.expose_atom(stepped_human, 1, TOUCH) else if (isliving(AM)) var/mob/living/L = AM - if(prob(7) && !(L.movement_type & FLYING) && L.body_position == STANDING_UP) - L.slip(30, T, NO_SLIP_WHEN_WALKING, 0, TRUE) + if(liquid_group.slippery) + if(prob(7) && !(L.movement_type & FLYING) && L.body_position == STANDING_UP) + L.slip(30, T, NO_SLIP_WHEN_WALKING, 0, TRUE) if(fire_state) AM.fire_act((T20C+50) + (50*fire_state), 125) @@ -244,6 +248,10 @@ /obj/effect/abstract/liquid_turf/proc/examine_turf(turf/source, mob/examiner, list/examine_list) SIGNAL_HANDLER + if(!liquid_group) + qdel(src) + return + // This should always have reagents if this effect object exists, but as a sanity check... if(!length(liquid_group.reagents.reagent_list)) return diff --git a/monkestation/code/modules/liquids/liquid_groups.dm b/monkestation/code/modules/liquids/liquid_groups.dm index 6e83dfaa1dfe..bbf17b723c88 100644 --- a/monkestation/code/modules/liquids/liquid_groups.dm +++ b/monkestation/code/modules/liquids/liquid_groups.dm @@ -66,6 +66,8 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) var/exposure = FALSE ///array generated by bulk splitting var/list/splitting_array = list() + ///are we slippery + var/slippery = TRUE ///NEW/DESTROY /datum/liquid_group/New(height, obj/effect/abstract/liquid_turf/created_liquid) @@ -76,8 +78,10 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) add_to_group(created_liquid.my_turf) cached_edge_turfs[created_liquid.my_turf] = list(NORTH, SOUTH, EAST, WEST) SSliquids.active_groups |= src + RegisterSignal(reagents, COMSIG_REAGENTS_DEL_REAGENT, PROC_REF(removed_reagent)) /datum/liquid_group/Destroy() + UnregisterSignal(reagents, COMSIG_REAGENTS_DEL_REAGENT) SSliquids.active_groups -= src if(src in SSliquids.arrayed_groups) @@ -86,10 +90,16 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) for(var/t in members) var/turf/T = t T.liquids.liquid_group = null - members = null + members = list() burning_members = null return ..() +/datum/liquid_group/proc/removed_reagent(datum/reagents/source, datum/reagent/modified) + for(var/turf/member as anything in members) + if(!member.liquids) + continue + modified.remove_from_member(member.liquids) + ///GROUP CONTROLLING /datum/liquid_group/proc/add_to_group(turf/T) if(!T) @@ -104,6 +114,9 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) members[T] = TRUE T.liquids.liquid_group = src + for(var/datum/reagent/reagent as anything in reagents.reagent_list) + reagent.add_to_member(T.liquids) + reagents.maximum_volume += 1000 /// each turf will hold 1000 units plus the base amount spread across the group if(group_color) T.liquids.color = group_color @@ -121,6 +134,9 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) if(T.liquids) T.liquids.liquid_group = null + for(var/datum/reagent/reagent as anything in reagents.reagent_list) + reagent.remove_from_member(T.liquids) + if(!members.len) qdel(src) return @@ -145,7 +161,11 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) add_reagents(reagent_list = created_reagent_list, chem_temp = otherg.group_temperature) cached_edge_turfs |= otherg.cached_edge_turfs - for(var/turf/liquid_turf in otherg.members) + for(var/turf/liquid_turf as anything in members) + for(var/datum/reagent/reagent as anything in reagents.reagent_list) + reagent.add_to_member(liquid_turf.liquids) + + for(var/turf/liquid_turf as anything in otherg.members) otherg.remove_from_group(liquid_turf) add_to_group(liquid_turf) @@ -219,6 +239,7 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) for(var/turf/listed_turf as anything in members) if(isclosedturf(listed_turf)) remove_from_group(listed_turf) + qdel(listed_turf.liquids) /datum/liquid_group/proc/process_member(turf/member) if(isspaceturf(member)) @@ -237,6 +258,7 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) turf_reagents = new(100000) exposure = FALSE + slippery = FALSE for(var/reagent_type in reagents.reagent_list) var/datum/reagent/pulled_reagent = reagent_type var/amount = pulled_reagent.volume / members.len @@ -247,6 +269,8 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) turf_reagents.add_reagent(pulled_reagent.type, amount) if(pulled_reagent.turf_exposure && amount > 10) exposure = TRUE + if(pulled_reagent.slippery) + slippery = TRUE /datum/liquid_group/proc/process_turf_disperse() @@ -367,10 +391,34 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) handle_visual_changes() +/datum/liquid_group/proc/transfer_specific_reagents(datum/reagents/secondary_reagent, amount, list/reagents_to_check, obj/effect/abstract/liquid_turf/remover, merge = FALSE) + if(!length(reagents_to_check)) + return + var/total_hits = 0 + var/total_volume = 0 + for(var/datum/reagent/reagent_type in reagents.reagent_list) + if(!(reagent_type.type in reagents_to_check)) + continue + total_hits++ + total_volume += reagent_type.volume + if(!total_hits) + return + + var/precent = (amount / total_volume) + for(var/datum/reagent/reagent_type in reagents.reagent_list) + if(!(reagent_type.type in reagents_to_check)) + continue + secondary_reagent.add_reagent(reagent_type.type, reagent_type.volume * precent, no_react = TRUE) + remove_specific(amount = reagent_type.volume * precent, reagent_type = reagent_type.type) + + process_removal() + handle_visual_changes() + + /datum/liquid_group/proc/process_removal(amount) total_reagent_volume = reagents.total_volume - if(total_reagent_volume) + if(total_reagent_volume && length(members)) //Otherwise we are probably just sending the last of things reagents_per_turf = total_reagent_volume / length(members) else reagents_per_turf = 0 @@ -462,9 +510,15 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) remove_any(amount = reagents_to_remove) + if(!reagents_per_turf) + return + if(group_burn_rate >= reagents_per_turf) var/list/removed_turf = list() - for(var/num = 1, num < round(group_burn_rate / reagents_per_turf)) + var/number = round(group_burn_rate / reagents_per_turf) + for(var/num in 1 to number) + if(!length(burning_members)) + break var/turf/picked_turf = burning_members[1] extinguish(picked_turf) remove_from_group(picked_turf) @@ -740,7 +794,7 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) var/list/temp = return_connected_liquids(cardinal.liquids) if(isnull(temp) || !length(temp)) continue - connected_array += list(temp) + connected_array += list(list(temp)) if(!length(connected_array)) return @@ -772,6 +826,9 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) for(var/list/liquid_list as anything in connected_liquids) var/datum/liquid_group/new_group = new(1) + if(!members) + members = list() + trans_to_seperate_group(new_group.reagents, amount_to_transfer) for(var/turf/connected_liquid in liquid_list) new_group.check_edges(connected_liquid) @@ -781,7 +838,6 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) remove_from_group(connected_liquid, TRUE) new_group.add_to_group(connected_liquid) - trans_to_seperate_group(new_group.reagents, amount_to_transfer) new_group.total_reagent_volume = new_group.reagents.total_volume new_group.reagents_per_turf = new_group.total_reagent_volume / length(new_group.members) diff --git a/monkestation/code/modules/liquids/liquid_status_effect.dm b/monkestation/code/modules/liquids/liquid_status_effect.dm index f431e586f58e..514667fc0272 100644 --- a/monkestation/code/modules/liquids/liquid_status_effect.dm +++ b/monkestation/code/modules/liquids/liquid_status_effect.dm @@ -12,33 +12,30 @@ //Factor in swimming skill here? var/turf/T = get_turf(owner) var/slowdown_amount = T.liquids.liquid_group.group_overlay_state * 0.5 - owner.add_or_update_variable_actionspeed_modifier(/datum/movespeed_modifier/liquids, multiplicative_slowdown = slowdown_amount) + owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/liquids, multiplicative_slowdown = slowdown_amount) /datum/status_effect/water_affected/tick() - var/turf/T = get_turf(owner) - if(!T || !T.liquids || T.liquids.liquid_group.group_overlay_state == LIQUID_STATE_PUDDLE) + var/turf/owner_turf = get_turf(owner) + if(QDELETED(owner_turf) || QDELETED(owner_turf.liquids) || owner_turf.liquids.liquid_group.group_overlay_state == LIQUID_STATE_PUDDLE) qdel(src) return calculate_water_slow() //Make the reagents touch the person - var/fraction = SUBMERGEMENT_PERCENT(owner, T.liquids) - T.liquids.liquid_group.expose_members_turf(T.liquids) - T.liquids.liquid_group.transfer_to_atom(T.liquids, ((SUBMERGEMENT_REAGENTS_TOUCH_AMOUNT*fraction/20)), owner) + var/fraction = SUBMERGEMENT_PERCENT(owner, owner_turf.liquids) + owner_turf.liquids.liquid_group.expose_members_turf(owner_turf.liquids) + owner_turf.liquids.liquid_group.transfer_to_atom(owner_turf.liquids, ((SUBMERGEMENT_REAGENTS_TOUCH_AMOUNT * fraction / 20)), owner) return ..() /datum/status_effect/water_affected/on_remove() - owner.remove_movespeed_modifier("water_slow") - + owner.remove_movespeed_modifier(/datum/movespeed_modifier/liquids) /datum/movespeed_modifier/liquids variable = TRUE - blacklisted_movetypes = FLOATING - + blacklisted_movetypes = FLOATING | FLYING /datum/status_effect/ocean_affected - id = "oceanaffected" alert_type = null duration = -1 diff --git a/monkestation/code/modules/liquids/liquid_turf.dm b/monkestation/code/modules/liquids/liquid_turf.dm index 2087a5ac0a93..226d9afd6ecd 100644 --- a/monkestation/code/modules/liquids/liquid_turf.dm +++ b/monkestation/code/modules/liquids/liquid_turf.dm @@ -37,6 +37,10 @@ //More efficient than add_liquid for multiples /turf/proc/add_liquid_list(reagent_list, no_react = FALSE, chem_temp) + if(liquids && !liquids.liquid_group) + qdel(liquids) + return + if(!liquids) liquids = new(src) liquids.liquid_group.add_reagents(liquids, reagent_list, chem_temp) diff --git a/monkestation/code/modules/mapping/access_helpers.dm b/monkestation/code/modules/mapping/access_helpers.dm index e1f00e361b73..6a7dac901dfa 100644 --- a/monkestation/code/modules/mapping/access_helpers.dm +++ b/monkestation/code/modules/mapping/access_helpers.dm @@ -1,3 +1,18 @@ +/obj/effect/mapping_helpers/airlock/access/any/payload_windoor(obj/machinery/door/window/windoor) + if(windoor.req_access != null) + log_mapping("[src] at [AREACOORD(src)] tried to set req_one_access, but req_access was already set!") + else + var/list/access_list = get_access() + windoor.req_one_access += access_list + +/obj/effect/mapping_helpers/airlock/access/all/payload_windoor(obj/machinery/door/window/windoor) + if(windoor.req_one_access != null) + log_mapping("[src] at [AREACOORD(src)] tried to set req_one_access, but req_access was already set!") + else + var/list/access_list = get_access() + windoor.req_access += access_list + + /obj/effect/mapping_helpers/airlock/access/all/service/kitchen/east_offset offset_dir = EAST diff --git a/monkestation/code/modules/mapping/mapping_helpers.dm b/monkestation/code/modules/mapping/mapping_helpers.dm index 0b464f77a218..0cf47616d4d5 100644 --- a/monkestation/code/modules/mapping/mapping_helpers.dm +++ b/monkestation/code/modules/mapping/mapping_helpers.dm @@ -50,3 +50,30 @@ /obj/effect/area_power_helper/requires_power set_state = TRUE + +/obj/effect/mapping_helpers/airlock/Initialize(mapload) + . = ..() + if(!mapload) + log_mapping("[src] spawned outside of mapload!") + return + + var/turf/spot = (offset_dir ? get_step(src, offset_dir) : loc) + if(!try_for_airlock(spot) && !try_for_windoor(spot)) + log_mapping("[src] failed to find an airlock at [AREACOORD(src)]") + +/obj/effect/mapping_helpers/airlock/proc/try_for_airlock(turf/spot) + . = FALSE + var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in spot + if(!QDELETED(airlock)) + payload(airlock) + return TRUE + +/obj/effect/mapping_helpers/airlock/proc/try_for_windoor(turf/spot) + . = FALSE + var/obj/machinery/door/window/windoor = locate(/obj/machinery/door/window) in spot + if(!QDELETED(windoor)) + payload_windoor(windoor) + return TRUE + +/obj/effect/mapping_helpers/airlock/proc/payload_windoor(obj/machinery/door/window/windoor) + return diff --git a/monkestation/code/modules/mech_comp/objects/screen.dm b/monkestation/code/modules/mech_comp/objects/screen.dm index 07e6aed284d3..3b7113459fd8 100644 --- a/monkestation/code/modules/mech_comp/objects/screen.dm +++ b/monkestation/code/modules/mech_comp/objects/screen.dm @@ -50,7 +50,9 @@ display = letter update_icon_state() +/* what the fuck??? -lucy /obj/item/mcobject/screen/proc/update_screen(letter) letter = uppertext(letter) switch(letter) if(" ") +*/ diff --git a/monkestation/code/modules/mining/accelerators/_wastes_pin.dm b/monkestation/code/modules/mining/accelerators/_wastes_pin.dm new file mode 100644 index 000000000000..e121efe29d61 --- /dev/null +++ b/monkestation/code/modules/mining/accelerators/_wastes_pin.dm @@ -0,0 +1,26 @@ +//Wastes firing pin - restricts a weapon to only outside when mining - based on area defines not z-level +/obj/item/firing_pin/wastes + name = "Wastes firing pin" + desc = "This safety firing pin allows weapons to be fired only outside on the wastes of lavaland or icemoon." + fail_message = "Wastes check failed! - Try getting further from the station first." + pin_hot_swappable = FALSE + pin_removable = FALSE + var/list/wastes = list( + /area/icemoon/surface/outdoors, + /area/icemoon/underground/unexplored, + /area/icemoon/underground/explored, + + /area/lavaland/surface/outdoors, + + /area/ocean/generated, + /area/ocean/generated_above, + + /area/ruin, + ) + +/obj/item/firing_pin/wastes/pin_auth(mob/living/user) + if(!istype(user)) + return FALSE + if (is_type_in_list(get_area(user), wastes)) + return TRUE + return FALSE diff --git a/monkestation/code/modules/mining/accelerators/admin.dm b/monkestation/code/modules/mining/accelerators/admin.dm new file mode 100644 index 000000000000..20c55d48ce30 --- /dev/null +++ b/monkestation/code/modules/mining/accelerators/admin.dm @@ -0,0 +1,50 @@ +/obj/item/gun/energy/recharge/kinetic_accelerator/meme + name = "adminium reaper" + desc = "Mining RnD broke the fabric of space time, please return to your nearest centralcommand officer. WARNING FROM THE MINING RND DIRECTOR : DO NOT RAPIDLY PULL TRIGGER : FABRIC OF SPACE TIME LIABLE TO BREAK " + recharge_time = 0.1 + ammo_type = list(/obj/item/ammo_casing/energy/kinetic/meme) + max_mod_capacity = 420 + +/obj/item/gun/energy/recharge/kinetic_accelerator/meme/nonlethal + name = "adminium stunner" + desc = "Mining RnD broke the fabric of space time AGAIN, please return to your nearest centralcommand officer. WARNING FROM THE MINING RND DIRECTOR : DO NOT RAPIDLY PULL TRIGGER : FABRIC OF SPACE TIME LIABLE TO BREAK \ + Im being bullied by the admins" + ammo_type = list(/obj/item/ammo_casing/energy/kinetic/meme/nonlethal) + can_bayonet = FALSE + max_mod_capacity = 0 + +/obj/item/ammo_casing/energy/kinetic/meme + projectile_type = /obj/projectile/kinetic/meme + e_cost = 1 + pellets = 69 + variance = 90 + fire_sound = 'sound/effects/adminhelp.ogg' + +/obj/projectile/kinetic/meme + name = "proto kinetic meme force" + damage = 420 + range = 300 + pressure_decrease = 1 + dismemberment = 10 + catastropic_dismemberment = TRUE + hitsound = 'sound/effects/adminhelp.ogg' + +/obj/item/ammo_casing/energy/kinetic/meme/nonlethal + projectile_type = /obj/projectile/kinetic/meme/nonlethal + +/obj/projectile/kinetic/meme/nonlethal + name = "surprisingly soft proto kinetic meme force" + damage = 0 + dismemberment = 0 + catastropic_dismemberment = FALSE + stun = 69 + knockdown = 69 + paralyze = 69 + immobilize = 69 + unconscious = 69 + eyeblur = 69 + drowsy = 69 SECONDS + jitter = 69 SECONDS + stamina = 69 SECONDS + stutter = 69 SECONDS + slur = 69 SECONDS diff --git a/monkestation/code/modules/mining/accelerators/grenade.dm b/monkestation/code/modules/mining/accelerators/grenade.dm new file mode 100644 index 000000000000..46fcfbaa8007 --- /dev/null +++ b/monkestation/code/modules/mining/accelerators/grenade.dm @@ -0,0 +1,19 @@ +/obj/item/gun/energy/recharge/kinetic_accelerator/m79 + name = "proto-kinetic grenade launcher" + desc = "Made in a drunk frenzy during the creation of the kinetic railgun, the kinetic grenade launcher fires the same bombs used by \ + the mining modsuit. Due to the technology needed to pack the bombs into this weapon, there is no space for modification." + icon = 'monkestation/icons/obj/guns/guns.dmi' + icon_state = "kineticglauncher" + base_icon_state = "kineticglauncher" + pin = /obj/item/firing_pin/wastes + recharge_time = 2 SECONDS + ammo_type = list(/obj/item/ammo_casing/energy/kinetic/m79) + w_class = WEIGHT_CLASS_HUGE + weapon_weight = WEAPON_HEAVY + can_bayonet = FALSE + max_mod_capacity = 0 + disablemodification = TRUE + +/obj/item/ammo_casing/energy/kinetic/m79 + projectile_type = /obj/projectile/bullet/reusable/mining_bomb //uses the mining bomb projectile from the mining modsuit + fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg' diff --git a/monkestation/code/modules/mining/accelerators/pistol.dm b/monkestation/code/modules/mining/accelerators/pistol.dm new file mode 100644 index 000000000000..92445da67488 --- /dev/null +++ b/monkestation/code/modules/mining/accelerators/pistol.dm @@ -0,0 +1,20 @@ +/obj/item/gun/energy/recharge/kinetic_accelerator/glock + name = "proto-kinetic pistol" + desc = "During the pizza party for the Mining Research and Development team, one special snowflake researcher wanted a mini murphy instead of a regular \ + pizza slice, so reluctantly the Director bought him his mini murphy, which the dumbass immedietly dropped ontop of a PKA. Suddenly the idea to create \ + a 'build your own PKA' design was created. The proto-kinetic pistol is arguably worse than the base PKA, sporting lower damage and range. But this lack \ + of base efficiency allows room for nearly double the mods, making it truely 'your own PKA'." + icon = 'monkestation/icons/obj/guns/guns.dmi' + icon_state = "kineticpistol" + base_icon_state = "kineticpistol" + recharge_time = 2 SECONDS + ammo_type = list(/obj/item/ammo_casing/energy/kinetic/glock) + can_bayonet = FALSE + max_mod_capacity = 200 + +/obj/item/ammo_casing/energy/kinetic/glock + projectile_type = /obj/projectile/kinetic/glock + +/obj/projectile/kinetic/glock + name = "light kinetic force" + damage = 10 diff --git a/monkestation/code/modules/mining/accelerators/railgun.dm b/monkestation/code/modules/mining/accelerators/railgun.dm new file mode 100644 index 000000000000..406d40db7d65 --- /dev/null +++ b/monkestation/code/modules/mining/accelerators/railgun.dm @@ -0,0 +1,32 @@ +/obj/item/gun/energy/recharge/kinetic_accelerator/railgun + name = "proto-kinetic railgun" + desc = "Before the nice streamlined and modern day Proto-Kinetic Accelerator was created, multiple designs were drafted by the Mining Research and Development \ + team. Many were failures, including this one, which came out too bulky and too ineffective. Well recently the MR&D Team got drunk and said 'fuck it we ball' and \ + went back to the bulky design, overclocked it, and made it functional, turning it into what is essentially a literal man portable particle accelerator. \ + The design results in a massive hard to control blast of kinetic energy, with the power to punch right through creatures and cause massive damage. The \ + only problem with the design is that it is so bulky you need to carry it with two hands, and the technology has been outfitted with a special firing pin \ + that denies use near or on the station, due to its destructive nature." + icon = 'monkestation/icons/obj/guns/guns.dmi' + icon_state = "kineticrailgun" + base_icon_state = "kineticrailgun" + w_class = WEIGHT_CLASS_HUGE + pin = /obj/item/firing_pin/wastes + recharge_time = 3 SECONDS + ammo_type = list(/obj/item/ammo_casing/energy/kinetic/railgun) + weapon_weight = WEAPON_HEAVY + can_bayonet = FALSE + max_mod_capacity = 0 // Fuck off + recoil = 3 // Railgun go brrrrr + disablemodification = TRUE + +/obj/item/ammo_casing/energy/kinetic/railgun + projectile_type = /obj/projectile/kinetic/railgun + fire_sound = 'sound/weapons/beam_sniper.ogg' + +/obj/projectile/kinetic/railgun + name = "hyper kinetic force" + damage = 100 + range = 7 + pressure_decrease = 0.10 // Pressured enviorments are a no go for the railgun + speed = 0.1 // NYOOM + projectile_piercing = PASSMOB diff --git a/monkestation/code/modules/mining/accelerators/repeater.dm b/monkestation/code/modules/mining/accelerators/repeater.dm new file mode 100644 index 000000000000..3141ba0fa6ae --- /dev/null +++ b/monkestation/code/modules/mining/accelerators/repeater.dm @@ -0,0 +1,21 @@ +/obj/item/gun/energy/recharge/kinetic_accelerator/repeater + name = "proto-kinetic repeater" + desc = "During the pizza party celebrating the release of the new crusher designs, the Mining Research and Development team members were only allowed one slice. \ + One member exclaimed 'I wish we could have more than one slice' and another replied 'I wish we could shoot the accelerator more than once' and thus, the repeater \ + on the spot. The repeater trades a bit of power for the ability to fire three shots before becoming empty, while retaining the ability to fully recharge in one \ + go. The extra technology packed inside to make this possible unfortunately reduces mod space meaning you cant carry as many mods compared to a regular accelerator." + icon = 'monkestation/icons/obj/guns/guns.dmi' + icon_state = "kineticrepeater" + base_icon_state = "kineticrepeater" + recharge_time = 2 SECONDS + ammo_type = list(/obj/item/ammo_casing/energy/kinetic/repeater) + max_mod_capacity = 60 + +/obj/item/ammo_casing/energy/kinetic/repeater + projectile_type = /obj/projectile/kinetic/repeater + e_cost = 150 //about three shots + +/obj/projectile/kinetic/repeater + name = "rapid kinetic force" + damage = 20 + range = 4 diff --git a/monkestation/code/modules/mining/accelerators/shockwave.dm b/monkestation/code/modules/mining/accelerators/shockwave.dm new file mode 100644 index 000000000000..e6f2185b2c16 --- /dev/null +++ b/monkestation/code/modules/mining/accelerators/shockwave.dm @@ -0,0 +1,22 @@ +/obj/item/gun/energy/recharge/kinetic_accelerator/shockwave + name = "proto-kinetic shockwave" + desc = "Quite frankly, we have no idea how the Mining Research and Development team came up with this one, all we know is that alot of \ + beer was involved. This proto-kinetic design will slam the ground, creating a shockwave around the user, with the same power as the base PKA.\ + The only downside is the lowered mod capacity, the lack of range it offers, and the higher cooldown, but its pretty good for clearing rocks." + icon = 'monkestation/icons/obj/guns/guns.dmi' + icon_state = "kineticshockwave" + base_icon_state = "kineticshockwave" + recharge_time = 2 SECONDS + ammo_type = list(/obj/item/ammo_casing/energy/kinetic/shockwave) + can_bayonet = FALSE + max_mod_capacity = 60 + +/obj/item/ammo_casing/energy/kinetic/shockwave + projectile_type = /obj/projectile/kinetic/shockwave + pellets = 8 + variance = 360 + fire_sound = 'sound/weapons/gun/general/cannon.ogg' + +/obj/projectile/kinetic/shockwave + name = "concussive kinetic force" + range = 1 diff --git a/monkestation/code/modules/mining/accelerators/shotgun.dm b/monkestation/code/modules/mining/accelerators/shotgun.dm new file mode 100644 index 000000000000..6c02f4013a49 --- /dev/null +++ b/monkestation/code/modules/mining/accelerators/shotgun.dm @@ -0,0 +1,21 @@ +/obj/item/gun/energy/recharge/kinetic_accelerator/shotgun + name = "proto-kinetic shotgun" + desc = "During the crusher design pizza party, one member of the Mining Research and Development team brought out a real riot shotgun, and killed three \ + other research members with one blast. The MR&D Director immedietly thought of a genuis idea, creating the proto-kinetic shotgun moments later, which he \ + immedietly used to execute the research member who brought the real shotgun. The proto-kinetic shotgun trades off some mod capacity and cooldown in favor \ + of firing three shots at once with reduce range and power. The total damage of all three shots is higher than a regular PKA but the individual shots are weaker." + icon = 'monkestation/icons/obj/guns/guns.dmi' + icon_state = "kineticshotgun" + base_icon_state = "kineticshotgun" + recharge_time = 2 SECONDS + ammo_type = list(/obj/item/ammo_casing/energy/kinetic/shotgun) + max_mod_capacity = 60 + +/obj/item/ammo_casing/energy/kinetic/shotgun + projectile_type = /obj/projectile/kinetic/shotgun + pellets = 3 + variance = 50 + +/obj/projectile/kinetic/shotgun + name = "split kinetic force" + damage = 20 diff --git a/monkestation/code/modules/mob/dead/new_player/sprite_accessories/sock_color.dm b/monkestation/code/modules/mob/dead/new_player/sprite_accessories/sock_color.dm new file mode 100644 index 000000000000..4e9b4b1a343d --- /dev/null +++ b/monkestation/code/modules/mob/dead/new_player/sprite_accessories/sock_color.dm @@ -0,0 +1,18 @@ +/mob/living/carbon/human + var/socks_color = "#FFFFFF" + +/datum/preference/color/socks_color + savefile_key = "socks_color" + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES + +/datum/preference/color/socks_color/apply_to_human(mob/living/carbon/human/target, value) + target.socks_color = value + +/datum/preference/color/socks_color/is_accessible(datum/preferences/preferences) + if (!..(preferences)) + return FALSE + + var/species_type = preferences.read_preference(/datum/preference/choiced/species) + var/datum/species/species = new species_type + return !(NO_UNDERWEAR in species.species_traits) diff --git a/monkestation/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm b/monkestation/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm new file mode 100644 index 000000000000..5b0d9c39b55d --- /dev/null +++ b/monkestation/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm @@ -0,0 +1,67 @@ +//UNDERWEAR GOES HERE +/datum/sprite_accessory/socks + use_static = TRUE + +/datum/sprite_accessory/socks/white_knee + name = "Knee-high" + icon = 'monkestation/icons/mob/sprite_accessories/underwear.dmi' + icon_state = "white_knee" + use_static = FALSE + +/datum/sprite_accessory/socks/thin_knee + name = "Knee-high (Thin)" + icon = 'monkestation/icons/mob/sprite_accessories/underwear.dmi' + icon_state = "thin_knee" + use_static = FALSE + +/datum/sprite_accessory/socks/white_norm + name = "Normal" + icon = 'monkestation/icons/mob/sprite_accessories/underwear.dmi' + icon_state = "white_norm" + use_static = FALSE + +/datum/sprite_accessory/socks/thin_norm + name = "Normal (Thin)" + icon = 'monkestation/icons/mob/sprite_accessories/underwear.dmi' + icon_state = "thin_norm" + use_static = FALSE + +/datum/sprite_accessory/socks/white_pantyhose + name = "Pantyhose (Opaque)" + icon = 'monkestation/icons/mob/sprite_accessories/underwear.dmi' + icon_state = "white_pantyhose" + use_static = FALSE + +/datum/sprite_accessory/socks/pantyhose + name = "Pantyhose (Thin)" + icon = 'monkestation/icons/mob/sprite_accessories/underwear.dmi' + icon_state = "pantyhose" + use_static = FALSE + +/datum/sprite_accessory/socks/white_short + name = "Short" + icon = 'monkestation/icons/mob/sprite_accessories/underwear.dmi' + icon_state = "white_short" + use_static = FALSE + +/datum/sprite_accessory/socks/thin_short + name = "Short (Thin)" + icon = 'monkestation/icons/mob/sprite_accessories/underwear.dmi' + icon_state = "thin_short" + use_static = FALSE + +/datum/sprite_accessory/socks/white_thigh + name = "Thigh-high" + icon = 'monkestation/icons/mob/sprite_accessories/underwear.dmi' + icon_state = "white_thigh" + use_static = FALSE + +/datum/sprite_accessory/socks/thin_thigh + name = "Thigh-high (Thin)" + icon = 'monkestation/icons/mob/sprite_accessories/underwear.dmi' + icon_state = "thin_thigh" + use_static = FALSE + +/datum/sprite_accessory/socks/thocks + icon = 'monkestation/icons/mob/sprite_accessories/underwear.dmi' + use_static = FALSE diff --git a/monkestation/code/modules/mob/living/carbon/carbon_death.dm b/monkestation/code/modules/mob/living/carbon/carbon_death.dm index 25dabfff94d5..a6c27b0254a0 100644 --- a/monkestation/code/modules/mob/living/carbon/carbon_death.dm +++ b/monkestation/code/modules/mob/living/carbon/carbon_death.dm @@ -1,11 +1,13 @@ /mob/living/carbon/death(gibbed) var/policy = get_policy(POLICY_DEATH) if(policy) - to_chat(src, policy) + to_chat(src, policy, avoid_highlighting = TRUE) return ..() /mob/living/carbon/revive(full_heal_flags, excess_healing, force_grab_ghost) + var/old_stat = stat . = ..() - var/policy = get_policy(POLICY_REVIVAL) - if(policy) - to_chat(src, policy) + if(old_stat == DEAD) + var/policy = get_policy(POLICY_REVIVAL) + if(policy) + to_chat(src, policy, avoid_highlighting = TRUE) diff --git a/monkestation/code/modules/mob/living/carbon/emote.dm b/monkestation/code/modules/mob/living/carbon/emote.dm new file mode 100644 index 000000000000..b30a2f4dfa66 --- /dev/null +++ b/monkestation/code/modules/mob/living/carbon/emote.dm @@ -0,0 +1,105 @@ +//Finger Guns *blows smoke off his finger tips* +/datum/emote/living/carbon/fingergun + key = "fingergun" + key_third_person = "fingerguns" + hands_use_check = TRUE + cooldown = 3 SECONDS + +/datum/emote/living/carbon/fingergun/run_emote(mob/user, params, type_override, intentional) + . = ..() + if(!.) + return + var/obj/item/gun/ballistic/fingergun_emote/N = new(user) + if(user.put_in_hands(N)) + to_chat(user, span_notice("You fold your hand into a finger gun.")) + user.manual_emote("folds [user.p_their()] hand into a finger gun.") + else + qdel(N) + to_chat(user, span_warning("You're incapable of readying a finger gun in your current state.")) + +/obj/item/ammo_casing/caseless/fingergun_bullet + name = "imaginary bullet" + desc = "Bullets are not real idiot." + projectile_type = /obj/projectile/bullet/fingergun_bullet + item_flags = DROPDEL + caliber = "bulletsarenotrealyouidiot" + custom_materials = list() + harmful = FALSE + +/obj/projectile/bullet/fingergun_bullet + name = "imaginary bullet" + desc = "Bullets are not real idiot." + icon = 'monkestation/icons/obj/weapons/guns/fingergun_emote.dmi' + icon_state = "projectile" + damage = 0 + hitsound_wall = "" + impact_effect_type = null + embedding = list(embed_chance=0) + +/obj/item/ammo_box/magazine/fingergun_emote + name = "finger gun magazine" + desc = "You should not be seeing this..." + ammo_type = /obj/item/ammo_casing/caseless/fingergun_bullet + caliber = "bulletsarenotrealyouidiot" + max_ammo = 8 + +/obj/item/gun/ballistic/fingergun_emote + name = "finger gun" + desc = "''Ya' need a count?'' ''Nah sir.'' *abruptly gets shot in the head. ''Well.. that ain't good...'' *falls over backwards ''I should'a seen this comming.''" + icon = 'monkestation/icons/obj/weapons/guns/fingergun_emote.dmi' + icon_state = "item" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + inhand_icon_state = "nothing" + item_flags = DROPDEL | HAND_ITEM + force = 0 + throwforce = 0 + load_sound_volume = 0 + rack_sound_volume = 0 + lock_back_sound_volume = 0 + eject_sound_volume = 0 + bolt_drop_sound_volume = 0 + dry_fire_sound = "" + pinless = TRUE + clumsy_check = FALSE + trigger_guard = TRIGGER_GUARD_ALLOW_ALL + gun_flags = NONE + mag_type = /obj/item/ammo_box/magazine/fingergun_emote + spawnwithmagazine = TRUE + internal_magazine = TRUE + bolt_type = BOLT_TYPE_NO_BOLT + fire_delay = 0.5 + +/obj/item/gun/ballistic/fingergun_emote/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null) //mostly copied from /obj/item/gun/proc/shoot_live_shot( + if(!HAS_TRAIT(user, TRAIT_MIMING)) + user.say("'s hand flying upwards with imaginary recoil*BANG!") + if(tk_firing(user)) + visible_message( + span_danger("[src] fires itself[pointblank ? " point blank at [pbtarget]!" : "!"]"), + vision_distance = COMBAT_MESSAGE_RANGE + ) + else if(pointblank) + user.visible_message( + span_danger("[user] fires [src] point blank at [pbtarget]!"), + span_danger("You fire [src] point blank at [pbtarget]!"), + ) + to_chat(pbtarget, span_userdanger("[user] fires [src] point blank at you!")) + if(pb_knockback > 0 && ismob(pbtarget)) + var/mob/PBT = pbtarget + var/atom/throw_target = get_edge_target_turf(PBT, user.dir) + PBT.throw_at(throw_target, pb_knockback, 2) + else if(!tk_firing(user)) + user.visible_message( + span_danger("[user] fires [src]!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ignored_mobs = user + ) + +/obj/item/gun/ballistic/fingergun_emote/attack_self() + return + +/obj/item/gun/ballistic/fingergun_emote/attackby() + return + +/obj/item/gun/ballistic/fingergun_emote/eject_magazine() + return diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm index 8f2047fe6e4c..819313ee9b0e 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm @@ -2,6 +2,7 @@ return 'monkestation/sound/voice/laugh/ethereal/ethereal_laugh_1.ogg' /datum/species/ethereal + payday_modifier = 1 sexes = TRUE species_traits = list( DYNCOLORS, @@ -9,3 +10,20 @@ HAIR, FACEHAIR, ) + +/datum/species/ethereal/on_species_gain(mob/living/carbon/new_ethereal, datum/species/old_species, pref_load) + . = ..() + RegisterSignal(new_ethereal, COMSIG_ATOM_AFTER_ATTACKEDBY, PROC_REF(on_after_attackedby)) + +/datum/species/ethereal/on_species_loss(mob/living/carbon/human/former_ethereal, datum/species/new_species, pref_load) + . = ..() + UnregisterSignal(former_ethereal, COMSIG_ATOM_AFTER_ATTACKEDBY) + +/datum/species/ethereal/proc/on_after_attackedby(mob/living/lightbulb, obj/item/item, mob/living/user, proximity_flag, click_parameters) + SIGNAL_HANDLER + var/obj/item/clothing/mask/cigarette/cig = item + if(!proximity_flag || !istype(cig) || !istype(user) || cig.lit) + return + cig.light() + user.visible_message(span_notice("[user] quickly strikes [item] across [lightbulb]'s skin, [lightbulb.p_their()] warmth lighting it!")) + return COMPONENT_NO_AFTERATTACK diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/floran.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/floran.dm index 2c5b4adfa92f..cdbc2309d551 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/floran.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/floran.dm @@ -24,7 +24,6 @@ heatmod = 0.67 //Same as lizard people coldmod = 1.5 //Same as lizard people speedmod = -0.1 //Same as arachnids - payday_modifier = 0.75 meat = /obj/item/food/meat/slab/human/mutant/plant exotic_blood = /datum/reagent/water // disliked_food = VEGETABLES | FRUIT | GRAIN diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/flypeople.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/flypeople.dm index 92a392986dad..a4cde86ec6bb 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/flypeople.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/flypeople.dm @@ -1,3 +1,6 @@ +/datum/species/fly + payday_modifier = 1 + /datum/species/fly/get_scream_sound(mob/living/carbon/human/human) if(human.gender == MALE) if(prob(1)) diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/goblin.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/goblin.dm index a941a712daf5..ab58fef973b5 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/goblin.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/goblin.dm @@ -29,7 +29,7 @@ maxhealthmod = 0.75 stunmod = 0.75 speedmod = -0.25 - payday_modifier = 0.75 + payday_modifier = 1 bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/goblin, BODY_ZONE_CHEST = /obj/item/bodypart/chest/goblin, diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/lizardpeople.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/lizardpeople.dm index f3efd0b7c62b..ac3bac6e5c04 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/lizardpeople.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/lizardpeople.dm @@ -1,3 +1,6 @@ +/datum/species/lizard + payday_modifier = 1 + /datum/species/lizard/get_scream_sound(mob/living/carbon/human/human) if(human.gender ==MALE) return pick( diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/oozeling.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/oozeling.dm index 1a2948ec05a1..3a546c7477f2 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/oozeling.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/oozeling.dm @@ -10,12 +10,13 @@ HAIR,FACEHAIR, ) inherent_traits = list( + TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_TOXINLOVER, TRAIT_NOFIRE, //TRAIT_ALWAYS_CLEAN, TRAIT_EASYDISMEMBER, - TRAIT_NOBLOOD, - ) + TRAIT_NOBLOOD + ) hair_color = "mutcolor" hair_alpha = 150 @@ -33,6 +34,7 @@ //swimming_component = /datum/component/swimming/dissolve toxic_food = NONE disliked_food = NONE + wing_types = list(/obj/item/organ/external/wings/functional/slime) bodypart_overrides = list( BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/oozeling, diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/plasmamen.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/plasmamen.dm index 87cd443d9f03..af3c0ff2a9a7 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/plasmamen.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/plasmamen.dm @@ -1,2 +1,5 @@ +/datum/species/plasmaman + payday_modifier = 1 + /datum/species/plasmaman/get_laugh_sound(mob/living/carbon/human/human) return 'monkestation/sound/voice/laugh/skeleton/skeleton_laugh.ogg' diff --git a/monkestation/code/modules/mod/mod_control.dm b/monkestation/code/modules/mod/mod_control.dm index e69de29bb2d1..4f686fcb552a 100644 --- a/monkestation/code/modules/mod/mod_control.dm +++ b/monkestation/code/modules/mod/mod_control.dm @@ -0,0 +1,63 @@ +/datum/mod_theme/waffles + name = "Waffles' corporate" + desc = "A heavily modified suit created by Waffles to distinguish himself from other CentCom Officers. If you are not Waffles you shouldn't be wearing this!" + default_skin = "waffles" + resistance_flags = INDESTRUCTIBLE|LAVA_PROOF|FIRE_PROOF|UNACIDABLE|ACID_PROOF + atom_flags = PREVENT_CONTENTS_EXPLOSION_1 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + complexity_max = 50 + armor_type= /datum/armor/mod_theme_waffles + charge_drain = DEFAULT_CHARGE_DRAIN * 0 + siemens_coefficient = 0 + slowdown_inactive = 0 + slowdown_active = 0 + ui_theme = "wizard" + inbuilt_modules = list(/obj/item/mod/module/anti_magic/wizard) + allowed_suit_storage = list( + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/restraints/handcuffs, + /obj/item/assembly/flash, + /obj/item/melee/baton, + /obj/item/gun, + ) + skins = list( + "waffles" = list( + MOD_ICON_OVERRIDE = 'monkestation/icons/obj/clothing/modsuits/modsuit.dmi', + MOD_WORN_ICON_OVERRIDE = 'monkestation/icons/mob/clothing/worn_modsuit.dmi', + HELMET_FLAGS = list( + UNSEALED_LAYER = NECK_LAYER, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|HEADINTERNALS, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/armor/mod_theme_waffles + melee = 50 + bullet = 60 + laser = 50 + energy = 50 + bomb = 100 + bio = 100 + fire = 100 + acid = 100 + wound = 30 diff --git a/monkestation/code/modules/mod/mod_types.dm b/monkestation/code/modules/mod/mod_types.dm new file mode 100644 index 000000000000..fbe768321cab --- /dev/null +++ b/monkestation/code/modules/mod/mod_types.dm @@ -0,0 +1,17 @@ +/obj/item/mod/control/pre_equipped/waffles + theme = /datum/mod_theme/waffles + applied_core = /obj/item/mod/core/infinite + applied_modules = list( + /obj/item/mod/module/storage/bluespace, + /obj/item/mod/module/emp_shield/advanced, + /obj/item/mod/module/welding, + /obj/item/mod/module/stealth/ninja, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/noslip, + /obj/item/mod/module/dna_lock/reinforced, + ) + default_pins = list( + /obj/item/mod/module/stealth/ninja, + /obj/item/mod/module/jetpack/advanced, + ) diff --git a/monkestation/code/modules/modular_guns/__base_attachment.dm b/monkestation/code/modules/modular_guns/__base_attachment.dm index a8b44ab8587e..ecc02b42afdd 100644 --- a/monkestation/code/modules/modular_guns/__base_attachment.dm +++ b/monkestation/code/modules/modular_guns/__base_attachment.dm @@ -49,7 +49,7 @@ /obj/item/attachment/AltClick(mob/user) . = ..() if(attachment_flags & ATTACHMENT_COLORABLE) - var/new_choice = input(user,"","Choose Color",attachment_color) as color + var/new_choice = tgui_color_picker(user,"","Choose Color",attachment_color) if(new_choice == null) return attachment_color = new_choice diff --git a/monkestation/code/modules/modular_guns/crafting/part_recipes.dm b/monkestation/code/modules/modular_guns/crafting/part_recipes.dm index 4e90d0de3073..6b073f7bdb1e 100644 --- a/monkestation/code/modules/modular_guns/crafting/part_recipes.dm +++ b/monkestation/code/modules/modular_guns/crafting/part_recipes.dm @@ -96,7 +96,7 @@ /datum/crafting_recipe/mk58_flashlight name = "MK58 Flashlight Attachment" tool_behaviors = list(TOOL_WELDER) - result = /obj/item/attachment/mag/mk58/m50 + result = /obj/item/attachment/underbarrel/flashlight/mk58 reqs = list( /obj/item/stack/sheet/iron = 2, /obj/item/flashlight/seclite = 1, diff --git a/monkestation/code/modules/ocean_content/fluff/cargo_driver.dm b/monkestation/code/modules/ocean_content/fluff/cargo_driver.dm index 829ea9762e86..b3f32178b408 100644 --- a/monkestation/code/modules/ocean_content/fluff/cargo_driver.dm +++ b/monkestation/code/modules/ocean_content/fluff/cargo_driver.dm @@ -4,7 +4,7 @@ name = "Cargo Driver" id = MASSDRIVER_CARGO -/obj/machinery/mass_driver/drive(amount) +/obj/machinery/mass_driver/cargo_driver/drive(amount) if(machine_stat & (BROKEN|NOPOWER)) return use_power(active_power_usage) @@ -24,7 +24,8 @@ break use_power(active_power_usage) O.throw_at(target, get_dist(src, target) + 4, power) - addtimer(CALLBACK(O, TYPE_PROC_REF(/atom/movable, attempt_map_sell)), 4 SECONDS / power) + if(length(SSmapping.levels_by_trait(ZTRAIT_OSHAN))) + addtimer(CALLBACK(O, TYPE_PROC_REF(/atom/movable, attempt_map_sell)), 4 SECONDS / power) flick("mass_driver1", src) /atom/movable/proc/attempt_map_sell() diff --git a/monkestation/code/modules/pollution/pollutant_datum.dm b/monkestation/code/modules/pollution/pollutant_datum.dm index 5fc09f0247ba..fe4c09bde95c 100644 --- a/monkestation/code/modules/pollution/pollutant_datum.dm +++ b/monkestation/code/modules/pollution/pollutant_datum.dm @@ -18,14 +18,14 @@ /// Scent of the smell var/scent -///When a pollutant touches an unprotected carbon mob -/datum/pollutant/proc/touch_act(mob/living/carbon/victim, amount) +///When a pollutant touches an unprotected mob +/datum/pollutant/proc/touch_act(mob/living/victim, amount) return ///When a carbon mob breathes in the pollutant /datum/pollutant/proc/breathe_act(mob/living/carbon/victim, amount) return -///When a carbon mob smells scents this is called +///When a carbon mob smells scents this is called /datum/pollutant/proc/on_smell(mob/living/carbon/victim, amount) return diff --git a/monkestation/code/modules/power/cables.dm b/monkestation/code/modules/power/cables.dm new file mode 100644 index 000000000000..8a82209f58b2 --- /dev/null +++ b/monkestation/code/modules/power/cables.dm @@ -0,0 +1,110 @@ +/obj/item/stack/cable_coil/monitoring + name = "electronic display cable coil" // only shows up in vendors + max_amount = 1 + amount = 1 + merge_type = /obj/item/stack/cable_coil/monitoring + target_type = /obj/structure/cable/monitoring + gender = FEMALE // yes i made your cable coil female + +/obj/item/stack/cable_coil/monitoring/update_name() + . = ..() + name = "wire with an electronic display" + +/obj/item/stack/cable_coil/monitoring/update_desc() + . = ..() + desc = "A piece of insulated power cable with an attached electronic display, allowing for quick and safe network power checking." + +/obj/item/stack/cable_coil/monitoring/attack_self(mob/living/user) + return + +/obj/structure/cable/monitoring + name = "cable with an attached electronic display" + desc = "A flexible, superconducting insulated cable for heavy-duty power transfer with an attached electronic display that is displaying its current power amount." + cable_color = CABLE_COLOR_CYAN + color = CABLE_COLOR_CYAN + gender = FEMALE // nothing wrong here + +/obj/structure/cable/monitoring/examine(mob/user) + . = ..() + if(!isobserver(user)) // check if they are an observer, we dont want to double-dip + . += get_power_info() + +/obj/structure/cable/monitoring/update_overlays() + . = ..() + . += "power_monitor" + +/obj/structure/cable/monitoring/attack_hand(mob/living/user, list/modifiers) + to_chat(user, get_power_info()) + +/obj/structure/cable/monitoring/deconstruct(disassembled = TRUE) + to_chat(usr, span_notice("You start to carefully snip the electronic monitoring equipment...")) + if(!do_after(usr, 5 SECONDS, src)) + to_chat(usr, span_warning("Your hand slips, and the monitoring equipment is destroyed!")) + do_sparks(5, TRUE, src) + playsound(usr, 'sound/effects/sparks2.ogg', 100, TRUE) + new /obj/item/stack/cable_coil(drop_location(), 1) + qdel(src) // those electronics are fragile + return + + if(!(flags_1 & NODECONSTRUCT_1)) + to_chat(usr, span_notice("You manage to free the monitoring equipment and cable free from the network.")) + var/obj/item/stack/cable_coil/monitoring/cable = new(drop_location(), 1) + cable.set_cable_color(cable_color) + + qdel(src) + +/obj/item/stack/cable_coil/valve + name = "valve cable coil" // only shows up in vendors + max_amount = 1 + amount = 1 + merge_type = /obj/item/stack/cable_coil/valve + target_type = /obj/structure/cable/valve + gender = FEMALE // indeed, the cable coil is female + +/obj/item/stack/cable_coil/valve/update_name() + . = ..() + name = "fuse wire" + +/obj/item/stack/cable_coil/valve/update_desc() + . = ..() + desc = "A piece of insulated power cable thats capable of having its power flow stopped without risk of electrocution" + +/obj/item/stack/cable_coil/valve/attack_self(mob/living/user) + return + +/obj/structure/cable/valve + name = "a fuse wire" + desc = "A flexible, superconducting insulated cable for heavy-duty power transfer, this one is outfitted with special valve capabilities. Enabling for power to be disabled or enabled quickly and safelly." + cable_color = CABLE_COLOR_CYAN + color = CABLE_COLOR_CYAN + gender = FEMALE // seems about right + var/off_Layer = "industrial" // when off, we switch to the industrial cable tag. When ON we switch to the initial one + var/transmits_power = TRUE + +/obj/structure/cable/valve/update_overlays() + . = ..() + if(transmits_power) + . += "power_on" + else + . += "power_off" + +/obj/structure/cable/valve/attack_hand(mob/living/user, list/modifiers) + transmits_power = !transmits_power + balloon_alert_to_viewers("fuse [transmits_power ? "on" : "off"]") + + if(transmits_power) + cable_tag = initial(cable_tag) + else + cable_tag = off_Layer + + cut_cable_from_powernet(FALSE) // update the powernets + Connect_cable(TRUE) + auto_propagate_cut_cable(src) + + update_appearance(UPDATE_OVERLAYS) + +/obj/structure/cable/valve/deconstruct(disassembled = TRUE) + if(!(flags_1 & NODECONSTRUCT_1)) + var/obj/item/stack/cable_coil/valve/cable = new(drop_location(), 1) + cable.set_cable_color(cable_color) + qdel(src) diff --git a/monkestation/code/modules/power/power_transmission_laser/code/announcement.dm b/monkestation/code/modules/power/power_transmission_laser/code/announcement.dm new file mode 100644 index 000000000000..87e7ad6ae468 --- /dev/null +++ b/monkestation/code/modules/power/power_transmission_laser/code/announcement.dm @@ -0,0 +1,103 @@ +/// To be used for announcements about a milestone being broken +#define ANNOUNCEMENT_MILESTONE (1<<0) +/// To be used for rare history lessons that the PTL history team can make +#define ANNOUNCEMENT_HISTORY (1<<1) + +/obj/machinery/power/transmission_laser/proc/send_ptl_announcement() + /// The message we send + var/major_title + var/minor_title + var/message + var/announcement_reason + var/flavor_text + var/roll_for_history = rand(1, 10) + switch(announcement_treshold) + if(1 MW) + message = "PTL account successfully made" + flavor_text = "from now on you will receive regular updates on the power exported via the onboard PTL, goodluck [station_name()]" + INVOKE_ASYNC(src, PROC_REF(send_regular_ptl_announcement)) // starts giving the station regular updates on the PTL since our station just got an account + + if(1 GW) + message = "The onboard PTL has successfully exported 1 Gigawatt worth of power" + flavor_text = "using the exported power we managed to save a station whose supermatter engine has dellamianted, good work." + announcement_reason = ANNOUNCEMENT_MILESTONE + + if(1 TW) + message = "The onboard PTL has successfully exported 1 Terawatt worth of power" + flavor_text = "using the exported power a nearby plasma mining outpost has been established without an engine, we depend on you and keep doing good work" + announcement_reason = ANNOUNCEMENT_MILESTONE + + if(1 PW) + message = "The onboard PTL has successfully exported 1 Petawatt worth of power" + if(roll_for_history > 1) + flavor_text = "thanks to your exported power we quickly managed to discharge emergency power to our fleet in distress, securing victory against a nearby syndicate ship. Great work" + announcement_reason = ANNOUNCEMENT_MILESTONE + else + flavor_text = "1.4 Petawatts is the estimated heat flux transported by the Gulf Stream back on the human's mother planet \"earth\"" + announcement_reason = ANNOUNCEMENT_HISTORY + + if(1 EW) + message = "The onboard PTL has successfully exported 1 Exawatt worth of power" + if(roll_for_history > 1) + flavor_text = "We did not expect your station to export such a high amount of power, and due to that [rand(1, 3)] of our batteries over-charged and blew up [rand(1, 5)] stations... keep doing good work?" + announcement_reason = ANNOUNCEMENT_MILESTONE + else + flavor_text = "In a keynote presentation, NIF & Photon Science Chief Technology Officer Chris Barty described the \"Nexawatt\" Laser, an exawatt (1,000-petawatt) laser concept based on NIF technologies, on April 13 at the SPIE Optics + Optoelectronics 2015 Conference in Prague. Barty also gave an invited talk on \"Laser-Based Nuclear Photonics\" at the SPIE meeting." + announcement_reason = ANNOUNCEMENT_HISTORY + + else + message = "The onboard PTL has successfully exported extremelly high amounts of power" + flavor_text = "we are not sure anymore how much power your PTL has exported, but it sure is a lot. Keep doing great work" + announcement_reason = ANNOUNCEMENT_MILESTONE + + minor_title = "Power Transmission Laser report" + if(announcement_reason) + switch(announcement_reason) + if(ANNOUNCEMENT_MILESTONE) + major_title = "[command_name()] energy unit" + message = "New milestone reached!\n[message]" + if(ANNOUNCEMENT_HISTORY) + major_title = "[command_name()] energy unit" + minor_title = "Power Transmission Laser report, history sub-division" + message = "PTL history lesson\n[message]" + + priority_announce( + sender_override = major_title, + title = minor_title, + text = "[message]\n[flavor_text]", + color_override = "orange", + ) + + announcement_treshold *= 1000 + + +/obj/machinery/power/transmission_laser/proc/send_regular_ptl_announcement() + sleep(30 MINUTES) // simple loop, we are called once and then repeat ourselfes forever + INVOKE_ASYNC(src, PROC_REF(send_regular_ptl_announcement)) + + // the total_power variable converted into readable amounts of power, because 100.000.000.000.000 was for some reason hard to read + var/readable_power + + switch(total_power) + if(1 MW to (1 GW) - 1) + readable_power = "[total_power / (1 MW)] Megawatts" + + if(1 GW to (1 TW) - 1) + readable_power = "[total_power / (1 GW)] Gigawatts" + + if(1 TW to (1 PW) - 1) + readable_power = "[total_power / (1 TW)] Terawatts" + + if(1 PW to (1 EW) - 1) + readable_power = "[total_power / (1 PW)] Petawatts" + + if(1 EW to INFINITY) + readable_power = "[total_power / (1 EW)] Exowatts" + + priority_announce( + sender_override = "[command_name()] energy unit", + title = "Regular Power Transmission Laser report", + text = "Total power exported via the PTL: [readable_power]\n\ + Total earnings: [total_earnings] credits", + color_override = "orange", + ) diff --git a/monkestation/code/modules/power/power_transmission_laser/code/beam.dm b/monkestation/code/modules/power/power_transmission_laser/code/beam.dm new file mode 100644 index 000000000000..bdddab23b0fd --- /dev/null +++ b/monkestation/code/modules/power/power_transmission_laser/code/beam.dm @@ -0,0 +1,30 @@ +/obj/effect/transmission_beam + name = "Shimmering beam" + icon = 'goon/icons/obj/power.dmi' + icon_state = "ptl_beam" + anchored = TRUE + + ///used to deal with atoms stepping on us while firing + var/obj/machinery/power/transmission_laser/host + +/obj/effect/transmission_beam/Initialize(mapload, obj/machinery/power/transmission_laser/creator) + . = ..() + var/turf/source_turf = get_turf(src) + if(source_turf) + RegisterSignal(source_turf, COMSIG_ATOM_ENTERED, PROC_REF(on_entered)) + update_appearance() + +/obj/effect/transmission_beam/Destroy(force) + . = ..() + var/turf/source_turf = get_turf(src) + if(source_turf) + UnregisterSignal(source_turf, COMSIG_ATOM_ENTERED) + +/obj/effect/transmission_beam/update_overlays() + . = ..() + . += emissive_appearance(icon, "ptl_beam", src) + +/obj/effect/transmission_beam/proc/on_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) + SIGNAL_HANDLER + + host.atom_entered_beam(src, arrived) diff --git a/monkestation/code/game/machinery/power/ptl.dm b/monkestation/code/modules/power/power_transmission_laser/code/machine.dm similarity index 75% rename from monkestation/code/game/machinery/power/ptl.dm rename to monkestation/code/modules/power/power_transmission_laser/code/machine.dm index 5625b4830f0c..d4ceaee8d7c9 100644 --- a/monkestation/code/game/machinery/power/ptl.dm +++ b/monkestation/code/modules/power/power_transmission_laser/code/machine.dm @@ -36,12 +36,6 @@ var/turned_on = FALSE ///are we attempting to fire the laser currently? var/firing = FALSE - ///are we selling the power or just sending it into the ether - var/selling_power = FALSE - ///how much we have earned in total - var/total_earnings = 0 - ///the amount of money we haven't sent to cargo yet - var/unsent_earnings = 0 ///we need to create a list of all lasers we are creating so we can delete them in the end var/list/laser_effects = list() ///list of all blocking turfs or objects @@ -55,6 +49,19 @@ ///same as above but for output var/power_format_multi_output = 1 + /// Are we selling the power or just sending it into the ether + var/selling_power = FALSE + + /// How much power have we sold in total + var/total_power = 0 + /// How much power do you have to sell in order to get an announcement + var/announcement_treshold = 1 MW + + /// How much credits we have earned in total + var/total_earnings = 0 + /// The amount of money we haven't sent to cargo yet + var/unsent_earnings = 0 + ///how much we are inputing pre multiplier var/input_number = 0 ///how much we are outputting pre multiplier @@ -108,6 +115,7 @@ . = ..() . += span_notice("Laser currently has [unsent_earnings] unsent credits.") . += span_notice("Laser has generated [total_earnings] credits.") + . += span_notice("Laser has sold [total_power] Watts") ///appearance changes are here /obj/machinery/power/transmission_laser/update_overlays() @@ -224,10 +232,16 @@ if((machine_stat & BROKEN) || !turned_on) return + if(total_power >= announcement_treshold) + send_ptl_announcement() + var/last_disp = return_charge() var/last_chrg = inputting var/last_fire = firing + if(last_disp != return_charge() || last_chrg != inputting || last_fire != firing) + update_appearance() + if(terminal && input_attempt) input_pulling = min(input_available , input_number * power_format_multi) @@ -247,24 +261,26 @@ firing = FALSE output_level = 0 destroy_lasers() + return - if(charge > MINIMUM_POWER && firing) - output_level = min(charge, output_number * power_format_multi_output) - if(!length(laser_effects)) - setup_lasers() - if(length(blocked_objects)) - var/atom/listed_atom = blocked_objects[1] - if(prob(max((abs(output_level) * 0.1) / 500 KW, 1))) ///increased by a single % per 500 KW - listed_atom.visible_message(span_danger("[listed_atom] is melted away by the [src]!")) - blocked_objects -= listed_atom - qdel(listed_atom) - else - sell_power(output_level) + if(!firing) + return - charge -= output_level + output_level = min(charge, output_number * power_format_multi_output) + if(!length(laser_effects)) + setup_lasers() - if(last_disp != return_charge() || last_chrg != inputting || last_fire != firing) - update_appearance() + if(length(blocked_objects)) + var/atom/listed_atom = blocked_objects[1] + if(prob(max((abs(output_level) * 0.1) / 500 KW, 1))) ///increased by a single % per 500 KW + listed_atom.visible_message(span_danger("[listed_atom] is melted away by the [src]!")) + blocked_objects -= listed_atom + qdel(listed_atom) + + else + sell_power(output_level) + + charge -= output_level ////selling defines are here #define MINIMUM_BAR 25 @@ -273,7 +289,7 @@ #define A1_CURVE 70 /obj/machinery/power/transmission_laser/proc/sell_power(power_amount) - var/mw_power = power_amount * 0.000001 + var/mw_power = power_amount / (1 MW) var/generated_cash = (2 * mw_power * PROCESS_CAP) / (2 * mw_power + PROCESS_CAP * A1_CURVE) generated_cash += (4 * mw_power * MINIMUM_BAR) / (4 * mw_power + MINIMUM_BAR) @@ -281,29 +297,34 @@ if(generated_cash < 0) return + total_power += power_amount total_earnings += generated_cash generated_cash += unsent_earnings unsent_earnings = generated_cash - var/datum/bank_account/department/cargo = SSeconomy.get_dep_account(ACCOUNT_CAR) - var/datum/bank_account/department/engineer = SSeconomy.get_dep_account(ACCOUNT_ENG) - var/datum/bank_account/department/security = SSeconomy.get_dep_account(ACCOUNT_SEC) + var/datum/bank_account/department/engineering_bank_account = SSeconomy.get_dep_account(ACCOUNT_ENG) + var/datum/bank_account/department/cargo_bank_account = SSeconomy.get_dep_account(ACCOUNT_CAR) + var/datum/bank_account/department/security_bank_account = SSeconomy.get_dep_account(ACCOUNT_SEC) + + var/medium_cut = generated_cash * 0.25 + var/high_cut = generated_cash * 0.50 ///the other 25% will be sent to engineers in the future but for now its stored inside - var/cargo_cut = generated_cash * 0.25 - var/engineering_cut = generated_cash * 0.5 + security_bank_account.adjust_money(medium_cut, "Transmission Laser Payout") + unsent_earnings -= medium_cut + + cargo_bank_account.adjust_money(medium_cut, "Transmission Laser Payout") + unsent_earnings -= medium_cut - security.adjust_money(cargo_cut, "Transmission Laser Payout") - unsent_earnings -= cargo_cut - engineer.adjust_money(engineering_cut, "Transmission Laser Payout") - unsent_earnings -= engineering_cut - cargo.adjust_money(cargo_cut, "Transmission Laser Payout") - unsent_earnings -= cargo_cut + engineering_bank_account.adjust_money(high_cut, "Transmission Laser Payout") + unsent_earnings -= high_cut #undef A1_CURVE #undef PROCESS_CAP #undef MINIMUM_BAR +// Beam related procs + /obj/machinery/power/transmission_laser/proc/setup_lasers() ///this is why we set the range we did var/turf/last_step = get_step(get_front_turf(), dir) @@ -323,51 +344,17 @@ qdel(listed_beam) ///this is called every time something enters our beams -/obj/machinery/power/transmission_laser/proc/atom_entered_beam(obj/effect/transmission_beam/triggered, atom/movable/arrived) - var/mw_power = (output_number * power_format_multi_output) * 0.000001 - if(mw_power < 25) - if(isliving(arrived)) - var/mob/living/arrived_living = arrived - arrived_living.adjustFireLoss(-mw_power * 15) - else - if(mw_power < 50) - if(isliving(arrived)) - var/mob/living/arrived_living = arrived - arrived_living.gib(FALSE) +/obj/machinery/power/transmission_laser/proc/atom_entered_beam(obj/effect/transmission_beam/triggered, atom/movable/potential_victim) + var/mw_power = (output_number * power_format_multi_output) / (1 MW) + if(!isliving(potential_victim)) + return + var/mob/living/victim = potential_victim + switch(mw_power) + if(0 to 25) + victim.adjustFireLoss(-mw_power * 15) + return + if(26 to 50) + victim.gib(FALSE) else - if(isliving(arrived)) - var/mob/living/arrived_living = arrived - explosion(arrived_living, 3, 2, 2) - arrived_living.gib(FALSE) - - -/obj/effect/transmission_beam - name = "" - icon = 'goon/icons/obj/power.dmi' - icon_state = "ptl_beam" - anchored = TRUE - - ///used to deal with atoms stepping on us while firing - var/obj/machinery/power/transmission_laser/host - -/obj/effect/transmission_beam/Initialize(mapload, obj/machinery/power/transmission_laser/creator) - . = ..() - var/turf/source_turf = get_turf(src) - if(source_turf) - RegisterSignal(source_turf, COMSIG_ATOM_ENTERED, PROC_REF(on_entered)) - update_appearance() - -/obj/effect/transmission_beam/Destroy(force) - . = ..() - var/turf/source_turf = get_turf(src) - if(source_turf) - UnregisterSignal(source_turf, COMSIG_ATOM_ENTERED) - -/obj/effect/transmission_beam/update_overlays() - . = ..() - . += emissive_appearance(icon, "ptl_beam", src) - -/obj/effect/transmission_beam/proc/on_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) - SIGNAL_HANDLER - - host.atom_entered_beam(src, arrived) + explosion(victim, 3, 2, 2) + victim.gib(FALSE) diff --git a/monkestation/code/modules/projectiles/guns/ballistic/revolver.dm b/monkestation/code/modules/projectiles/guns/ballistic/revolver.dm new file mode 100644 index 000000000000..71e0d3dc1493 --- /dev/null +++ b/monkestation/code/modules/projectiles/guns/ballistic/revolver.dm @@ -0,0 +1,3 @@ +//While small it's good to stay modular where you can +/obj/item/gun/ballistic/revolver/c38 + w_class = WEIGHT_CLASS_SMALL diff --git a/monkestation/code/modules/reagents/misc.dm b/monkestation/code/modules/reagents/misc.dm index eb4f475ecfad..cc21af664479 100644 --- a/monkestation/code/modules/reagents/misc.dm +++ b/monkestation/code/modules/reagents/misc.dm @@ -1,2 +1,5 @@ /datum/reagent/romerol restricted = TRUE + +/datum/reagent/medicine/potass_iodide + description = "Heals low toxin damage while the patient is irradiated, and will halt the damaging effects of radiation. Can be used to decontaminate irradiated items." diff --git a/monkestation/code/modules/reagents/reagent_containers/drinks.dm b/monkestation/code/modules/reagents/reagent_containers/drinks.dm index a6b48d7d2a61..f9f99f185830 100644 --- a/monkestation/code/modules/reagents/reagent_containers/drinks.dm +++ b/monkestation/code/modules/reagents/reagent_containers/drinks.dm @@ -1,3 +1,8 @@ /obj/item/reagent_containers/cup/glass/ice/Initialize(mapload, vol) . = ..() reagents.add_reagent(reagent = /datum/reagent/consumable/ice, amount = 30, reagtemp = WATER_MATTERSTATE_CHANGE_TEMP) + +/obj/item/reagent_containers/cup/glass/ice/prison/Initialize(mapload, vol) + . = ..() + reagents.remove_reagent(reagent = /datum/reagent/consumable/ice, amount = 5) + reagents.add_reagent(reagent = /datum/reagent/consumable/liquidgibs, amount = 5, reagtemp = WATER_MATTERSTATE_CHANGE_TEMP) diff --git a/monkestation/code/modules/reagents/reagent_containers/sunsetglass.dm b/monkestation/code/modules/reagents/reagent_containers/sunsetglass.dm new file mode 100644 index 000000000000..3b0c07d13caf --- /dev/null +++ b/monkestation/code/modules/reagents/reagent_containers/sunsetglass.dm @@ -0,0 +1,3 @@ +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/sunset_sarsaparilla + name = "Sunset Sarsaparilla" + list_reagents = list(/datum/reagent/consumable/sunset_sarsaparilla = 50,) diff --git a/monkestation/code/modules/reagents/recipes/fun.dm b/monkestation/code/modules/reagents/recipes/fun.dm index 31c1ea5a6166..e2b08d4bdf6b 100644 --- a/monkestation/code/modules/reagents/recipes/fun.dm +++ b/monkestation/code/modules/reagents/recipes/fun.dm @@ -7,3 +7,7 @@ results = list(/datum/reagent/shakeium = 5) required_reagents = list(/datum/reagent/consumable/vanillashake = 1, /datum/reagent/consumable/corn_syrup = 1, /datum/reagent/consumable/pwr_game = 3) reaction_tags = REACTION_TAG_MODERATE | REACTION_TAG_DRINK +/datum/chemical_reaction/drink/sunset_sarsaparilla + results = list(/datum/reagent/consumable/sunset_sarsaparilla = 5) + required_reagents = list(/datum/reagent/ash = 1, /datum/reagent/consumable/sodawater = 1, /datum/reagent/uranium = 1) + reaction_tags = REACTION_TAG_HARD | REACTION_TAG_DRINK diff --git a/monkestation/code/modules/reagents/sunset_sarsaparilla.dm b/monkestation/code/modules/reagents/sunset_sarsaparilla.dm new file mode 100644 index 000000000000..eaaefa089892 --- /dev/null +++ b/monkestation/code/modules/reagents/sunset_sarsaparilla.dm @@ -0,0 +1,22 @@ +//tada modularized now (please merge this back in) + +/datum/reagent/consumable/sunset_sarsaparilla + name = "Sunset Sarsaparilla" + description = "Build Mass with Sass!" + color = "#633504" // rgb: 99, 53, 4 + quality = DRINK_VERYGOOD + taste_description = "the wild west" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/glass_style/drinking_glass/sunset_sarsaparilla + required_drink_type = /datum/reagent/consumable/sunset_sarsaparilla + name = "glass of Sunset Sarsparilla" + desc = "Locally sourced from your nearest nuclear wasteland." + icon = 'monkestation/icons/obj/drinks/soda.dmi' + icon_state = "sunset_sarsparillaglass" + +/datum/reagent/consumable/sunset_sarsaparilla/on_mob_life(mob/living/carbon/drinker) + . = ..() + drinker.heal_bodypart_damage(brute = 2.5) + drinker.heal_bodypart_damage(burn = 2.5) + diff --git a/monkestation/code/modules/research/xenobiology/xenobio_camera.dm b/monkestation/code/modules/research/xenobiology/xenobio_camera.dm deleted file mode 100644 index bb2302d029f4..000000000000 --- a/monkestation/code/modules/research/xenobiology/xenobio_camera.dm +++ /dev/null @@ -1,15 +0,0 @@ -/mob/camera/ai_eye/remote/xenobio/proc/auto_attach_slime(mob/living/carbon/human/food) - var/mob/living/simple_animal/slime/glutton - for(var/mob/living/simple_animal/slime/slime in range(1, loc)) - if(slime.ckey || slime.amount_grown >= SLIME_EVOLUTION_THRESHOLD) - continue - var/mob/living/slime_eating = slime.buckled - if(!isliving(slime_eating) || slime_eating.stat < DEAD) - continue - if(glutton?.is_adult && !slime.is_adult) - // adult slimes can react faster than baby slimes - continue - if(QDELETED(glutton) || (!glutton.is_adult && slime.is_adult) || (slime.amount_grown > glutton.amount_grown)) - glutton = slime - if(!QDELETED(glutton)) - addtimer(CALLBACK(glutton, TYPE_PROC_REF(/mob/living/simple_animal/slime, Feedon), food), rand(0.1 SECONDS, 0.9 SECONDS)) diff --git a/monkestation/code/modules/shelves/shelf.dm b/monkestation/code/modules/shelves/shelf.dm new file mode 100644 index 000000000000..cf4578aec7ba --- /dev/null +++ b/monkestation/code/modules/shelves/shelf.dm @@ -0,0 +1,178 @@ +#define DEFAULT_SHELF_CAPACITY 3 // Default capacity of the shelf +#define DEFAULT_SHELF_USE_DELAY 1 SECONDS // Default interaction delay of the shelf +#define DEFAULT_SHELF_VERTICAL_OFFSET 10 // Vertical pixel offset of shelving-related things. Set to 10 by default due to this leaving more of the crate on-screen to be clicked. + +/obj/structure/cargo_shelf //Crate shelf port from Shiptest: https://github.com/shiptest-ss13/Shiptest/pull/2374 + name = "Cargo shelf" + desc = "It's a shelf! For storing crates!" + icon = 'monkestation/icons/obj/structures/shelf.dmi' + icon_state = "shelf_base" + density = TRUE + anchored = TRUE + max_integrity = 50 // Not hard to break + + var/capacity = DEFAULT_SHELF_CAPACITY + var/use_delay = DEFAULT_SHELF_USE_DELAY + var/list/shelf_contents + +/obj/structure/cargo_shelf/debug + capacity = 12 + +/obj/structure/cargo_shelf/Initialize() + . = ..() + shelf_contents = new/list(capacity) // Initialize our shelf's contents list, this will be used later. + var/stack_layer // This is used to generate the sprite layering of the shelf pieces. + var/stack_offset // This is used to generate the vertical offset of the shelf pieces. + for(var/i in 1 to (capacity - 1)) + if(i >= 3) // If we're at or above three, we'll be on the way to going off the tile we're on. This allows mobs to be below the shelf when this happens. + stack_layer = ABOVE_MOB_LAYER + (0.02 * i) - 0.01 + else + stack_layer = BELOW_OBJ_LAYER + (0.02 * i) - 0.01 // Make each shelf piece render above the last, but below the crate that should be on it. + stack_offset = DEFAULT_SHELF_VERTICAL_OFFSET * i // Make each shelf piece physically above the last. + overlays += image(icon = 'monkestation/icons/obj/structures/shelf.dmi', icon_state = "shelf_stack", layer = stack_layer, pixel_y = stack_offset) + return + +/obj/structure/cargo_shelf/Destroy() + QDEL_LIST(shelf_contents) + return ..() + +/obj/structure/cargo_shelf/examine(mob/user) + . = ..() + . += span_notice("There are some bolts holding [src] together.") + if(shelf_contents.Find(null)) // If there's an empty space in the shelf, let the examiner know. + . += span_notice("You could drag and drop a crate into [src].") + if(contents.len) // If there are any crates in the shelf, let the examiner know. + . += span_notice("You could drag and drop a crate out of [src].") + . += span_notice("[src] contains:") + for(var/obj/structure/closet/crate/crate in shelf_contents) + . += " [icon2html(crate, user)] [crate]" + +/obj/structure/cargo_shelf/attackby(obj/item/item, mob/living/user, params) + if (item.tool_behaviour == TOOL_WRENCH && !(flags_1 & NODECONSTRUCT_1)) + item.play_tool_sound(src) + if(do_after(user, 3 SECONDS, target = src)) + deconstruct(TRUE) + return TRUE + return ..() + +/obj/structure/cargo_shelf/relay_container_resist_act(mob/living/user, obj/structure/closet/crate) + to_chat(user, span_notice("You begin attempting to knock [crate] out of [src]")) + if(do_after(user, 30 SECONDS, target = crate)) + if(!user || user.stat != CONSCIOUS || user.loc != crate || crate.loc != src) + return // If the user is in a strange condition, return early. + visible_message(span_warning("[crate] falls off of [src]!"), + span_notice("You manage to knock [crate] free of [src]"), + span_notice("You hear a thud.")) + crate.forceMove(drop_location()) // Drop the crate onto the shelf, + step_rand(crate, 1) // Then try to push it somewhere. + crate.layer = initial(crate.layer) // Reset the crate back to having the default layer, otherwise we might get strange interactions. + crate.pixel_y = initial(crate.pixel_y) // Reset the crate back to having no offset, otherwise it will be floating. + shelf_contents[shelf_contents.Find(crate)] = null // Remove the reference to the crate from the list. + handle_visuals() + +/obj/structure/cargo_shelf/proc/handle_visuals() + vis_contents = contents // It really do be that shrimple. + return + +/obj/structure/cargo_shelf/proc/load(obj/structure/closet/crate/crate, mob/user) + var/next_free = shelf_contents.Find(null) // Find the first empty slot in the shelf. + if(!next_free) // If we don't find an empty slot, return early. + balloon_alert(user, "shelf full!") + return FALSE + if(do_after(user, use_delay, target = crate)) + if(shelf_contents[next_free] != null) + return FALSE // Something has been added to the shelf while we were waiting, abort! + if(crate.opened) // If the crate is open, try to close it. + if(!crate.close()) + return FALSE // If we fail to close it, don't load it into the shelf. + shelf_contents[next_free] = crate // Insert a reference to the crate into the free slot. + crate.forceMove(src) // Insert the crate into the shelf. + crate.pixel_y = DEFAULT_SHELF_VERTICAL_OFFSET * (next_free - 1) // Adjust the vertical offset of the crate to look like it's on the shelf. + if(next_free >= 3) // If we're at or above three, we'll be on the way to going off the tile we're on. This allows mobs to be below the crate when this happens. + crate.layer = ABOVE_MOB_LAYER + 0.02 * (next_free - 1) + else + crate.layer = BELOW_OBJ_LAYER + 0.02 * (next_free - 1) // Adjust the layer of the crate to look like it's in the shelf. + handle_visuals() + return TRUE + return FALSE // If the do_after() is interrupted, return FALSE! + +/obj/structure/cargo_shelf/proc/unload(obj/structure/closet/crate/crate, mob/user, turf/unload_turf) + if(!unload_turf) + unload_turf = get_turf(user) // If a turf somehow isn't passed into the proc, put it at the user's feet. + if(!unload_turf.Enter(crate)) // If moving the crate from the shelf to the desired turf would bump, don't do it! Thanks Kapu1178 for the help here. - Generic DM + unload_turf.balloon_alert(user, "no room!") + return FALSE + if(do_after(user, use_delay, target = crate)) + if(!shelf_contents.Find(crate)) + return FALSE // If something has happened to the crate while we were waiting, abort! + crate.layer = initial(crate.layer) // Reset the crate back to having the default layer, otherwise we might get strange interactions. + crate.pixel_y = initial(crate.pixel_y) // Reset the crate back to having no offset, otherwise it will be floating. + crate.forceMove(unload_turf) + shelf_contents[shelf_contents.Find(crate)] = null // We do this instead of removing it from the list to preserve the order of the shelf. + handle_visuals() + return TRUE + return FALSE // If the do_after() is interrupted, return FALSE! + +/obj/structure/cargo_shelf/deconstruct(disassembled = TRUE) + var/turf/dump_turf = drop_location() + for(var/obj/structure/closet/crate/crate in shelf_contents) + crate.layer = initial(crate.layer) // Reset the crates back to default visual state + crate.pixel_y = initial(crate.pixel_y) + crate.forceMove(dump_turf) + step(crate, pick(GLOB.alldirs)) // Shuffle the crates around as though they've fallen down. + crate.SpinAnimation(rand(4,7), 1) // Spin the crates around a little as they fall. Randomness is applied so it doesn't look weird. + switch(pick(1, 1, 1, 1, 2, 2, 3)) // Randomly pick whether to do nothing, open the crate, or break it open. + if(1) // Believe it or not, this does nothing. + EMPTY_BLOCK_GUARD + if(2) // Open the crate! + if(crate.open()) // Break some open, cause a little chaos. + crate.visible_message(span_warning("[crate]'s lid falls open!")) + else // If we somehow fail to open the crate, just break it instead! + crate.visible_message(span_warning("[crate] falls apart!")) + crate.deconstruct() + if(3) // Break that crate! + crate.visible_message(span_warning("[crate] falls apart!")) + crate.deconstruct() + shelf_contents[shelf_contents.Find(crate)] = null + if(!(flags_1 & NODECONSTRUCT_1)) + density = FALSE + var/obj/item/rack_parts/cargo_shelf/newparts = new(loc) + transfer_fingerprints_to(newparts) + return ..() + +/obj/structure/closet/crate/MouseDrop(atom/drop_atom, src_location, over_location) + . = ..() + var/mob/living/user = usr + if(!isliving(user)) + return // Ghosts busted. + if(!isturf(user.loc) || user.incapacitated() || user.body_position == LYING_DOWN) + return // If the user is in a weird state, don't bother trying. + if(get_dist(drop_atom, src) != 1 || get_dist(drop_atom, user) != 1) + return // Check whether the crate is exactly 1 tile from the shelf and the user. + if(istype(drop_atom, /turf/open) && istype(loc, /obj/structure/cargo_shelf) && user.Adjacent(drop_atom)) + var/obj/structure/cargo_shelf/shelf = loc + return shelf.unload(src, user, drop_atom) // If we're being dropped onto a turf, and we're inside of a crate shelf, unload. + if(istype(drop_atom, /obj/structure/cargo_shelf) && isturf(loc) && user.Adjacent(src)) + var/obj/structure/cargo_shelf/shelf = drop_atom + return shelf.load(src, user) // If we're being dropped onto a crate shelf, and we're in a turf, load. + +/obj/item/rack_parts/cargo_shelf + name = "Cargo shelf parts" + icon = 'monkestation/icons/obj/structures/shelf.dmi' + icon_state = "rack_parts" + desc = "Parts of a cargo shelf, for storing crates." + +/obj/item/rack_parts/cargo_shelf/attack_self(mob/user) + if(building) + return + building = TRUE + to_chat(user, span_notice("You start constructing a cargo shelf...")) + if(do_after(user, 50, target = user, progress=TRUE)) + if(!user.temporarilyRemoveItemFromInventory(src)) + return + var/obj/structure/cargo_shelf/R = new /obj/structure/cargo_shelf(get_turf(src)) + user.visible_message("[user] assembles \a [R].\ + ", span_notice("You assemble \a [R].")) + R.add_fingerprint(user) + qdel(src) + building = FALSE diff --git a/monkestation/code/modules/slash_commands/world_topics.dm b/monkestation/code/modules/slash_commands/world_topics.dm index beef7fcd1b57..91665df459a8 100644 --- a/monkestation/code/modules/slash_commands/world_topics.dm +++ b/monkestation/code/modules/slash_commands/world_topics.dm @@ -1,5 +1,5 @@ /datum/world_topic/status_webhook - keyword = "status" + keyword = "status-webhook" require_comms_key = TRUE diff --git a/monkestation/code/modules/slimecore/animations/slime_effects.dm b/monkestation/code/modules/slimecore/animations/slime_effects.dm new file mode 100644 index 000000000000..ae59551d2625 --- /dev/null +++ b/monkestation/code/modules/slimecore/animations/slime_effects.dm @@ -0,0 +1,38 @@ +/obj/effect/abstract/blank + name = "" + alpha = 150 + anchored = TRUE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + icon ='monkestation/code/modules/slimecore/icons/filters.dmi' + icon_state = "diag" + vis_flags = VIS_INHERIT_PLANE | VIS_INHERIT_LAYER + blend_mode = BLEND_INSET_OVERLAY + +/atom/movable/proc/rainbow_effect() // this just animates between the primary colors of a rainbow + var/obj/effect/abstract/blank/rainbow_effect = new + + appearance_flags &= ~KEEP_APART + appearance_flags |= KEEP_TOGETHER + vis_contents += rainbow_effect + +/atom/movable/proc/remove_rainbow_effect() + var/obj/effect/abstract/blank/rainbow_effect = locate() in vis_contents + qdel(rainbow_effect) + +/image/proc/rainbow_effect() // this just animates between the primary colors of a rainbow + var/obj/effect/abstract/blank/rainbow_effect = new + + appearance_flags &= ~KEEP_APART + appearance_flags |= KEEP_TOGETHER + vis_contents += rainbow_effect + +/atom/proc/ungulate() + var/matrix/ungulate_matrix = matrix(transform) + ungulate_matrix.Scale(1, 0.9) + var/matrix/base_matrix = matrix(transform) + var/base_pixel_y = pixel_y + + animate(src, transform = ungulate_matrix, time = 0.1 SECONDS, easing = EASE_OUT, loop = -1) + animate(pixel_y = -1, time = 0.1 SECONDS, easing = EASE_OUT) + animate(transform = base_matrix, time = 0.1 SECONDS, easing = EASE_IN) + animate(pixel_y = base_pixel_y, time = 0.1 SECONDS, easing = EASE_IN) diff --git a/monkestation/code/modules/slimecore/assets/xenobiology.dm b/monkestation/code/modules/slimecore/assets/xenobiology.dm new file mode 100644 index 000000000000..b8677ba2e83f --- /dev/null +++ b/monkestation/code/modules/slimecore/assets/xenobiology.dm @@ -0,0 +1,5 @@ +/datum/asset/spritesheet/xenobio_market + name = "xenobio_market" + +/datum/asset/spritesheet/xenobio_market/create_spritesheets() + InsertAll("", 'monkestation/code/modules/slimecore/icons/slimes.dmi') diff --git a/monkestation/code/modules/slimecore/components/basic_scared_of_item.dm b/monkestation/code/modules/slimecore/components/basic_scared_of_item.dm new file mode 100644 index 000000000000..3b3aa14886bb --- /dev/null +++ b/monkestation/code/modules/slimecore/components/basic_scared_of_item.dm @@ -0,0 +1,40 @@ +/datum/component/scared_of_item // this runs independantly of ai_controller so we aren't wasting ai process time on this as its a passive check. + var/range + var/was_scared = FALSE + var/mob/last_scared_by + +/datum/component/scared_of_item/Initialize(item_path, range) + src.range = range + + START_PROCESSING(SSobj, src) + +/datum/component/scared_of_item/process(seconds_per_tick) + var/mob/living/basic/basic_mob = parent + + if(isliving(parent)) + var/mob/living/living = parent + if(living.stat == DEAD) + return + + var/broke = FALSE + for(var/mob/living/carbon/human/human in oview(range, basic_mob)) + for(var/obj/item/item as anything in human.held_items) + if(!item) + continue + if(item.type != basic_mob.ai_controller.blackboard[BB_BASIC_MOB_SCARED_ITEM]) + continue + basic_mob.ai_controller.set_blackboard_key(BB_BASIC_MOB_STOP_FLEEING, FALSE) + + if(!was_scared) + SEND_SIGNAL(basic_mob, COMSIG_EMOTION_STORE, human, EMOTION_SCARED, "chased me with an extinguisher.") + last_scared_by = human + was_scared = TRUE + broke = TRUE + break + if(broke) + return + basic_mob.ai_controller.set_blackboard_key(BB_BASIC_MOB_STOP_FLEEING, TRUE) + if(was_scared) + SEND_SIGNAL(basic_mob, COMSIG_EMOTION_STORE, last_scared_by, EMOTION_HAPPY, "stopped chasing me with an extinguisher.", 0) + was_scared = FALSE + last_scared_by = null diff --git a/monkestation/code/modules/slimecore/components/emotion_buffer.dm b/monkestation/code/modules/slimecore/components/emotion_buffer.dm new file mode 100644 index 000000000000..ce715b741706 --- /dev/null +++ b/monkestation/code/modules/slimecore/components/emotion_buffer.dm @@ -0,0 +1,136 @@ +//This is really just a storage cell for mood messages, also handles some basic responding to emotional events for mobs +/datum/component/emotion_buffer + var/mob/living/host + + ///our current emotion + var/current_emotion = EMOTION_HAPPY + + ///the buffer of emotional things with there emotion stored like EMOTION_HAPPY = List("Was fed by x") + var/emotional_buffer = list( + EMOTION_HAPPY = list(), + EMOTION_SAD = list(), + EMOTION_ANGER = list(), + EMOTION_FUNNY = list(), + EMOTION_SCARED = list(), + EMOTION_SUPRISED = list(), + EMOTION_HUNGRY = list(), + ) + + var/emotional_responses = list( + EMOTION_HAPPY = list(), + EMOTION_SAD = list(), + EMOTION_ANGER = list(), + EMOTION_FUNNY = list(), + EMOTION_SCARED = list(), + EMOTION_SUPRISED = list(), + EMOTION_HUNGRY = list(), + ) + + var/emotional_heard = list( + EMOTION_HAPPY = list(), + EMOTION_SAD = list(), + EMOTION_ANGER = list(), + EMOTION_FUNNY = list(), + EMOTION_SCARED = list(), + EMOTION_SUPRISED = list(), + EMOTION_HUNGRY = list(), + ) + + ///these are sent as emotion = icon_state, where the icon is stored inside the sources icon file + var/list/emotional_overlays = list() + +/datum/component/emotion_buffer/Initialize(list/emotional_overlay_states) + . = ..() + host = parent + if(!length(emotional_overlay_states)) + emotional_overlays = list() + emotional_overlays = emotional_overlay_states + +/datum/component/emotion_buffer/RegisterWithParent() + . = ..() + if(length(emotional_overlays)) + RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(emotion_overlay)) + RegisterSignal(parent, EMOTION_BUFFER_UPDATE_OVERLAY_STATES, PROC_REF(replace_overlays)) + + RegisterSignal(parent, COMSIG_EMOTION_STORE, PROC_REF(register_emotional_data)) + RegisterSignal(parent, EMOTION_BUFFER_SPEAK_FROM_BUFFER, PROC_REF(speak_from_buffer)) + RegisterSignal(parent, COMSIG_EMOTION_HEARD, PROC_REF(store_heard)) + RegisterSignal(parent, COMSIG_MOVABLE_HEAR, PROC_REF(hear_speech)) + +/datum/component/emotion_buffer/Destroy(force, silent) + . = ..() + host = null + +/datum/component/emotion_buffer/UnregisterFromParent() + . = ..() + UnregisterSignal(parent, COMSIG_EMOTION_STORE) + UnregisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS) + UnregisterSignal(parent, EMOTION_BUFFER_UPDATE_OVERLAY_STATES) + UnregisterSignal(parent, EMOTION_BUFFER_SPEAK_FROM_BUFFER) + UnregisterSignal(parent, COMSIG_EMOTION_HEARD) + UnregisterSignal(parent, COMSIG_MOVABLE_HEAR) + + +/datum/component/emotion_buffer/proc/register_emotional_data(datum/source, atom/from, emotion, emotional_text, intensity = 1) + if(!emotional_buffer[emotion]) + return + + if((emotion in list(EMOTION_ANGER, EMOTION_SAD, EMOTION_SCARED)) && intensity) + intensity *= -1 + + + if(from) + emotional_buffer[emotion] += list("[from] [emotional_text]" = FALSE) + if(intensity) + SEND_SIGNAL(parent, COMSIG_FRIENDSHIP_CHANGE, from, intensity) + else + emotional_buffer[emotion] += list("[emotional_text]" = FALSE) + + current_emotion = emotion + +/datum/component/emotion_buffer/proc/emotion_overlay(mob/living/source, list/overlays) + if(!emotional_overlays[current_emotion]) + return + if(source.health <= 0) + return + overlays += mutable_appearance(source.icon, emotional_overlays[current_emotion], source.layer, source) + +/datum/component/emotion_buffer/proc/replace_overlays(mob/living/source, list/new_icon_states) + emotional_overlays = list() + emotional_overlays += new_icon_states + +/datum/component/emotion_buffer/proc/speak_from_buffer(mob/living/source) + if(prob(100)) + var/spoken_emotion = current_emotion + if(prob(25)) + var/list/viable_emotions = list() + for(var/emotion in emotional_buffer) + if(!length(emotional_buffer[emotion])) + continue + viable_emotions |= emotion + if(!length(viable_emotions)) + return + spoken_emotion = pick(viable_emotions) + var/list/speakable_phrases = list() + for(var/phrase in emotional_buffer[spoken_emotion]) + if(emotional_buffer[spoken_emotion][phrase]) + continue + speakable_phrases |= phrase + + if(!length(speakable_phrases)) + return + var/choice = pick(speakable_phrases) + if(!choice) + return + emotional_buffer[spoken_emotion][choice] = TRUE + source.say(choice) + + for(var/mob/living/mob in range(5, source)) + if(mob == source) + continue + SEND_SIGNAL(mob, COMSIG_EMOTION_HEARD, spoken_emotion, choice, source) + +/datum/component/emotion_buffer/proc/store_heard(mob/living/source, emotion, phrase, mob/living/speaker) + emotional_heard[emotion] += list("[speaker] said [phrase]" = FALSE) + +/datum/component/emotion_buffer/proc/hear_speech() diff --git a/monkestation/code/modules/slimecore/components/friendship_tracker.dm b/monkestation/code/modules/slimecore/components/friendship_tracker.dm new file mode 100644 index 000000000000..0c3305b33349 --- /dev/null +++ b/monkestation/code/modules/slimecore/components/friendship_tracker.dm @@ -0,0 +1,56 @@ +/datum/component/friendship_container + ///our friendship thresholds from lowest to highest + var/list/friendship_levels = list() + ///our current friends stored as a weakref = amount + var/list/weakrefed_friends = list() + ///list of friendship levels that we send BEFRIEND signals on, if someone drops below these levels its over + var/befriend_level + ///list of all befriended refs + var/list/befriended_refs = list() + +/datum/component/friendship_container/Initialize(friendship_levels = list(), befriend_level) + . = ..() + if(!length(friendship_levels)) + return FALSE + + src.friendship_levels = friendship_levels + src.befriend_level = befriend_level + + +/datum/component/friendship_container/RegisterWithParent() + RegisterSignal(parent, COMSIG_FRIENDSHIP_CHECK_LEVEL, PROC_REF(check_friendship_level)) + RegisterSignal(parent, COMSIG_FRIENDSHIP_CHANGE, PROC_REF(change_friendship)) + +/datum/component/friendship_container/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_FRIENDSHIP_CHECK_LEVEL) + UnregisterSignal(parent, COMSIG_FRIENDSHIP_CHANGE) + +/datum/component/friendship_container/proc/change_friendship(mob/living/source, atom/target, amount) + for(var/datum/weakref/ref as anything in weakrefed_friends) + if(ref.resolve() == target) + + ///handles registering pet commands and other things that use BEFRIEND + if(amount < 0) + if((friendship_levels[befriend_level] > weakrefed_friends[ref]) && (ref in befriended_refs)) + SEND_SIGNAL(parent, COMSIG_LIVING_UNFRIENDED, ref.resolve()) + befriended_refs -= ref + source.ai_controller?.remove_thing_from_blackboard_key(BB_FRIENDS_LIST, target) + + else if((friendship_levels[befriend_level] <= weakrefed_friends[ref]) && !(ref in befriended_refs)) + SEND_SIGNAL(parent, COMSIG_LIVING_BEFRIENDED, ref.resolve()) + befriended_refs += ref + source.ai_controller?.insert_blackboard_key_lazylist(BB_FRIENDS_LIST, target) + + weakrefed_friends[ref] += amount + return TRUE + weakrefed_friends += list(WEAKREF(target) = amount) + return TRUE + +///Returns {TRUE} if friendship is above a certain threshold else returns {FALSE} +/datum/component/friendship_container/proc/check_friendship_level(mob/living/source, atom/target, friendship_level) + for(var/datum/weakref/ref as anything in weakrefed_friends) + if(ref.resolve() == target) + if(friendship_levels[friendship_level] <= weakrefed_friends[ref]) + return TRUE + return FALSE + return FALSE diff --git a/monkestation/code/modules/slimecore/components/generic_mob_hunger.dm b/monkestation/code/modules/slimecore/components/generic_mob_hunger.dm new file mode 100644 index 000000000000..a8aefc5df81c --- /dev/null +++ b/monkestation/code/modules/slimecore/components/generic_mob_hunger.dm @@ -0,0 +1,94 @@ +/datum/component/generic_mob_hunger + var/current_hunger + var/max_hunger + ///this is the rate at which our hunger passively drains + var/hunger_drain + var/hunger_paused = FALSE + var/feed_pause_time + var/feed_pause_end + +/datum/component/generic_mob_hunger/Initialize(max_hunger = 250, hunger_drain = 0.1, feed_pause_time = 1 MINUTE, starting_hunger) + . = ..() + src.hunger_drain = hunger_drain + src.max_hunger = max_hunger + src.feed_pause_time = feed_pause_time + if(!starting_hunger) + src.current_hunger = max_hunger + else + src.current_hunger = starting_hunger + + START_PROCESSING(SSobj, src) + +/datum/component/generic_mob_hunger/RegisterWithParent() + RegisterSignal(parent, COMSIG_MOB_STOP_HUNGER, PROC_REF(stop_hunger)) + RegisterSignal(parent, COMSIG_MOB_START_HUNGER, PROC_REF(start_hunger)) + RegisterSignal(parent, COMSIG_MOB_FEED, PROC_REF(on_feed)) + RegisterSignal(parent, COMSIG_MOB_RETURN_HUNGER, PROC_REF(return_hunger)) + RegisterSignal(parent, COMSIG_MOB_ADJUST_HUNGER, PROC_REF(adjust_hunger)) + +/datum/component/generic_mob_hunger/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_MOB_STOP_HUNGER) + UnregisterSignal(parent, COMSIG_MOB_START_HUNGER) + UnregisterSignal(parent, COMSIG_MOB_FEED) + UnregisterSignal(parent, COMSIG_MOB_RETURN_HUNGER) + UnregisterSignal(parent, COMSIG_MOB_ADJUST_HUNGER) + +/datum/component/generic_mob_hunger/proc/stop_hunger() + hunger_paused = TRUE + +/datum/component/generic_mob_hunger/proc/start_hunger() + hunger_paused = FALSE + +/datum/component/generic_mob_hunger/proc/on_feed(datum/source, atom/target, feed_amount) + SIGNAL_HANDLER + if(current_hunger > max_hunger) + SEND_SIGNAL(parent, COMSIG_MOB_REFUSED_EAT) + return + + SEND_SIGNAL(parent, COMSIG_HUNGER_UPDATED, current_hunger + feed_amount, max_hunger) + if(current_hunger + feed_amount > max_hunger) + var/temp = (current_hunger + feed_amount) / max_hunger + SEND_SIGNAL(parent, COMSIG_MOB_OVERATE, temp) + ADD_TRAIT(parent, TRAIT_OVERFED, "hunger_trait") + addtimer(CALLBACK(src, PROC_REF(remove_hunger_trait), TRAIT_OVERFED), 5 MINUTES, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) + current_hunger += feed_amount + if(feed_pause_time) + feed_pause_end = world.time + feed_pause_time + return + + current_hunger += feed_amount + SEND_SIGNAL(parent, COMSIG_MOB_EAT_NORMAL, current_hunger) + if(feed_pause_time) + feed_pause_end = world.time + feed_pause_time + +/datum/component/generic_mob_hunger/proc/return_hunger() + SIGNAL_HANDLER + return current_hunger / max_hunger + +/datum/component/generic_mob_hunger/process(seconds_per_tick) + if(hunger_paused || !hunger_drain || (feed_pause_end > world.time)) + return + + if(isliving(parent)) + var/mob/living/living = parent + if(living.stat == DEAD) + return + + if(current_hunger >= hunger_drain) + current_hunger -= hunger_drain + SEND_SIGNAL(parent, COMSIG_HUNGER_UPDATED, current_hunger, max_hunger) + + var/hunger_precent = current_hunger / max_hunger + + if(hunger_precent <= 0.25) + SEND_SIGNAL(parent, COMSIG_MOB_STARVING, hunger_precent) + else + current_hunger = 0 + SEND_SIGNAL(parent, COMSIG_HUNGER_UPDATED, current_hunger, max_hunger) + SEND_SIGNAL(parent, COMSIG_MOB_FULLY_STARVING) + +/datum/component/generic_mob_hunger/proc/adjust_hunger(datum/source, amount) + current_hunger += amount + +/datum/component/generic_mob_hunger/proc/remove_hunger_trait(trait) + REMOVE_TRAIT(parent, trait, "hunger_trait") diff --git a/monkestation/code/modules/slimecore/components/latch_feeding.dm b/monkestation/code/modules/slimecore/components/latch_feeding.dm new file mode 100644 index 000000000000..5780c4b45efb --- /dev/null +++ b/monkestation/code/modules/slimecore/components/latch_feeding.dm @@ -0,0 +1,123 @@ +/datum/component/latch_feeding + var/damage_type + var/damage_amount + + ///this is the target we are sucking + var/atom/movable/target + ///this is the amount of hunger we are sending per feed process + var/hunger_restore + ///do we stop at crit? + var/stops_at_crit + ///did we just unlatch? + var/unlatching = FALSE + ///our callback + var/datum/callback/check_and_replace + +/datum/component/latch_feeding/Initialize(atom/movable/target, damage_type, damage_amount, hunger_restore, stops_at_crit, datum/callback/callback, checks_loc = TRUE) + . = ..() + src.target = target + if(!target) + return COMPONENT_INCOMPATIBLE + + src.damage_type = damage_type + src.damage_amount = damage_amount + src.hunger_restore = hunger_restore + src.stops_at_crit = stops_at_crit + src.check_and_replace = callback + + if(!latch_target(loc_check = checks_loc)) + return COMPONENT_INCOMPATIBLE + + ADD_TRAIT(parent, TRAIT_FEEDING, LATCH_TRAIT) + + START_PROCESSING(SSobj, src) + +/datum/component/latch_feeding/Destroy(force, silent) + REMOVE_TRAIT(parent, TRAIT_FEEDING, LATCH_TRAIT) + . = ..() + target = null + qdel(check_and_replace) + +/datum/component/latch_feeding/RegisterWithParent() + RegisterSignal(parent, COMSIG_LIVING_SET_BUCKLED, PROC_REF(check_buckled)) + RegisterSignal(parent, COMSIG_MOB_OVERATE, PROC_REF(stop_feeding)) + +/datum/component/latch_feeding/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_LIVING_SET_BUCKLED) + UnregisterSignal(parent, COMSIG_MOB_OVERATE) + +/datum/component/latch_feeding/proc/latch_target(init = FALSE, loc_check = TRUE) + var/mob/basic_mob = parent + var/mob/living/living_target = target + SEND_SIGNAL(basic_mob, COMSIG_MOBSTACKER_DESTROY) + basic_mob.unbuckle_all_mobs() + if((living_target.stat >= SOFT_CRIT) && stops_at_crit && living_target.client) + if(init) + return FALSE + else + qdel(src) + return FALSE + + target.unbuckle_all_mobs(force = TRUE) + if(target.buckle_mob(basic_mob, TRUE, loc_check)) + basic_mob.layer = target.layer + 0.1 + target.visible_message(span_danger("[basic_mob] latches onto [target]!"), \ + span_userdanger("[basic_mob] latches onto [target]!")) + ADD_TRAIT(target, TRAIT_LATCH_FEEDERED, "latch_feeding") + return TRUE + else + to_chat(basic_mob, span_notice("You failed to latch onto [target].")) + if(init) + return FALSE + else + qdel(src) + +/datum/component/latch_feeding/proc/unlatch_target(living = TRUE, silent = FALSE) + var/mob/basic_mob = parent + if(!target) + return + if(basic_mob.buckled) + if(!living) + to_chat(basic_mob, "[pick("This subject is incompatible", \ + "This subject does not have life energy", "This subject is empty", \ + "I am not satisified", "I can not feed from this subject", \ + "I do not feel nourished", "This subject is not food")]!") + if(!silent) + basic_mob.visible_message(span_warning("[basic_mob] lets go of [basic_mob.buckled]!"), \ + span_notice("I stopped feeding.")) + + REMOVE_TRAIT(target, TRAIT_LATCH_FEEDERED, "latch_feeding") + basic_mob.layer = initial(basic_mob.layer) + if(basic_mob.buckled) + basic_mob.buckled.unbuckle_mob(basic_mob, force=TRUE) + +/datum/component/latch_feeding/proc/check_buckled(mob/living/source, atom/movable/new_buckled) + if(!new_buckled && !unlatching) + unlatching = TRUE + unlatch_target() + qdel(src) + return + +/datum/component/latch_feeding/proc/stop_feeding() + unlatch_target() + qdel(src) + +/datum/component/latch_feeding/process(seconds_per_tick) + if(!target) + qdel(src) + return + + var/mob/living/living_target = target + if((living_target.stat >= SOFT_CRIT) && stops_at_crit && living_target.client) + stop_feeding() + return + + if(!check_and_replace || (check_and_replace && !check_and_replace.Invoke())) + if(iscarbon(living_target)) + living_target.apply_damage(damage_amount, damage_type, spread_damage = TRUE) + else + living_target.apply_damage(damage_amount, BRUTE, spread_damage = TRUE) + + if(parent) // ??? I was getting runtimes for no parent but IDK how + SEND_SIGNAL(parent, COMSIG_MOB_FEED, target, hunger_restore) + SEND_SIGNAL(target, COMSIG_MOB_FED_ON, parent, hunger_restore) diff --git a/monkestation/code/modules/slimecore/components/liquid_secretion.dm b/monkestation/code/modules/slimecore/components/liquid_secretion.dm new file mode 100644 index 000000000000..5dce38e9a8b8 --- /dev/null +++ b/monkestation/code/modules/slimecore/components/liquid_secretion.dm @@ -0,0 +1,50 @@ +/datum/component/liquid_secretion + ///the reagent we secrete + var/reagent_id + ///the interval of secretion + var/secretion_interval + ///amount of reagents to spawn + var/amount + ///Callback interaction called when the turf has some liquids on it + var/datum/callback/pre_secrete_callback + var/next_secrete = 0 + + + +/datum/component/liquid_secretion/Initialize(reagent_id = /datum/reagent/water, amount = 10, secretion_interval = 1 SECONDS, pre_secrete_callback) + . = ..() + + src.reagent_id = reagent_id + src.secretion_interval = secretion_interval + src.amount = amount + src.pre_secrete_callback = CALLBACK(parent, pre_secrete_callback) + + START_PROCESSING(SSobj, src) + +/datum/component/liquid_secretion/RegisterWithParent() + RegisterSignal(parent, COMSIG_SECRETION_UPDATE, PROC_REF(update_information)) //The only signal allowing item -> turf interaction + +/datum/component/liquid_secretion/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_SECRETION_UPDATE) + +/datum/component/liquid_secretion/proc/update_information(datum/source, reagent_id, amount, secretion_interval) + if(reagent_id) + src.reagent_id = reagent_id + if(amount) + src.amount = amount + if(secretion_interval) + src.secretion_interval = secretion_interval + + +/datum/component/liquid_secretion/process(seconds_per_tick) + if(!parent || (next_secrete > world.time)) + return + next_secrete = world.time + secretion_interval + if(pre_secrete_callback && !pre_secrete_callback.Invoke(parent)) + return + + var/turf/parent_turf = get_turf(parent) + var/list/reagent_list = list() + reagent_list |= reagent_id + reagent_list[reagent_id] = amount + parent_turf.add_liquid_list(reagent_list, FALSE, T20C) diff --git a/monkestation/code/modules/slimecore/components/mob_stacker.dm b/monkestation/code/modules/slimecore/components/mob_stacker.dm new file mode 100644 index 000000000000..4bc78677349a --- /dev/null +++ b/monkestation/code/modules/slimecore/components/mob_stacker.dm @@ -0,0 +1,84 @@ +/datum/component/mob_stacker + var/list/stacked_mobs = list() + ///until we get a better pixel proc this is a constant offset + var/constant_offset = 0 + ///this is our top most atoms + var/mob/living/current_head + ///this is our brain the main dude + var/mob/living/main_dude + + ///are we breaking apart + var/breaking = FALSE + + var/max_size = 1 + + +/datum/component/mob_stacker/Initialize(...) + . = ..() + main_dude = parent + current_head = parent + max_size = rand(1, 7) + main_dude.max_buckled_mobs = max_size + addtimer(CALLBACK(src, PROC_REF(destroy_self)), rand(30 SECONDS, 120 SECONDS)) + +/datum/component/mob_stacker/RegisterWithParent() + . = ..() + RegisterSignal(parent, COMSIG_CHECK_CAN_ADD_NEW_STACK, PROC_REF(can_add)) + RegisterSignal(parent, COMSIG_ATOM_JOIN_STACK, PROC_REF(try_join_stack)) + RegisterSignal(parent, COMSIG_LIVING_SET_BUCKLED, PROC_REF(check_collapse)) + RegisterSignal(parent, COMSIG_MOBSTACKER_DESTROY, PROC_REF(destroy_self)) + +/datum/component/mob_stacker/Destroy(force, silent) + . = ..() + UnregisterSignal(main_dude, COMSIG_ATOM_JOIN_STACK) + UnregisterSignal(main_dude, COMSIG_LIVING_SET_BUCKLED) + UnregisterSignal(main_dude, COMSIG_CHECK_CAN_ADD_NEW_STACK) + if(main_dude.buckled) + main_dude.buckled.unbuckle_mob(main_dude, force=TRUE) + main_dude = null + current_head = null + for(var/mob/living/dude as anything in stacked_mobs) + if(isbasicmob(dude)) + var/mob/living/basic/basic = dude + basic.ai_controller?.set_ai_status(AI_STATUS_ON) + REMOVE_TRAIT(dude, TRAIT_IN_STACK, "mob_stack") + UnregisterSignal(dude, COMSIG_ATOM_JOIN_STACK) + UnregisterSignal(dude, COMSIG_LIVING_SET_BUCKLED) + if(dude.buckled) + dude.buckled.unbuckle_mob(dude, force=TRUE) + stacked_mobs -= dude + + +/datum/component/mob_stacker/proc/try_join_stack(datum/source, mob/living/joiner) + SIGNAL_HANDLER + if(joiner in stacked_mobs) + return + + if(main_dude.buckle_mob(joiner, force = TRUE)) + ADD_TRAIT(joiner, TRAIT_IN_STACK, "mob_stack") + if(isbasicmob(joiner)) + var/mob/living/basic/basic = joiner + basic.ai_controller?.set_ai_status(AI_STATUS_OFF) + current_head = joiner + stacked_mobs += joiner + RegisterSignal(joiner, COMSIG_ATOM_JOIN_STACK, PROC_REF(try_join_stack)) + RegisterSignal(joiner, COMSIG_LIVING_SET_BUCKLED, PROC_REF(check_collapse)) + joiner.pixel_y += constant_offset + constant_offset += joiner.get_mob_buckling_height(current_head) + +/datum/component/mob_stacker/proc/check_collapse(mob/living/source, atom/movable/new_buckled) + if(new_buckled != main_dude && !breaking) + breaking = TRUE + qdel(src) + +/datum/component/mob_stacker/proc/can_add(datum/source) + SIGNAL_HANDLER + //this isn't a 1 line return because I like to debug + var/value = length(stacked_mobs) + if(value < max_size) + return TRUE + else + return FALSE + +/datum/component/mob_stacker/proc/destroy_self() + qdel(src) diff --git a/monkestation/code/modules/slimecore/components/pollution_scrubber.dm b/monkestation/code/modules/slimecore/components/pollution_scrubber.dm new file mode 100644 index 000000000000..108dfb2bd7a9 --- /dev/null +++ b/monkestation/code/modules/slimecore/components/pollution_scrubber.dm @@ -0,0 +1,28 @@ +/datum/component/pollution_scrubber + ///the amount we try to scrub each process + var/scrubbing_amount + ///the lifetime if set it will delete itself after this point + var/lifetime + +/datum/component/pollution_scrubber/Initialize(scrubbing_amount, lifetime) + . = ..() + src.scrubbing_amount = scrubbing_amount + src.lifetime = lifetime + + if(lifetime) + addtimer(CALLBACK(src, PROC_REF(kill_component)), lifetime) + START_PROCESSING(SSobj, src) + + +/datum/component/pollution_scrubber/proc/kill_component() + qdel(src) + +/datum/component/pollution_scrubber/process(seconds_per_tick) + if(isliving(parent)) + var/mob/living/living = parent + if(living.stat == DEAD) + return + + var/turf/open/turf = get_turf(parent) + if(turf.pollution) + turf.pollution.scrub_amount(scrubbing_amount) diff --git a/monkestation/code/modules/slimecore/components/vac_tagged.dm b/monkestation/code/modules/slimecore/components/vac_tagged.dm new file mode 100644 index 000000000000..317e3889cfa8 --- /dev/null +++ b/monkestation/code/modules/slimecore/components/vac_tagged.dm @@ -0,0 +1,16 @@ +/datum/component/vac_tagged + var/datum/weakref/creator + +/datum/component/vac_tagged/Initialize(mob/creator_mob) + . = ..() + if(!creator_mob) + return COMPONENT_INCOMPATIBLE + + creator = WEAKREF(creator_mob) + +/datum/component/vac_tagged/RegisterWithParent() + . = ..() + RegisterSignal(parent, COMSIG_MOB_FED_ON, PROC_REF(on_fed_on)) + +/datum/component/vac_tagged/proc/on_fed_on(mob/living/source, mob/living/feeder, hunger_restored) + SEND_SIGNAL(feeder, COMSIG_FRIENDSHIP_CHANGE, creator.resolve(), (hunger_restored * 0.1)) diff --git a/monkestation/code/modules/slimecore/corral/corral_data.dm b/monkestation/code/modules/slimecore/corral/corral_data.dm new file mode 100644 index 000000000000..c75b53e065da --- /dev/null +++ b/monkestation/code/modules/slimecore/corral/corral_data.dm @@ -0,0 +1,100 @@ +//this is just a doc comment but currently the max interior size is 9x9 so 11x11 if you include the corral walls +/datum/corral_data + ///list of all managed slimes + var/list/managed_slimes = list() + ///the installed corral upgrades + var/list/corral_upgrades = list() + + ///the turfs inside the corral + var/list/corral_turfs = list() + ///our corral corners + var/list/corral_corners = list() + ///the corral connecter effects + var/list/corral_connectors = list() + +/datum/corral_data/proc/setup_pen() + for(var/turf/turf as anything in corral_turfs) + RegisterSignal(turf, COMSIG_ATOM_ENTERED, PROC_REF(check_entered)) + RegisterSignal(turf, COMSIG_ATOM_EXITED, PROC_REF(check_exited)) + + for(var/mob/living/basic/slime/slime as anything in turf.contents) + if(!istype(slime)) + continue + managed_slimes |= slime + +/datum/corral_data/Destroy(force, ...) + QDEL_LIST(corral_connectors) + corral_turfs = null + + for(var/obj/machinery/corral_corner/corner as anything in corral_corners) + corner.connected_data = null + corral_corners -= corner + corral_corners = null + for(var/mob/living/basic/slime/slime as anything in managed_slimes) + UnregisterSignal(slime, COMSIG_ATOM_SUCKED) + UnregisterSignal(slime, COMSIG_LIVING_DEATH) + managed_slimes = null + + . = ..() + +/datum/corral_data/proc/check_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) + if(!istype(arrived, /mob/living/basic/slime)) + return + + if(isliving(arrived)) + var/mob/living/living = arrived + if(living.stat == DEAD) + return + + if(arrived in managed_slimes) + return + + RegisterSignal(arrived, COMSIG_ATOM_SUCKED, PROC_REF(remove_cause_sucked)) + RegisterSignal(arrived, COMSIG_LIVING_DEATH, PROC_REF(remove_cause_sucked)) + RegisterSignals(arrived, list(COMSIG_PREQDELETED, COMSIG_QDELETING), PROC_REF(try_remove)) + managed_slimes |= arrived + for(var/datum/corral_upgrade/upgrade as anything in corral_upgrades) + upgrade.on_slime_entered(arrived, src) + update_slimes() + +/datum/corral_data/proc/check_exited(turf/source, atom/movable/gone, direction) + if(!istype(gone, /mob/living/basic/slime)) + return + + var/turf/turf = get_step(source, direction) + if(turf in corral_turfs) + return + + UnregisterSignal(gone, COMSIG_ATOM_SUCKED) + UnregisterSignal(gone, COMSIG_LIVING_DEATH) + UnregisterSignal(gone, list(COMSIG_PREQDELETED, COMSIG_QDELETING)) + managed_slimes -= gone + for(var/datum/corral_upgrade/upgrade as anything in corral_upgrades) + upgrade.on_slime_exited(gone) + update_slimes() + +/datum/corral_data/proc/remove_cause_sucked(atom/movable/gone) + + UnregisterSignal(gone, COMSIG_ATOM_SUCKED) + UnregisterSignal(gone, COMSIG_LIVING_DEATH) + UnregisterSignal(gone, list(COMSIG_PREQDELETED, COMSIG_QDELETING)) + managed_slimes -= gone + for(var/datum/corral_upgrade/upgrade as anything in corral_upgrades) + upgrade.on_slime_exited(gone) + update_slimes() + +/datum/corral_data/proc/try_remove(mob/living/basic/slime/source) + managed_slimes -= source + update_slimes() + +/datum/corral_data/proc/update_slimes() + for(var/mob/living/basic/slime/slime as anything in managed_slimes) + if(QDELETED(slime) || !(get_turf(slime) in corral_turfs)) + managed_slimes -= slime + if(QDELETED(slime)) + continue + UnregisterSignal(slime, COMSIG_ATOM_SUCKED) + UnregisterSignal(slime, COMSIG_LIVING_DEATH) + UnregisterSignal(slime, list(COMSIG_PREQDELETED, COMSIG_QDELETING)) + for(var/datum/corral_upgrade/upgrade as anything in corral_upgrades) + upgrade.on_slime_exited(slime) diff --git a/monkestation/code/modules/slimecore/corral/machines/corral_corner.dm b/monkestation/code/modules/slimecore/corral/machines/corral_corner.dm new file mode 100644 index 000000000000..7c095c3cc339 --- /dev/null +++ b/monkestation/code/modules/slimecore/corral/machines/corral_corner.dm @@ -0,0 +1,189 @@ +/obj/item/corral_linker + name = "corral linker" + desc = "A useful tool to help link corrals" + + icon = 'monkestation/code/modules/slimecore/icons/machinery.dmi' + icon_state = "corral_linker" + + var/obj/machinery/corral_corner/host + var/list/corral_corners = list() + +/obj/item/corral_linker/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + if(target == host) + if(host.submit_corners(corral_corners)) + qdel(src) + return AFTERATTACK_PROCESSED_ITEM + + if(length(corral_corners) == 4) + say("Buffer full!") + return + + if(istype(target, /obj/machinery/corral_corner)) + if(target in corral_corners) + corral_corners -= target + say("Removed corner from buffer!") + return + corral_corners += target + say("Added corner to buffer!") + return + +/obj/machinery/corral_corner + name = "corral fencepost" + desc = "One of the corners of a corral" + + icon = 'monkestation/code/modules/slimecore/icons/machinery.dmi' + icon_state = "corral_corner" + circuit = /obj/item/circuitboard/machine/corral_corner + + density = TRUE + var/max_range = 9 + var/datum/corral_data/connected_data + var/mapping_id + +/obj/machinery/corral_corner/Initialize(mapload) + . = ..() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/corral_corner/LateInitialize() + . = ..() + locate_machinery() + +/obj/machinery/corral_corner/locate_machinery(multitool_connection) + if(!mapping_id || connected_data) + return + var/list/found_corners = list() + for(var/obj/machinery/corral_corner/main in GLOB.machines) + if(main.mapping_id != mapping_id) + continue + found_corners += main + submit_corners(found_corners) + + if(connected_data) + for(var/obj/machinery/slime_pen_controller/controller in GLOB.machines) + if(controller.mapping_id == mapping_id) + controller.linked_data = connected_data + +/obj/machinery/corral_corner/attack_hand(mob/living/user, list/modifiers) + . = ..() + if(connected_data) + return + start_linking_procedure() + +/obj/machinery/corral_corner/multitool_act(mob/living/user, obj/item/tool) + if(!multitool_check_buffer(user, tool)) + return + var/obj/item/multitool/multitool = tool + multitool.buffer = src + to_chat(user, span_notice("You save the data in the [multitool.name]'s buffer.")) + return TOOL_ACT_TOOLTYPE_SUCCESS + +/obj/machinery/corral_corner/proc/start_linking_procedure() + var/obj/item/corral_linker/new_linker = new(loc) + new_linker.host = src + new_linker.corral_corners += src + +/obj/machinery/corral_corner/proc/submit_corners(list/given_corners) + if(length(given_corners) != 4) + return + var/list/steps_and_direction = list() + + var/list/corners = given_corners + + var/list/corners_left = list() + corners_left += corners + + var/turf/current_turf = loc + var/turf/last_found_corner_turf = loc + var/found = FALSE + for(var/num in 1 to 4) + found = FALSE + for(var/direction in GLOB.cardinals) + if(found) + break + current_turf = last_found_corner_turf + var/steps = 0 + for(var/step in 1 to max_range) + current_turf = get_step(current_turf, direction) + + if(current_turf.density) + break + steps++ + + for(var/obj/machinery/corral_corner/found_corner as anything in current_turf.contents) + if(!istype(found_corner)) + continue + + if(!found_corner) + continue + + if((found_corner == src) && length(steps_and_direction) < 3) + continue + + if(!(found_corner in corners_left)) + continue + + steps-- + + corners_left -= found_corner + last_found_corner_turf = current_turf + found = TRUE + steps_and_direction += list("[direction]" = steps) + break + + build_data(steps_and_direction, corners) + return TRUE + +/obj/machinery/corral_corner/proc/build_data(list/steps, list/corners) + var/turf/current_turf = loc + var/list/effects = list() + for(var/step_dir in steps) + for(var/lengths in 1 to steps[step_dir]) + current_turf = get_step(current_turf, text2num(step_dir)) + + var/obj/effect/corral_fence/new_fence = new(current_turf) + new_fence.dir = text2num(step_dir) + effects += new_fence + current_turf = get_step(current_turf, text2num(step_dir)) + + var/datum/corral_data/new_data = new + + new_data.corral_connectors += effects + new_data.corral_corners += corners + + var/turf/last_turf + for(var/obj/machinery/corral_corner/adder as anything in corners) + if((adder.x < x && adder.y < y) || (adder.x > x && adder.y > y) || (adder.x > x && adder.y < y) || (adder.x < x && adder.y > y)) + last_turf = get_turf(adder) + if(adder.connected_data) + continue + adder.connected_data = new_data + + var/list/block_turfs = block(get_turf(src), last_turf) + new_data.corral_turfs += block_turfs + new_data.setup_pen() + +/obj/effect/corral_fence + name = "corral fence" + desc = "A holographic fence designed to prevent slimes from leaving." + anchored = TRUE + can_be_unanchored = FALSE + + icon = 'monkestation/code/modules/slimecore/icons/machinery.dmi' + icon_state = "corral_fence" + can_atmos_pass = ATMOS_PASS_NO + can_astar_pass = CANASTARPASS_ALWAYS_PROC + +/obj/effect/corral_fence/CanPass(atom/movable/mover, border_dir) + . = ..() + if(mover.pulledby) + return TRUE + if((istype(mover, /mob/living/basic/slime) || ismonkey(mover) || istype(mover, /mob/living/basic/xenofauna)) && !HAS_TRAIT(mover, VACPACK_THROW)) + return FALSE + return TRUE + + +/obj/effect/corral_fence/CanAStarPass(to_dir, datum/can_pass_info/pass_info) + if(pass_info.xenofauna_or_slime) + return FALSE + return TRUE //anything expect slimes can astar pass diff --git a/monkestation/code/modules/slimecore/corral/upgrades/_base_upgrade.dm b/monkestation/code/modules/slimecore/corral/upgrades/_base_upgrade.dm new file mode 100644 index 000000000000..41181294be14 --- /dev/null +++ b/monkestation/code/modules/slimecore/corral/upgrades/_base_upgrade.dm @@ -0,0 +1,14 @@ +/datum/corral_upgrade + var/name = "Generic Corral Upgrade" + var/desc = "Generic Corral Upgrade Description" + ///the amount of xenobiology points this pen upgrade costs + var/cost = 0 + +/datum/corral_upgrade/proc/on_add(datum/corral_data/parent) + return + +/datum/corral_upgrade/proc/on_slime_entered(mob/living/basic/slime/slime) + return + +/datum/corral_upgrade/proc/on_slime_exited(mob/living/basic/slime/slime) + return diff --git a/monkestation/code/modules/slimecore/corral/upgrades/human_docility_upgrade.dm b/monkestation/code/modules/slimecore/corral/upgrades/human_docility_upgrade.dm new file mode 100644 index 000000000000..6fa2e8f1c1c2 --- /dev/null +++ b/monkestation/code/modules/slimecore/corral/upgrades/human_docility_upgrade.dm @@ -0,0 +1,16 @@ +/datum/corral_upgrade/human_docility_upgrade + name = "Human Docility Upgrade" + desc = "Makes the non rabid slimes docile to people with souls." + cost = 2500 + +/datum/corral_upgrade/human_docility_upgrade/on_add(datum/corral_data/parent) + for(var/mob/living/basic/slime/slime as anything in parent.managed_slimes) + slime.ai_controller.set_blackboard_key(BB_WONT_TARGET_CLIENTS, TRUE) + +/datum/corral_upgrade/human_docility_upgrade/on_slime_entered(mob/living/basic/slime/slime) + slime.ai_controller.set_blackboard_key(BB_WONT_TARGET_CLIENTS, TRUE) + +/datum/corral_upgrade/human_docility_upgrade/on_slime_exited(mob/living/basic/slime/slime) + if(slime.has_slime_trait(/datum/slime_trait/docility)) + return + slime.ai_controller.set_blackboard_key(BB_WONT_TARGET_CLIENTS, FALSE) diff --git a/monkestation/code/modules/slimecore/corral/upgrades/obliteration_upgrade.dm b/monkestation/code/modules/slimecore/corral/upgrades/obliteration_upgrade.dm new file mode 100644 index 000000000000..830ce0fc93a2 --- /dev/null +++ b/monkestation/code/modules/slimecore/corral/upgrades/obliteration_upgrade.dm @@ -0,0 +1,14 @@ +/datum/corral_upgrade/obliteration_upgrade + name = "Slime Obilteration Upgrade" + desc = "Just obliterates slimes that enter the cage." + cost = 5000 + + +/datum/corral_upgrade/obliteration_upgrade/on_add(datum/corral_data/parent) + for(var/mob/living/basic/slime/slime as anything in parent.managed_slimes) + parent.managed_slimes -= slime + qdel(slime) + +/datum/corral_upgrade/obliteration_upgrade/on_slime_entered(mob/living/basic/slime/slime, datum/corral_data/parent) + parent.managed_slimes -= slime + qdel(slime) diff --git a/monkestation/code/modules/slimecore/icons/backpack_lefthand.dmi b/monkestation/code/modules/slimecore/icons/backpack_lefthand.dmi new file mode 100644 index 000000000000..0a611a1418ae Binary files /dev/null and b/monkestation/code/modules/slimecore/icons/backpack_lefthand.dmi differ diff --git a/monkestation/code/modules/slimecore/icons/backpack_righthand.dmi b/monkestation/code/modules/slimecore/icons/backpack_righthand.dmi new file mode 100644 index 000000000000..bba94d6296f8 Binary files /dev/null and b/monkestation/code/modules/slimecore/icons/backpack_righthand.dmi differ diff --git a/monkestation/code/modules/slimecore/icons/equipment.dmi b/monkestation/code/modules/slimecore/icons/equipment.dmi new file mode 100644 index 000000000000..a28f8c167fc5 Binary files /dev/null and b/monkestation/code/modules/slimecore/icons/equipment.dmi differ diff --git a/monkestation/code/modules/slimecore/icons/filters.dmi b/monkestation/code/modules/slimecore/icons/filters.dmi new file mode 100644 index 000000000000..9cc3bf64767d Binary files /dev/null and b/monkestation/code/modules/slimecore/icons/filters.dmi differ diff --git a/monkestation/code/modules/slimecore/icons/machinery.dmi b/monkestation/code/modules/slimecore/icons/machinery.dmi new file mode 100644 index 000000000000..28c64774745a Binary files /dev/null and b/monkestation/code/modules/slimecore/icons/machinery.dmi differ diff --git a/monkestation/code/modules/slimecore/icons/mister_lefthand.dmi b/monkestation/code/modules/slimecore/icons/mister_lefthand.dmi new file mode 100644 index 000000000000..d9e33529e9f9 Binary files /dev/null and b/monkestation/code/modules/slimecore/icons/mister_lefthand.dmi differ diff --git a/monkestation/code/modules/slimecore/icons/mister_righthand.dmi b/monkestation/code/modules/slimecore/icons/mister_righthand.dmi new file mode 100644 index 000000000000..34ec3bef4b65 Binary files /dev/null and b/monkestation/code/modules/slimecore/icons/mister_righthand.dmi differ diff --git a/monkestation/code/modules/slimecore/icons/slime_grinder.dmi b/monkestation/code/modules/slimecore/icons/slime_grinder.dmi new file mode 100644 index 000000000000..39066bb43ed3 Binary files /dev/null and b/monkestation/code/modules/slimecore/icons/slime_grinder.dmi differ diff --git a/monkestation/code/modules/slimecore/icons/slimecrossing_plort_version.dmi b/monkestation/code/modules/slimecore/icons/slimecrossing_plort_version.dmi new file mode 100644 index 000000000000..6dfd587fef44 Binary files /dev/null and b/monkestation/code/modules/slimecore/icons/slimecrossing_plort_version.dmi differ diff --git a/monkestation/code/modules/slimecore/icons/slimes.dmi b/monkestation/code/modules/slimecore/icons/slimes.dmi new file mode 100644 index 000000000000..5a8833104f25 Binary files /dev/null and b/monkestation/code/modules/slimecore/icons/slimes.dmi differ diff --git a/monkestation/code/modules/slimecore/icons/stack_objects.dmi b/monkestation/code/modules/slimecore/icons/stack_objects.dmi new file mode 100644 index 000000000000..e9dfb5027b00 Binary files /dev/null and b/monkestation/code/modules/slimecore/icons/stack_objects.dmi differ diff --git a/monkestation/code/modules/slimecore/icons/xenofauna.dmi b/monkestation/code/modules/slimecore/icons/xenofauna.dmi new file mode 100644 index 000000000000..57719f2fd9f3 Binary files /dev/null and b/monkestation/code/modules/slimecore/icons/xenofauna.dmi differ diff --git a/monkestation/code/modules/slimecore/items/crossbreeds.dm b/monkestation/code/modules/slimecore/items/crossbreeds.dm new file mode 100644 index 000000000000..a34505d47550 --- /dev/null +++ b/monkestation/code/modules/slimecore/items/crossbreeds.dm @@ -0,0 +1,2 @@ +/obj/item/slimecross + icon = 'monkestation/code/modules/slimecore/icons/slimecrossing_plort_version.dmi' diff --git a/monkestation/code/modules/slimecore/items/mutation_syringe.dm b/monkestation/code/modules/slimecore/items/mutation_syringe.dm new file mode 100644 index 000000000000..fd3998c06be8 --- /dev/null +++ b/monkestation/code/modules/slimecore/items/mutation_syringe.dm @@ -0,0 +1,82 @@ +/obj/item/slime_mutation_syringe + name = "slime mutation syringe" + desc = "Infuses a mutation into a slime." + + icon = 'monkestation/code/modules/slimecore/icons/slimes.dmi' + icon_state = "mutation_syringe" + + ///the path we infuse + var/datum/slime_trait/infusing_trait_path + /// have we been used? + var/used = FALSE + + +/obj/item/slime_mutation_syringe/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + if(!infusing_trait_path || used) + return + if(!istype(target, /mob/living/basic/slime)) + return + + var/mob/living/basic/slime/slime = target + if(slime.add_trait(infusing_trait_path)) + used = TRUE + icon_state = "mutation_syringe-empty" + to_chat(user, span_notice("You inject [target] with [src].")) + + +/obj/item/slime_mutation_syringe/cleaner + name = "cleaner slime mutation syringe" + infusing_trait_path = /datum/slime_trait/cleaner + +/obj/item/slime_mutation_syringe/polluter + name = "polluter slime mutation syringe" + infusing_trait_path = /datum/slime_trait/polluter + +/obj/item/slime_mutation_syringe/gooey_cat + name = "gooey cat slime mutation syringe" + infusing_trait_path = /datum/slime_trait/visual/cat + +/obj/item/slime_mutation_syringe/radioactive + name = "radioactive slime mutation syringe" + infusing_trait_path = /datum/slime_trait/radioactive + +/obj/item/slime_mutation_syringe/never_evolving + name = "never splitting slime mutation syringe" + infusing_trait_path = /datum/slime_trait/never_evolving + +/obj/item/slime_mutation_syringe/never_ooze + name = "never ooze slime mutation syringe" + infusing_trait_path = /datum/slime_trait/never_ooze + +/obj/item/slime_mutation_syringe/soda_slime + name = "soda slime mutation syringe" + infusing_trait_path = /datum/slime_trait/soda_slime + +/obj/item/slime_mutation_syringe/beer_slime + name = "beer slime mutation syringe" + infusing_trait_path = /datum/slime_trait/beer_slime + +/obj/item/slime_mutation_syringe_random + name = "slime mutation syringe" + desc = "Infuses a mutation into a slime." + + icon = 'monkestation/code/modules/slimecore/icons/slimes.dmi' + icon_state = "mutation_syringe" + + /// have we been used? + var/used = FALSE + + +/obj/item/slime_mutation_syringe_random/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + if(used) + return + if(!istype(target, /mob/living/basic/slime)) + return + + var/mob/living/basic/slime/slime = target + slime.start_mutating(TRUE) + used = TRUE + icon_state = "mutation_syringe-empty" + to_chat(user, span_notice("You inject [target] with [src].")) diff --git a/monkestation/code/modules/slimecore/items/vacuum_pack.dm b/monkestation/code/modules/slimecore/items/vacuum_pack.dm new file mode 100644 index 000000000000..7129ed06c519 --- /dev/null +++ b/monkestation/code/modules/slimecore/items/vacuum_pack.dm @@ -0,0 +1,589 @@ +#define NORMAL_VACUUM_PACK_CAPACITY 3 +#define UPGRADED_VACUUM_PACK_CAPACITY 6 +#define ILLEGAL_VACUUM_PACK_CAPACITY 12 + +#define NORMAL_VACUUM_PACK_RANGE 3 +#define UPGRADED_VACUUM_PACK_RANGE 4 +#define ILLEGAL_VACUUM_PACK_RANGE 5 + +#define NORMAL_VACUUM_PACK_SPEED 12 +#define UPGRADED_VACUUM_PACK_SPEED 8 +#define ILLEGAL_VACUUM_PACK_SPEED 6 + +#define VACUUM_PACK_UPGRADE_STASIS "stasis" +#define VACUUM_PACK_UPGRADE_HEALING "healing" +#define VACUUM_PACK_UPGRADE_CAPACITY "capacity" +#define VACUUM_PACK_UPGRADE_RANGE "range" +#define VACUUM_PACK_UPGRADE_SPEED "speed" +#define VACUUM_PACK_UPGRADE_PACIFY "pacification" +#define VACUUM_PACK_UPGRADE_BIOMASS "biomass printer" + +/datum/action/item_action/toggle_nozzle + name = "Toggle Vacuum Nozzle" + +/obj/item/vacuum_pack + name = "backpack xenofauna storage" + desc = "A Xynergy Solutions brand vacuum xenofauna storage with an extendable nozzle. Do not use to practice kissing." + icon = 'monkestation/code/modules/slimecore/icons/equipment.dmi' + icon_state = "vacuum_pack" + inhand_icon_state = "vacuum_pack" + worn_icon_state = "waterbackpackjani" + lefthand_file = 'monkestation/code/modules/slimecore/icons/backpack_lefthand.dmi' + righthand_file = 'monkestation/code/modules/slimecore/icons/backpack_righthand.dmi' + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + actions_types = list(/datum/action/item_action/toggle_nozzle) + max_integrity = 200 + resistance_flags = FIRE_PROOF | ACID_PROOF + + var/obj/item/vacuum_nozzle/nozzle + var/nozzle_type = /obj/item/vacuum_nozzle + var/list/stored = list() + var/capacity = NORMAL_VACUUM_PACK_CAPACITY + var/range = NORMAL_VACUUM_PACK_RANGE + var/speed = NORMAL_VACUUM_PACK_SPEED + var/illegal = FALSE + var/list/upgrades = list() + var/obj/machinery/biomass_recycler/linked + var/give_choice = TRUE //If set to true the pack will give the owner a radial selection to choose which object they want to shoot + var/check_backpack = TRUE //If it can only be used while worn on the back + var/static/list/storable_objects = typecacheof(list(/mob/living/basic/slime, + /mob/living/basic/cockroach/rockroach, + )) + var/modified = FALSE //If the gun is modified to fight with revenants + var/mob/living/basic/revenant/ghost_busting //Stores the revenant we're currently sucking in + var/mob/living/ghost_buster //Stores the user + var/busting_beam //Stores visual effects + COOLDOWN_DECLARE(busting_throw_cooldown) + +/obj/item/vacuum_pack/Initialize(mapload) + . = ..() + nozzle = new nozzle_type(src) + +/obj/item/vacuum_pack/Destroy() + QDEL_NULL(nozzle) + if(VACUUM_PACK_UPGRADE_HEALING in upgrades) + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/vacuum_pack/multitool_act(mob/living/user, obj/item/tool) + . = ..() + modified = !modified + to_chat(user, span_notice("You turn the safety switch on [src] [modified ? "off" : "on"].")) + +/obj/item/vacuum_pack/process(delta_time) + if(!(VACUUM_PACK_UPGRADE_HEALING in upgrades)) + STOP_PROCESSING(SSobj, src) + + for(var/mob/living/basic/animal in stored) + animal.adjustBruteLoss(-5 * delta_time) + +/obj/item/vacuum_pack/examine(mob/user) + . = ..() + if(LAZYLEN(stored)) + . += span_notice("It has [LAZYLEN(stored)] creatures stored in it.") + if(LAZYLEN(upgrades)) + for(var/upgrade in upgrades) + . += span_notice("It has [upgrade] upgrade installed.") + +/obj/item/vacuum_pack/attackby(obj/item/item, mob/living/user, params) + if(item == nozzle) + remove_nozzle() + return + + if(user.istate & ISTATE_HARM) + return ..() + + if(istype(item, /obj/item/disk/vacuum_upgrade)) + var/obj/item/disk/vacuum_upgrade/upgrade = item + + if(illegal) + to_chat(user, span_warning("[src] has no slot to insert [upgrade] into!")) + return + + if(upgrade.upgrade_type in upgrades) + to_chat(user, span_warning("[src] already has a [upgrade.upgrade_type] upgrade!")) + return + + upgrades += upgrade.upgrade_type + upgrade.on_upgrade(src) + to_chat(user, span_notice("You install a [upgrade.upgrade_type] upgrade into [src].")) + playsound(user, 'sound/machines/click.ogg', 30, TRUE) + qdel(upgrade) + return + + return ..() + +/obj/item/vacuum_pack/ui_action_click(mob/user) + toggle_nozzle(user) + +/obj/item/vacuum_pack/proc/toggle_nozzle(mob/living/user) + if(!istype(user)) + return + + if(user.get_item_by_slot(user.getBackSlot()) != src && check_backpack) + to_chat(user, span_warning("[src] must be worn properly to use!")) + return + + if(user.incapacitated()) + return + + if(QDELETED(nozzle)) + nozzle = new nozzle_type(src) + + if(nozzle in src) + if(!user.put_in_hands(nozzle)) + to_chat(user, span_warning("You need a free hand to hold [nozzle]!")) + return + else + playsound(user, 'sound/mecha/mechmove03.ogg', 75, TRUE) + else + remove_nozzle() + +/obj/item/vacuum_pack/item_action_slot_check(slot, mob/user) + if(slot == user.getBackSlot()) + return TRUE + +/obj/item/vacuum_pack/equipped(mob/user, slot) + . = ..() + if(slot != ITEM_SLOT_BACK) + remove_nozzle() + +/obj/item/vacuum_pack/proc/remove_nozzle() + if(!QDELETED(nozzle)) + if(ismob(nozzle.loc)) + var/mob/wearer = nozzle.loc + wearer.temporarilyRemoveItemFromInventory(nozzle, TRUE) + playsound(loc, 'sound/mecha/mechmove03.ogg', 75, TRUE) + nozzle.forceMove(src) + +/obj/item/vacuum_pack/attack_hand(mob/user, list/modifiers) + if (user.get_item_by_slot(user.getBackSlot()) == src) + toggle_nozzle(user) + else + return ..() + +/obj/item/vacuum_pack/MouseDrop(obj/over_object) + var/mob/wearer = loc + if(istype(wearer) && istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/hand = over_object + wearer.putItemFromInventoryInHandIfPossible(src, hand.held_index) + return ..() + +/obj/item/vacuum_pack/dropped(mob/user) + ..() + remove_nozzle() + +/obj/item/vacuum_nozzle + name = "vacuum pack nozzle" + desc = "A large nozzle attached to a vacuum pack." + icon = 'monkestation/code/modules/slimecore/icons/equipment.dmi' + icon_state = "vacuum_nozzle" + inhand_icon_state = "vacuum_nozzle" + lefthand_file = 'monkestation/code/modules/slimecore/icons/mister_lefthand.dmi' + righthand_file = 'monkestation/code/modules/slimecore/icons/mister_righthand.dmi' + w_class = WEIGHT_CLASS_HUGE + item_flags = NOBLUDGEON | ABSTRACT + slot_flags = NONE + + var/obj/item/vacuum_pack/pack + +/obj/item/vacuum_nozzle/Initialize(mapload) + . = ..() + pack = loc + if(!istype(pack)) + return INITIALIZE_HINT_QDEL + +/obj/item/vacuum_nozzle/doMove(atom/destination) + if(destination && (destination != pack.loc || !ismob(destination))) + if (loc != pack) + to_chat(pack.loc, span_notice("[src] snaps back onto [pack].")) + destination = pack + . = ..() + +/obj/item/vacuum_nozzle/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + + if(pack.modified && pack.ghost_busting && target != pack.ghost_busting && COOLDOWN_FINISHED(pack, busting_throw_cooldown)) + pack.ghost_busting.throw_at(get_turf(target), get_dist(pack.ghost_busting, target), 3, user) + COOLDOWN_START(pack, busting_throw_cooldown, 3 SECONDS) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + if(!(VACUUM_PACK_UPGRADE_BIOMASS in pack.upgrades)) + to_chat(user, span_warning("[pack] does not posess a required upgrade!")) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + if(!pack.linked) + to_chat(user, span_warning("[pack] is not linked to a biomass recycler!")) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + var/list/items = list() + var/list/item_names = list() + + for(var/printable_type in GLOB.biomass_unlocks) + pack.linked.vacuum_printable_types |= printable_type + pack.linked.vacuum_printable_types[printable_type] = GLOB.biomass_unlocks[printable_type] + + for(var/printable_type in pack.linked.vacuum_printable_types) + var/atom/movable/printable = printable_type + var/image/printable_image = image(icon = initial(printable.icon), icon_state = initial(printable.icon_state)) + items += list(initial(printable.name) = printable_image) + item_names[initial(printable.name)] = printable_type + + + var/pick = show_radial_menu(user, src, items, custom_check = FALSE, require_near = TRUE, tooltips = TRUE) + + if(!pick) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + var/spawn_type = item_names[pick] + if(pack.linked.stored_matter < pack.linked.vacuum_printable_types[spawn_type]) + to_chat(user, span_warning("[pack.linked] does not have enough stored biomass for that! It currently has [pack.linked.stored_matter] out of [pack.linked.vacuum_printable_types[spawn_type]] unit\s required.")) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + var/atom/movable/spawned = new spawn_type(user.loc) + spawned.AddComponent(/datum/component/vac_tagged, user) + + pack.linked.stored_matter -= pack.linked.vacuum_printable_types[spawn_type] + playsound(user, 'sound/misc/moist_impact.ogg', 50, TRUE) + spawned.transform = matrix().Scale(0.5) + spawned.alpha = 0 + animate(spawned, alpha = 255, time = 8, easing = QUAD_EASING|EASE_OUT, transform = matrix(), flags = ANIMATION_PARALLEL) + + if(isturf(user.loc)) + ADD_TRAIT(spawned, VACPACK_THROW, "vacpack") + spawned.pass_flags |= PASSMOB + spawned.throw_at(target, min(get_dist(user, target), (pack.illegal ? 5 : 11)), 1, user, gentle = TRUE) //Gentle so eggs have 50% instead of 12.5% to spawn a chick + + user.visible_message(span_warning("[user] shoots [spawned] out their [src]!"), span_notice("You fabricate and shoot [spawned] out of your [src].")) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/item/vacuum_nozzle/afterattack(atom/movable/target, mob/user, proximity, params) + . = ..() + if(pack.ghost_busting) + return + + if(pack.modified && !pack.ghost_busting && isrevenant(target) && get_dist(user, target) < 4) + start_busting(target, user) + return + + if(istype(target, /obj/machinery/biomass_recycler) && target.Adjacent(user)) + if(!(VACUUM_PACK_UPGRADE_BIOMASS in pack.upgrades)) + to_chat(user, span_warning("[pack] does not posess a required upgrade!")) + return + pack.linked = target + to_chat(user, span_notice("You link [pack] to [target].")) + return + + if(pack.linked) + var/can_recycle + for(var/recycable_type in pack.linked.recyclable_types) + if(istype(target, recycable_type)) + can_recycle = recycable_type + break + + var/target_stat = FALSE + if(isliving(target)) + var/mob/living/living_target = target + target_stat = living_target.stat + + if(can_recycle && (!is_type_in_typecache(target, pack.storable_objects) || target_stat != CONSCIOUS)) + if(!(VACUUM_PACK_UPGRADE_BIOMASS in pack.upgrades)) + to_chat(user, span_warning("[pack] does not posess a required upgrade!")) + return + + if(!pack.linked) + to_chat(user, span_warning("[pack] is not linked to a biomass recycler!")) + return + + if(target_stat == CONSCIOUS) + to_chat(user, span_warning("[target] is struggling far too much for you to suck it in!")) + return + + if(isliving(target)) + var/mob/living/living = target + if(living.buckled) + living.buckled.unbuckle_mob(target, TRUE) + target.unbuckle_all_mobs(TRUE) + + if(!do_after(user, pack.speed, target, timed_action_flags = IGNORE_TARGET_LOC_CHANGE)) + return + + playsound(src, 'sound/effects/refill.ogg', 50, TRUE) + var/matrix/animation_matrix = matrix() + animation_matrix.Scale(0.5) + animation_matrix.Translate((user.x - target.x) * 32, (user.y - target.y) * 32) + animate(target, alpha = 0, time = 8, easing = QUAD_EASING|EASE_IN, transform = animation_matrix, flags = ANIMATION_PARALLEL) + sleep(8) + user.visible_message(span_warning("[user] sucks [target] into their [pack]!"), span_notice("You successfully suck [target] into your [src] and recycle it.")) + qdel(target) + playsound(user, 'sound/machines/juicer.ogg', 50, TRUE) + pack.linked.use_power(500) + pack.linked.stored_matter += pack.linked.cube_production * pack.linked.recyclable_types[can_recycle] + return + + if(is_type_in_typecache(target, pack.storable_objects)) + if(get_dist(user, target) > pack.range) + to_chat(user, span_warning("[target] is too far away!")) + return + + if(!(target in view(user, pack.range))) + to_chat(user, span_warning("You can't reach [target]!")) + return + + if(target.anchored || target.move_resist > MOVE_FORCE_STRONG) + to_chat(user, span_warning("You can't manage to suck [target] in!")) + return + + if(isslime(target)) + var/mob/living/basic/slime/slime = target + if(HAS_TRAIT(slime, TRAIT_SLIME_RABID) && !pack.illegal && !(VACUUM_PACK_UPGRADE_PACIFY in pack.upgrades)) + to_chat(user, span_warning("[slime] is wiggling far too much for you to suck it in!")) + return + + if(LAZYLEN(pack.stored) >= pack.capacity) + to_chat(user, span_warning("[pack] is already filled to the brim!")) + return + + if(!do_after(user, pack.speed, target, timed_action_flags = IGNORE_TARGET_LOC_CHANGE|IGNORE_USER_LOC_CHANGE, extra_checks = CALLBACK(src, .proc/suck_checks, target, user))) + return + + if(SEND_SIGNAL(target, COMSIG_LIVING_VACUUM_PRESUCK, src, user) & COMPONENT_LIVING_VACUUM_CANCEL_SUCK) + return + + suck_victim(target, user) + return + + if(LAZYLEN(pack.stored) == 0) + to_chat(user, span_warning("[pack] is empty!")) + return + + var/mob/living/spewed + + if(pack.give_choice) + var/list/items = list() + var/list/items_stored = list() + for(var/atom/movable/stored_obj in pack.stored) + var/image/stored_image = image(icon = stored_obj.icon, icon_state = stored_obj.icon_state) + stored_image.color = stored_obj.color + items += list(stored_obj.name = stored_image) + items_stored[stored_obj.name] = stored_obj + + var/pick = show_radial_menu(user, src, items, custom_check = FALSE, require_near = TRUE, tooltips = TRUE) + + if(!pick) + return + spewed = items_stored[pick] + else + spewed = pick(pack.stored) + + playsound(user, 'sound/misc/moist_impact.ogg', 50, TRUE) + spewed.transform = matrix().Scale(0.5) + spewed.alpha = 0 + animate(spewed, alpha = 255, time = 8, easing = QUAD_EASING|EASE_OUT, transform = matrix(), flags = ANIMATION_PARALLEL) + spewed.forceMove(user.loc) + + if(isturf(user.loc)) + ADD_TRAIT(spewed, VACPACK_THROW, "vacpack") + spewed.pass_flags |= PASSMOB + spewed.throw_at(target, min(get_dist(user, target), (pack.illegal ? 5 : 11)), 1, user) + if(prob(99) && spewed.stat != DEAD) + playsound(spewed, 'sound/misc/woohoo.ogg', 50, TRUE) + + if(istype(spewed, /mob/living/basic/slime)) + var/mob/living/basic/slime/slime = spewed + slime.slime_flags &= ~STORED_SLIME + if(slime.ai_controller) + slime.ai_controller.set_ai_status(AI_STATUS_ON) + if(VACUUM_PACK_UPGRADE_STASIS in pack.upgrades) + REMOVE_TRAIT(slime, TRAIT_SLIME_STASIS, "vacuum_pack_stasis") + + if(pack.illegal) + + ADD_TRAIT(slime, TRAIT_SLIME_RABID, "syndicate_slimepack") + + user.changeNext_move(CLICK_CD_RAPID) //Like a machine gun + + else if(VACUUM_PACK_UPGRADE_PACIFY in pack.upgrades) + REMOVE_TRAIT(slime, TRAIT_SLIME_RABID, null) + + + pack.stored -= spewed + user.visible_message(span_warning("[user] shoots [spewed] out their [src]!"), span_notice("You shoot [spewed] out of your [src].")) + +/obj/item/vacuum_nozzle/proc/suck_checks(atom/movable/target, mob/user) + if(get_dist(user, target) > pack.range) + return FALSE + + if(!(target in view(user, pack.range))) + return FALSE + + if(target.anchored || target.move_resist > MOVE_FORCE_STRONG) + return FALSE + + if(isslime(target)) + var/mob/living/basic/slime/slime = target + if(HAS_TRAIT(slime, TRAIT_SLIME_RABID) && !pack.illegal && !(VACUUM_PACK_UPGRADE_PACIFY in pack.upgrades)) + return FALSE + + if(LAZYLEN(pack.stored) >= pack.capacity) + return FALSE + + return TRUE + +/obj/item/vacuum_nozzle/proc/suck_victim(atom/movable/target, mob/user, silent = FALSE) + if(!suck_checks(target, user)) + return + + if(!silent) + playsound(user, 'sound/effects/refill.ogg', 50, TRUE) + var/matrix/animation_matrix = target.transform + animation_matrix.Scale(0.5) + animation_matrix.Translate((user.x - target.x) * 32, (user.y - target.y) * 32) + animate(target, alpha = 0, time = 8, easing = QUAD_EASING|EASE_IN, transform = animation_matrix, flags = ANIMATION_PARALLEL) + sleep(8) + target.unbuckle_all_mobs(TRUE) + target.forceMove(pack) + pack.stored += target + if((VACUUM_PACK_UPGRADE_STASIS in pack.upgrades) && isslime(target)) + var/mob/living/basic/slime/slime = target + ADD_TRAIT(slime, TRAIT_SLIME_STASIS, "vacuum_pack_stasis") + SEND_SIGNAL(target, COMSIG_ATOM_SUCKED) + if(!silent) + user.visible_message(span_warning("[user] sucks [target] into their [pack]!"), span_notice("You successfully suck [target] into your [src].")) + var/mob/living/basic/slime/slime = target + slime.slime_flags |= STORED_SLIME + if(slime.ai_controller) + slime.ai_controller.set_ai_status(AI_STATUS_OFF) + slime.ai_controller.set_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET, null) + +/obj/item/vacuum_nozzle/proc/start_busting(mob/living/basic/revenant/revenant, mob/living/user) + revenant.visible_message(span_warning("[user] starts sucking [revenant] into their [src]!"), span_userdanger("You are being sucked into [user]'s [src]!")) + pack.ghost_busting = revenant + pack.ghost_buster = user + pack.busting_beam = user.Beam(revenant, icon_state="drain_life") + bust_the_ghost() + +/obj/item/vacuum_nozzle/proc/bust_the_ghost() + while(check_busting()) + if(!do_after(pack.ghost_buster, 0.5 SECONDS, target = pack.ghost_busting, extra_checks = CALLBACK(src, .proc/check_busting), timed_action_flags = IGNORE_TARGET_LOC_CHANGE|IGNORE_USER_LOC_CHANGE)) + pack.ghost_busting = null + pack.ghost_buster = null + QDEL_NULL(pack.busting_beam) + return + + //pack.ghost_busting.adjustHealth(5) + //pack.ghost_busting.reveal(0.5 SECONDS, TRUE) + +/obj/item/vacuum_nozzle/proc/check_busting() + if(!pack.ghost_busting || !pack.ghost_busting.loc || QDELETED(pack.ghost_busting)) + return FALSE + + if(!pack.ghost_buster || !pack.ghost_buster.loc || QDELETED(pack.ghost_buster)) + return FALSE + + if(loc != pack.ghost_buster) + return FALSE + + if(get_dist(pack.ghost_buster, pack.ghost_busting) > 3) + return FALSE + + if(pack.ghost_busting.essence <= 0) //Means that the revenant is dead + return FALSE + + return TRUE + +/obj/item/disk/vacuum_upgrade + name = "vacuum pack upgrade disk" + desc = "An upgrade disk for a backpack vacuum xenofauna storage." + icon_state = "rndmajordisk" + var/upgrade_type + +/obj/item/disk/vacuum_upgrade/proc/on_upgrade(obj/item/vacuum_pack/pack) + +/obj/item/disk/vacuum_upgrade/stasis + name = "vacuum pack stasis upgrade disk" + desc = "An upgrade disk for a backpack vacuum xenofauna storage that allows it to keep all slimes inside of it in stasis." + upgrade_type = VACUUM_PACK_UPGRADE_STASIS + +/obj/item/disk/vacuum_upgrade/healing + name = "vacuum pack healing upgrade disk" + desc = "An upgrade disk for a backpack vacuum xenofauna storage that makes the pack passively heal all the slimes inside of it." + upgrade_type = VACUUM_PACK_UPGRADE_HEALING + +/obj/item/disk/vacuum_upgrade/healing/on_upgrade(obj/item/vacuum_pack/pack) + START_PROCESSING(SSobj, pack) + +/obj/item/disk/vacuum_upgrade/capacity + name = "vacuum pack capacity upgrade disk" + desc = "An upgrade disk for a backpack vacuum xenofauna storage that expands it's internal slime storage." + upgrade_type = VACUUM_PACK_UPGRADE_CAPACITY + +/obj/item/disk/vacuum_upgrade/capacity/on_upgrade(obj/item/vacuum_pack/pack) + pack.capacity = UPGRADED_VACUUM_PACK_CAPACITY + +/obj/item/disk/vacuum_upgrade/range + name = "vacuum pack range upgrade disk" + desc = "An upgrade disk for a backpack vacuum xenofauna storage that strengthens it's pump and allows it to reach further." + upgrade_type = VACUUM_PACK_UPGRADE_RANGE + +/obj/item/disk/vacuum_upgrade/range/on_upgrade(obj/item/vacuum_pack/pack) + pack.range = UPGRADED_VACUUM_PACK_RANGE + +/obj/item/disk/vacuum_upgrade/speed + name = "vacuum pack speed upgrade disk" + desc = "An upgrade disk for a backpack vacuum xenofauna storage that upgrades it's motor and allows it to suck slimes up faster." + upgrade_type = VACUUM_PACK_UPGRADE_SPEED + +/obj/item/disk/vacuum_upgrade/speed/on_upgrade(obj/item/vacuum_pack/pack) + pack.speed = UPGRADED_VACUUM_PACK_SPEED + +/obj/item/disk/vacuum_upgrade/pacification + name = "vacuum pack pacification upgrade disk" + desc = "An upgrade disk for a backpack vacuum xenofauna storage that allows it to pacify all stored slimes." + upgrade_type = VACUUM_PACK_UPGRADE_PACIFY + +/obj/item/disk/vacuum_upgrade/biomass + name = "vacuum pack biomass printer upgrade disk" + desc = "An upgrade disk for a backpack vacuum xenofauna storage that allows it to automatically recycle dead biomass and make living creatures on right click." + upgrade_type = VACUUM_PACK_UPGRADE_BIOMASS + +/obj/item/vacuum_pack/syndicate + name = "modified backpack xenofauna storage" + desc = "An illegally modified vacuum backpack xenofauna storage that has much more power, capacity and will make every slime it shoots out rabid." + icon_state = "vacuum_pack_syndicate" + inhand_icon_state = "vacuum_pack_syndicate" + range = ILLEGAL_VACUUM_PACK_RANGE + capacity = ILLEGAL_VACUUM_PACK_CAPACITY + speed = ILLEGAL_VACUUM_PACK_SPEED + illegal = TRUE + nozzle_type = /obj/item/vacuum_nozzle/syndicate + upgrades = list(VACUUM_PACK_UPGRADE_HEALING, VACUUM_PACK_UPGRADE_STASIS, VACUUM_PACK_UPGRADE_BIOMASS) + give_choice = FALSE + +/obj/item/vacuum_nozzle/syndicate + name = "modified vacuum pack nozzle" + desc = "A large black and red nozzle attached to a vacuum pack." + icon_state = "vacuum_nozzle_syndicate" + inhand_icon_state = "vacuum_nozzle_syndicate" + + +#undef NORMAL_VACUUM_PACK_CAPACITY +#undef UPGRADED_VACUUM_PACK_CAPACITY +#undef ILLEGAL_VACUUM_PACK_CAPACITY + +#undef NORMAL_VACUUM_PACK_RANGE +#undef UPGRADED_VACUUM_PACK_RANGE +#undef ILLEGAL_VACUUM_PACK_RANGE + +#undef NORMAL_VACUUM_PACK_SPEED +#undef UPGRADED_VACUUM_PACK_SPEED +#undef ILLEGAL_VACUUM_PACK_SPEED + +#undef VACUUM_PACK_UPGRADE_STASIS +#undef VACUUM_PACK_UPGRADE_HEALING +#undef VACUUM_PACK_UPGRADE_CAPACITY +#undef VACUUM_PACK_UPGRADE_RANGE +#undef VACUUM_PACK_UPGRADE_SPEED +#undef VACUUM_PACK_UPGRADE_PACIFY +#undef VACUUM_PACK_UPGRADE_BIOMASS diff --git a/monkestation/code/modules/slimecore/machines/biomass_recycler.dm b/monkestation/code/modules/slimecore/machines/biomass_recycler.dm new file mode 100644 index 000000000000..be89b669ffe2 --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/biomass_recycler.dm @@ -0,0 +1,181 @@ +GLOBAL_LIST_INIT(biomass_unlocks, list()) + +/obj/machinery/biomass_recycler + name = "biomass recycler" + desc = "A machine used for recycling dead biomass and fabricating dehydrated creatures and eggs." + icon = 'icons/obj/kitchen.dmi' + icon_state = "grinder" + layer = BELOW_OBJ_LAYER + density = TRUE + circuit = /obj/item/circuitboard/machine/biomass_recycler + var/stored_matter = 0 + var/cube_production = 0.2 + + var/static/list/recyclable_types = list(/mob/living/carbon/human/species/monkey = 1) + var/list/printable_types = list(/obj/item/stack/biomass = 1, /obj/item/food/monkeycube = 1) + var/list/vacuum_printable_types = list(/mob/living/carbon/human/species/monkey = 1) + +/obj/machinery/biomass_recycler/RefreshParts() //Ranges from 0.2 to 0.8 per monkey recycled + . = ..() + cube_production = 0.2 + for(var/obj/item/stock_parts/manipulator/B in component_parts) + cube_production += B.rating * 0.1 + for(var/obj/item/stock_parts/matter_bin/M in component_parts) + cube_production += M.rating * 0.1 + +/obj/machinery/biomass_recycler/examine(mob/user) + . = ..() + if(in_range(user, src) || isobserver(user)) + . += span_notice("The status display reads: Recycles [cube_production] biomass units per unit inserted.") + +/obj/machinery/biomass_recycler/wrench_act(mob/living/user, obj/item/tool) + . = ..() + if(default_unfasten_wrench(user, tool)) + power_change() + return TOOL_ACT_TOOLTYPE_SUCCESS + +/obj/machinery/biomass_recycler/attackby(obj/item/O, mob/user, params) + if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", O)) + return + + if(default_pry_open(O)) + return + + if(default_deconstruction_crowbar(O)) + return + + if(machine_stat) //NOPOWER etc + return + + if(HAS_TRAIT(O, TRAIT_NODROP)) + return + + if(istype(O, /obj/item/stack/biomass)) + var/obj/item/stack/biomass/biomass = O + to_chat(user, span_notice("You insert [biomass.amount] cube\s of biomass into [src].")) + stored_matter += biomass.amount + qdel(biomass) + return + + var/can_recycle + for(var/recycable_type in recyclable_types) + if(istype(O, recycable_type)) + can_recycle = recycable_type + break + + if(can_recycle) + recycle(O, user, can_recycle) + +/obj/machinery/biomass_recycler/MouseDrop_T(mob/living/target, mob/living/user) + if(!istype(target)) + return + + var/can_recycle + for(var/recycable_type in recyclable_types) + if(istype(target, recycable_type)) + can_recycle = recycable_type + break + + if(can_recycle) + stuff_creature_in(target, user, can_recycle) + +/obj/machinery/biomass_recycler/proc/stuff_creature_in(mob/living/target, mob/living/user, recycable_type) + if(!istype(target)) + return + if(target.stat == CONSCIOUS) + to_chat(user, span_warning("[target] is struggling far too much to put it in the recycler.")) + return + if(target.buckled || target.has_buckled_mobs()) + to_chat(user, span_warning("[target] is attached to something.")) + return + + recycle(target, user, recycable_type) + +/obj/machinery/biomass_recycler/proc/recycle(atom/movable/target, mob/living/user, recycable_type) + qdel(target) + to_chat(user, span_notice("You stuff [target] into the machine.")) + playsound(src.loc, 'sound/machines/juicer.ogg', 50, TRUE) + var/offset = prob(50) ? -2 : 2 + animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking + use_power(active_power_usage) + stored_matter += cube_production * recyclable_types[recycable_type] + addtimer(VARSET_CALLBACK(src, pixel_x, base_pixel_x)) + addtimer(CALLBACK(GLOBAL_PROC, /proc/to_chat, user, span_notice("The machine now has [stored_matter] unit\s of biomass stored."))) + +/obj/machinery/biomass_recycler/interact(mob/user) + var/list/items = list() + var/list/item_names = list() + for(var/printable_type in GLOB.biomass_unlocks) + printable_types |= printable_type + printable_types[printable_type] = GLOB.biomass_unlocks[printable_type] + + recyclable_types |= list(printable_type = 1) + + for(var/printable_type in printable_types) + var/atom/movable/printable = printable_type + var/image/printable_image = image(icon = initial(printable.icon), icon_state = initial(printable.icon_state)) + items += list(initial(printable.name) = printable_image) + item_names[initial(printable.name)] = printable_type + + var/pick = show_radial_menu(user, src, items, custom_check = FALSE, require_near = TRUE, tooltips = TRUE) + + if(!pick) + return + + var/spawn_type = item_names[pick] + if(stored_matter < printable_types[spawn_type]) + to_chat(user, span_warning("[src] does not have enough stored biomass for that! It currently has [stored_matter] out of [printable_types[spawn_type]] unit\s required.")) + return + + var/spawned = new spawn_type(user.loc) + to_chat(user, span_notice("The machine hisses loudly as it condenses the biomass. After a moment, it dispenses a brand new [spawned].")) + playsound(src.loc, 'sound/machines/hiss.ogg', 50, TRUE) + stored_matter -= printable_types[spawn_type] + to_chat(user, span_notice("The machine's display flashes that it has [stored_matter] unit\s of biomass left.")) + +/obj/item/stack/biomass + name = "biomass cubes" + desc = "A few cubes of green biomass." + icon = 'monkestation/code/modules/slimecore/icons/stack_objects.dmi' + icon_state = "biomass" + base_icon_state = "biomass" + max_amount = 5 + singular_name = "biomass cube" + merge_type = /obj/item/stack/biomass + flags_1 = CONDUCT_1 + +/obj/item/stack/biomass/update_icon_state() + . = ..() + icon_state = (amount == 1) ? "[base_icon_state]" : "[base_icon_state]_[min(amount, 5)]" + +/obj/item/disk/biomass_upgrade + name = "biomass recycler upgrade disk" + desc = "An upgrade disk for biomass recycler." + icon_state = "rndmajordisk" + var/list/printable_types = list() + var/list/vacuum_printable_types = list() + +/obj/item/disk/biomass_upgrade/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + if(istype(target, /obj/machinery/biomass_recycler)) + var/obj/machinery/biomass_recycler/recycler = target + to_chat(user, span_notice("You install [src] into [recycler].")) + playsound(user, 'sound/machines/click.ogg', 30, TRUE) + + for(var/print_type in printable_types) + recycler.printable_types[print_type] = printable_types[print_type] + + for(var/print_type in vacuum_printable_types) + recycler.vacuum_printable_types[print_type] = vacuum_printable_types[print_type] + +/* +/obj/item/disk/biomass_upgrade/wobble + name = "\"Wobble Chicken\" biomass recycler upgrade disk" + printable_types = list(/obj/item/food/wobble_egg = 0.75) + vacuum_printable_types = list(/obj/item/food/wobble_egg = 0.75) +*/ + +/obj/item/disk/biomass_upgrade/rockroach + name = "\"Rockroach\" biomass recycler upgrade disk" + printable_types = list(/mob/living/basic/cockroach/rockroach = 0.4) + vacuum_printable_types = list(/mob/living/basic/cockroach/rockroach = 0.4) diff --git a/monkestation/code/modules/slimecore/machines/extract_requestor.dm b/monkestation/code/modules/slimecore/machines/extract_requestor.dm new file mode 100644 index 000000000000..1e254d48b130 --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/extract_requestor.dm @@ -0,0 +1,180 @@ +/obj/machinery/slime_extract_requestor + name = "extract requestor pad" + desc = "A tall device with a hole for retrieving slime extracts." + icon = 'monkestation/code/modules/slimecore/icons/machinery.dmi' + icon_state = "civilian_pad" + base_icon_state = "civilian_pad" + density = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 10 + active_power_usage = 2000 + circuit = /obj/item/circuitboard/machine/slime_extract_requestor + var/obj/machinery/computer/slime_market/console + var/list/current_requests = list() + + var/static/list/extracts = list() + var/static/list/name_to_path = list() + + +/obj/machinery/slime_extract_requestor/Initialize(mapload) + . = ..() + if(GLOB.default_slime_market) + console = GLOB.default_slime_market + console.request_pad = src + + if(!length(extracts)) + for(var/obj/item/slime_extract/extract as anything in subtypesof(/obj/item/slime_extract)) + var/obj/item/slime_extract/new_extract = new extract + extracts |= list("[new_extract.name]" = image(icon = new_extract.icon, icon_state = new_extract.icon_state)) + name_to_path |= list("[new_extract.name]" = new_extract.type) + qdel(new_extract) + +/obj/machinery/slime_extract_requestor/attack_hand(mob/living/user, list/modifiers) + . = ..() + if(!console) + to_chat(user, span_warning("[src] does not have a console linked to it!")) + return + var/obj/item/card/id/card = user.get_idcard(TRUE) + if(!card) + to_chat(user, span_warning("Unable to locate an ID card!")) + return + + if(check_in_requests(card)) + if(check_finished_request(card)) + return + say("You already have an ongoing request, would you like to cancel it?") + if(tgui_alert(user, "You already have an ongoing request, would you like to cancel it?", "[name]", list("Yes", "No")) == "Yes") + cancel_request(card) + return + create_request(user, card) + +/obj/machinery/slime_extract_requestor/multitool_act(mob/living/user, obj/item/tool) + if(!panel_open) + return + if(!multitool_check_buffer(user, tool)) + return + var/obj/item/multitool/multitool = tool + multitool.buffer = src + to_chat(user, span_notice("You save the data in the [multitool.name]'s buffer.")) + return TOOL_ACT_TOOLTYPE_SUCCESS + +/obj/machinery/slime_extract_requestor/proc/check_in_requests(obj/item/card/id/card) + for(var/datum/extract_request_data/listed_request as anything in current_requests) + if(!(listed_request.host_card == card)) + continue + return TRUE + return FALSE + +/obj/machinery/slime_extract_requestor/proc/check_finished_request(obj/item/card/id/card) + for(var/datum/extract_request_data/listed_request as anything in current_requests) + if(!(listed_request.host_card == card)) + continue + if(listed_request.ready_for_pickup) + var/obj/item/storage/box/box = new(loc) + for(var/i in 1 to listed_request.extracts_needed) + new listed_request.extract_path(box) + current_requests -= listed_request + listed_request.finish_request(console) + qdel(listed_request) + return TRUE + return FALSE + +/obj/machinery/slime_extract_requestor/proc/cancel_request(obj/item/card/id/card) + for(var/datum/extract_request_data/listed_request as anything in current_requests) + if(!(listed_request.host_card == card)) + continue + current_requests -= listed_request + listed_request.cancel_request_early(console) + qdel(listed_request) + +/obj/machinery/slime_extract_requestor/proc/create_request(mob/user, obj/item/card/id/card) + var/choice = show_radial_menu(user, src, extracts, require_near = TRUE, tooltips = TRUE) + + if(!(choice in name_to_path)) + return + + var/number_choice = tgui_input_number(user, "How many extracts do you want?", "[name]", default = 1, min_value = 1, round_value = 1, max_value = 15) + if(!number_choice) + return + + var/payout = tgui_input_number(user, "How much will the payout be for this request?", "[name]", default = 0, min_value = 0, round_value = 1, max_value = card.registered_account.account_balance) + if(payout) + card.registered_account.adjust_money(-payout, "Slime Extract Request") + + var/datum/extract_request_data/request = new + + request.host_card = card + request.extract_path = name_to_path[choice] + request.extracts_needed = number_choice + request.payout = payout + request.linked_console = console + request.request_name = "[card.registered_name]'s [choice] request ([number_choice])" + request.on_creation() + + var/obj/item/slime_extract/request_extract = name_to_path[choice] + request.radial_data = list("[request.request_name]" = image(icon = initial(request_extract.icon), icon_state = initial(request_extract.icon_state))) + + current_requests += request + console.say("A new request has been made.") + +/datum/extract_request_data + ///the name of our request + var/request_name + ///our linked_console purely for when something is early deleted + var/obj/machinery/computer/slime_market/linked_console + ///the card from which the request was made + var/obj/item/card/id/host_card + ///the extract we spawn + var/extract_path + ///the amount of extracts we need + var/extracts_needed = 1 + ///the payoff sent to the scientist that finished the bounty + var/payout = 0 + //radial information + var/list/radial_data = list() + ///amount of extracts given + var/extracts_given = 0 + ///finished request + var/ready_for_pickup = FALSE + +/datum/extract_request_data/proc/on_creation() + RegisterSignal(host_card, COMSIG_QDELETING, PROC_REF(end_request_qdeleted)) + +/datum/extract_request_data/Destroy(force, ...) + UnregisterSignal(host_card, COMSIG_QDELETING) + host_card = null + linked_console = null + QDEL_LIST(radial_data) + . = ..() + +/datum/extract_request_data/proc/end_request_qdeleted() + SIGNAL_HANDLER + + linked_console.say("[host_card.registered_name]'s request has been cancelled.") + linked_console.return_extracts(extract_path, extracts_given) + linked_console.stored_credits += payout * 0.5 + qdel(src) + +/datum/extract_request_data/proc/cancel_request_early(obj/machinery/computer/slime_market/console) + console.say("[host_card.registered_name]'s request has been cancelled.") + console.return_extracts(extract_path, extracts_given) + if(payout) + host_card.registered_account.adjust_money(payout * 0.5, "Slime Extract Request Cancelled Early") + console.stored_credits += payout * 0.5 + qdel(src) + +/datum/extract_request_data/proc/finish_request(obj/machinery/computer/slime_market/console) + console.say("[host_card.registered_name]'s request has been collected.") + console.stored_credits += payout + SSresearch.xenobio_points += payout * 3 + qdel(src) + + +/datum/extract_request_data/proc/add_extract() + extracts_given++ + if(extracts_given >= extracts_needed) + ready_for_pickup = TRUE + declare_ready() + +/datum/extract_request_data/proc/declare_ready() + host_card.say("Extract Request has been completed, please come collect your request.") diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/ooze_compressor.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/ooze_compressor.dm new file mode 100644 index 000000000000..8baef0b70d46 --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/ooze_compressor.dm @@ -0,0 +1,214 @@ +#define CROSSBREED_BASE_PATHS list(\ +/datum/compressor_recipe/crossbreed/burning,\ +/datum/compressor_recipe/crossbreed/charged,\ +/datum/compressor_recipe/crossbreed/chilling,\ +/datum/compressor_recipe/crossbreed/consuming,\ +/datum/compressor_recipe/crossbreed/industrial,\ +/datum/compressor_recipe/crossbreed/prismatic,\ +/datum/compressor_recipe/crossbreed/regenerative,\ +/datum/compressor_recipe/crossbreed/reproductive,\ +/datum/compressor_recipe/crossbreed/selfsustaining,\ +/datum/compressor_recipe/crossbreed/stabilized,\ +) + +/obj/machinery/plumbing/ooze_compressor + name = "ooze compressor" + desc = "Compresses ooze into extracts." + + icon = 'monkestation/code/modules/slimecore/icons/machinery.dmi' + base_icon_state = "cross_compressor" + icon_state = "cross_compressor" + category="Distribution" + + anchored = TRUE + + idle_power_usage = 10 + active_power_usage = 1000 + + buffer = 5000 + reagent_flags = NO_REACT + + var/compressing = FALSE + var/repeat_recipe = FALSE + + var/list/reagents_for_recipe = list() + var/datum/compressor_recipe/current_recipe + + var/static/list/recipe_choices = list() + var/static/list/base_choices = list() + var/static/list/cross_breed_choices = list() + var/static/list/choice_to_datum = list() + +/obj/machinery/plumbing/ooze_compressor/Initialize(mapload, bolt, layer) + . = ..() + if(!length(recipe_choices)) + for(var/datum/compressor_recipe/listed as anything in (subtypesof(/datum/compressor_recipe) - typesof(/datum/compressor_recipe/crossbreed))) + var/datum/compressor_recipe/stored_recipe = new listed + recipe_choices |= list("[initial(stored_recipe.output_item.name)]" = image(icon = initial(stored_recipe.output_item.icon), icon_state = initial(stored_recipe.output_item.icon_state))) + choice_to_datum |= list("[initial(stored_recipe.output_item.name)]" = stored_recipe) + + if(!length(cross_breed_choices)) + for(var/datum/compressor_recipe/listed as anything in CROSSBREED_BASE_PATHS) + var/datum/compressor_recipe/stored_recipe = new listed + var/obj/item/slimecross/crossbreed = stored_recipe.output_item + var/image/new_image = image(icon = initial(stored_recipe.output_item.icon), icon_state = initial(stored_recipe.output_item.icon_state)) + new_image.color = return_color_from_string(initial(crossbreed.colour)) + if(initial(crossbreed.colour) == "rainbow") + new_image.rainbow_effect() + base_choices |= list("[initial(stored_recipe.output_item.name)]" = new_image) + cross_breed_choices |= list("[initial(stored_recipe.output_item.name)]" = list()) + + for(var/datum/compressor_recipe/subtype as anything in subtypesof(listed)) + var/datum/compressor_recipe/subtype_stored = new subtype + var/obj/item/slimecross/subtype_breed = subtype_stored.output_item + var/image/subtype_image = image(icon = initial(subtype_stored.output_item.icon), icon_state = initial(subtype_stored.output_item.icon_state)) + subtype_image.color = return_color_from_string(initial(subtype_breed.colour)) + if(initial(subtype_breed.colour) == "rainbow") + subtype_image.rainbow_effect() + + cross_breed_choices["[initial(stored_recipe.output_item.name)]"] |= list("[initial(subtype_breed.colour)] [initial(subtype_stored.output_item.name)]" = subtype_image) + choice_to_datum |= list("[initial(subtype_breed.colour)] [initial(subtype_stored.output_item.name)]" = subtype_stored) + + AddComponent(/datum/component/plumbing/ooze_compressor, bolt, layer) + register_context() + +/obj/machinery/plumbing/ooze_compressor/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_ALT_LMB] = "Toggle Repeated Extract Compression" + context[SCREENTIP_CONTEXT_LMB] = "Select a normal extract to make" + context[SCREENTIP_CONTEXT_RMB] = "Select a crossbreed to make" + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/plumbing/ooze_compressor/create_reagents(max_vol, flags) + . = ..() + RegisterSignals(reagents, list(COMSIG_REAGENTS_REM_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_CLEAR_REAGENTS, COMSIG_REAGENTS_REACTED), PROC_REF(on_reagent_change)) + RegisterSignal(reagents, COMSIG_QDELETING, PROC_REF(on_reagents_del)) + +/obj/machinery/plumbing/ooze_compressor/update_icon_state() + . = ..() + if(compressing) + icon_state = "cross_compressor_running" + else + icon_state = base_icon_state + +/obj/machinery/plumbing/ooze_compressor/examine(mob/user) + . = ..() + if(!current_recipe) + return + for(var/datum/reagent/reagent as anything in current_recipe.required_oozes) + var/reagent_volume = 0 + for(var/datum/reagent/listed_reagent as anything in reagents.reagent_list) + if(listed_reagent.type != reagent) + continue + reagent_volume = listed_reagent.volume + . += span_notice("[reagent_volume] out of [current_recipe.required_oozes[reagent]] units of [initial(reagent.name)].") + reagent_volume = 0 + +/obj/machinery/plumbing/ooze_compressor/update_overlays() + . = ..() + if(length(reagents.reagent_list) >= 1 && length(reagents_for_recipe) >= 1) + var/needed_reagents = reagents_for_recipe[1] + var/datum/reagent/first_reagent = reagents.reagent_list[1] + var/filled_precent = first_reagent.volume / reagents_for_recipe[needed_reagents] + + var/state = "quarter" + switch(filled_precent) + if(0.5 to 0.99) + state = "half" + if(1 to INFINITY) + state = "full" + + var/mutable_appearance/right_side = mutable_appearance(icon, "cross_compressor_right_[state]", layer, src) + right_side.color = first_reagent.color + . += right_side + + if(length(reagents.reagent_list) >= 2 && length(reagents_for_recipe) >= 2) + var/needed_reagents = reagents_for_recipe[2] + var/datum/reagent/first_reagent = reagents.reagent_list[2] + var/filled_precent = first_reagent.volume / reagents_for_recipe[needed_reagents] + + var/state = "quarter" + switch(filled_precent) + if(0.5 to 0.99) + state = "half" + if(1 to INFINITY) + state = "full" + + var/mutable_appearance/left_side = mutable_appearance(icon, "cross_compressor_left_[state]", layer, src) + left_side.color = first_reagent.color + . += left_side + + . += mutable_appearance(icon, "cross_compressor_tank", layer + 0.01, src) + +/// Handles properly detaching signal hooks. +/obj/machinery/plumbing/ooze_compressor/proc/on_reagents_del(datum/reagents/reagents) + SIGNAL_HANDLER + UnregisterSignal(reagents, list(COMSIG_REAGENTS_REM_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_CLEAR_REAGENTS, COMSIG_REAGENTS_REACTED, COMSIG_QDELETING)) + return NONE + +/// Handles stopping the emptying process when the chamber empties. +/obj/machinery/plumbing/ooze_compressor/proc/on_reagent_change(datum/reagents/holder, ...) + SIGNAL_HANDLER + update_appearance() + if(holder.total_volume == 0 && !compressing) //we were emptying, but now we aren't + holder.flags |= NO_REACT + return NONE + +/obj/machinery/plumbing/ooze_compressor/process(seconds_per_tick) + if(!compressing) + use_power(active_power_usage * seconds_per_tick) + +/obj/machinery/plumbing/ooze_compressor/proc/compress_recipe() + compressing = TRUE + update_appearance() + if(!repeat_recipe) + reagents_for_recipe = list() + addtimer(CALLBACK(src, PROC_REF(finish_compressing)), 3 SECONDS) + +/obj/machinery/plumbing/ooze_compressor/proc/finish_compressing() + for(var/i in 1 to current_recipe.created_amount) + new current_recipe.output_item(loc) + compressing = FALSE + update_appearance() + reagents.clear_reagents() + if(!repeat_recipe) + current_recipe = null + +/obj/machinery/plumbing/ooze_compressor/attack_hand(mob/living/user, list/modifiers) + . = ..() + if(change_recipe(user)) + reagents.clear_reagents() + +/obj/machinery/plumbing/ooze_compressor/attack_hand_secondary(mob/living/user, list/modifiers) + . = ..() + if(change_recipe(user, TRUE)) + reagents.clear_reagents() + +/obj/machinery/plumbing/ooze_compressor/AltClick(mob/user) + if(anchored) + visible_message(span_notice("[user] presses a button turning the repeat recipe system [repeat_recipe ? "Off" : "On"]")) + repeat_recipe = !repeat_recipe + return TRUE + . = ..() + +/obj/machinery/plumbing/ooze_compressor/proc/change_recipe(mob/user, cross_breed = FALSE) + var/choice + if(cross_breed) + var/base_choice = show_radial_menu(user, src, base_choices, require_near = TRUE, tooltips = TRUE) + if(!base_choice) + return + choice = show_radial_menu(user, src, cross_breed_choices[base_choice], require_near = TRUE, tooltips = TRUE) + else + choice = show_radial_menu(user, src, recipe_choices, require_near = TRUE, tooltips = TRUE) + + if(!(choice in choice_to_datum)) + return + + if(compressing) + return + + current_recipe = choice_to_datum[choice] + reagents_for_recipe = list() + reagents_for_recipe += current_recipe.required_oozes + +#undef CROSSBREED_BASE_PATHS diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/ooze_compressor_plumbing.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/ooze_compressor_plumbing.dm new file mode 100644 index 000000000000..ea3f0838b69c --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/ooze_compressor_plumbing.dm @@ -0,0 +1,31 @@ +/datum/component/plumbing/ooze_compressor + demand_connects = NORTH + +/datum/component/plumbing/ooze_compressor/Initialize(start=TRUE, _ducting_layer, _turn_connects=TRUE, datum/reagents/custom_receiver) + . = ..() + if(!istype(parent, /obj/machinery/plumbing/ooze_compressor)) + return COMPONENT_INCOMPATIBLE + +/datum/component/plumbing/ooze_compressor/send_request(dir) + var/obj/machinery/plumbing/ooze_compressor/chamber = parent + if(chamber.compressing || !chamber.current_recipe) + return + var/present_amount + var/diff + for(var/required_reagent in chamber.reagents_for_recipe) + //find how much amount is already present if at all + present_amount = 0 + for(var/datum/reagent/containg_reagent as anything in reagents.reagent_list) + if(required_reagent == containg_reagent.type) + present_amount = containg_reagent.volume + break + + //compute how much more is needed and round it + diff = chamber.reagents_for_recipe[required_reagent] - present_amount + if(diff >= CHEMICAL_QUANTISATION_LEVEL * 10) //should be safe even after rounding + process_request(min(diff, MACHINE_REAGENT_TRANSFER), required_reagent, dir) + return + + chamber.compress_recipe() //If we move this up, it'll instantly get turned off since any reaction always sets the reagent_total to zero. Other option is make the reaction update + //everything for every chemical removed, wich isn't a good option either. + chamber.on_reagent_change(reagents) //We need to check it now, because some reactions leave nothing left. diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/_base_recipe.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/_base_recipe.dm new file mode 100644 index 000000000000..a60288732cb3 --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/_base_recipe.dm @@ -0,0 +1,6 @@ +/datum/compressor_recipe + var/list/required_oozes = list() + var/obj/item/output_item + var/created_amount = 1 + +/datum/compressor_recipe/crossbreed diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/burning.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/burning.dm new file mode 100644 index 000000000000..3138caf36bbf --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/burning.dm @@ -0,0 +1,154 @@ +/datum/compressor_recipe/crossbreed/burning // EXISTS FOR SUBTYPING + output_item = /obj/item/slimecross/burning/grey +/datum/compressor_recipe/crossbreed/burning/grey + required_oozes = list( + /datum/reagent/slime_ooze/grey = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/grey + +/datum/compressor_recipe/crossbreed/burning/orange + required_oozes = list( + /datum/reagent/slime_ooze/orange = 1000, + ) + output_item = /obj/item/slimecross/burning/orange + +/datum/compressor_recipe/crossbreed/burning/purple + required_oozes = list( + /datum/reagent/slime_ooze/purple = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/purple + +/datum/compressor_recipe/crossbreed/burning/blue + required_oozes = list( + /datum/reagent/slime_ooze/blue = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/blue + +/datum/compressor_recipe/crossbreed/burning/metal + required_oozes = list( + /datum/reagent/slime_ooze/metal = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/metal + +/datum/compressor_recipe/crossbreed/burning/yellow + required_oozes = list( + /datum/reagent/slime_ooze/yellow = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/yellow + +/datum/compressor_recipe/crossbreed/burning/darkpurple + required_oozes = list( + /datum/reagent/slime_ooze/darkpurple = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/darkpurple + +/datum/compressor_recipe/crossbreed/burning/darkblue + required_oozes = list( + /datum/reagent/slime_ooze/darkblue = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/darkblue + +/datum/compressor_recipe/crossbreed/burning/silver + required_oozes = list( + /datum/reagent/slime_ooze/silver = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/silver + +/datum/compressor_recipe/crossbreed/burning/bluespace + required_oozes = list( + /datum/reagent/slime_ooze/bluespace = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/bluespace + +/datum/compressor_recipe/crossbreed/burning/cerulean + required_oozes = list( + /datum/reagent/slime_ooze/cerulean = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/cerulean + +/datum/compressor_recipe/crossbreed/burning/sepia + required_oozes = list( + /datum/reagent/slime_ooze/sepia = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/sepia + +/datum/compressor_recipe/crossbreed/burning/pyrite + required_oozes = list( + /datum/reagent/slime_ooze/pyrite = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/pyrite + +/datum/compressor_recipe/crossbreed/burning/red + required_oozes = list( + /datum/reagent/slime_ooze/red = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/red + +/datum/compressor_recipe/crossbreed/burning/green + required_oozes = list( + /datum/reagent/slime_ooze/green = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/green + +/datum/compressor_recipe/crossbreed/burning/pink + required_oozes = list( + /datum/reagent/slime_ooze/pink = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/pink + +/datum/compressor_recipe/crossbreed/burning/gold + required_oozes = list( + /datum/reagent/slime_ooze/gold = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/gold + +/datum/compressor_recipe/crossbreed/burning/oil + required_oozes = list( + /datum/reagent/slime_ooze/oil = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/oil + +/datum/compressor_recipe/crossbreed/burning/black + required_oozes = list( + /datum/reagent/slime_ooze/black = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/black + +/datum/compressor_recipe/crossbreed/burning/lightpink + required_oozes = list( + /datum/reagent/slime_ooze/lightpink = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/lightpink + +/datum/compressor_recipe/crossbreed/burning/adamantine + required_oozes = list( + /datum/reagent/slime_ooze/adamantine = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/adamantine + +/datum/compressor_recipe/crossbreed/burning/rainbow + required_oozes = list( + /datum/reagent/slime_ooze/rainbow = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/burning/rainbow diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/charged.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/charged.dm new file mode 100644 index 000000000000..b93b35eff4de --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/charged.dm @@ -0,0 +1,155 @@ +/datum/compressor_recipe/crossbreed/charged + output_item = /obj/item/slimecross/charged/grey + +/datum/compressor_recipe/crossbreed/charged/grey + required_oozes = list( + /datum/reagent/slime_ooze/grey = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/grey + +/datum/compressor_recipe/crossbreed/charged/orange + required_oozes = list( + /datum/reagent/slime_ooze/yellow = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/charged/orange + +/datum/compressor_recipe/crossbreed/charged/metal + required_oozes = list( + /datum/reagent/slime_ooze/yellow = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/charged/metal + +/datum/compressor_recipe/crossbreed/charged/purple + required_oozes = list( + /datum/reagent/slime_ooze/purple = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/purple + +/datum/compressor_recipe/crossbreed/charged/blue + required_oozes = list( + /datum/reagent/slime_ooze/blue = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/blue + +/datum/compressor_recipe/crossbreed/charged/yellow + required_oozes = list( + /datum/reagent/slime_ooze/yellow = 1000, + ) + output_item = /obj/item/slimecross/charged/yellow + +/datum/compressor_recipe/crossbreed/charged/darkpurple + required_oozes = list( + /datum/reagent/slime_ooze/darkpurple = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/darkpurple + +/datum/compressor_recipe/crossbreed/charged/darkblue + required_oozes = list( + /datum/reagent/slime_ooze/darkblue = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/darkblue + +/datum/compressor_recipe/crossbreed/charged/silver + required_oozes = list( + /datum/reagent/slime_ooze/silver = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/silver + +/datum/compressor_recipe/crossbreed/charged/bluespace + required_oozes = list( + /datum/reagent/slime_ooze/bluespace = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/bluespace + +/datum/compressor_recipe/crossbreed/charged/sepia + required_oozes = list( + /datum/reagent/slime_ooze/sepia = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/sepia + +/datum/compressor_recipe/crossbreed/charged/pyrite + required_oozes = list( + /datum/reagent/slime_ooze/pyrite = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/pyrite + +/datum/compressor_recipe/crossbreed/charged/red + required_oozes = list( + /datum/reagent/slime_ooze/red = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/red + +/datum/compressor_recipe/crossbreed/charged/green + required_oozes = list( + /datum/reagent/slime_ooze/green = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/green + +/datum/compressor_recipe/crossbreed/charged/pink + required_oozes = list( + /datum/reagent/slime_ooze/pink = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/pink + +/datum/compressor_recipe/crossbreed/charged/gold + required_oozes = list( + /datum/reagent/slime_ooze/gold = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/gold + +/datum/compressor_recipe/crossbreed/charged/oil + required_oozes = list( + /datum/reagent/slime_ooze/oil = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/oil + +/datum/compressor_recipe/crossbreed/charged/black + required_oozes = list( + /datum/reagent/slime_ooze/black = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/black + +/datum/compressor_recipe/crossbreed/charged/lightpink + required_oozes = list( + /datum/reagent/slime_ooze/lightpink = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/lightpink + +/datum/compressor_recipe/crossbreed/charged/adamantine + required_oozes = list( + /datum/reagent/slime_ooze/adamantine = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/adamantine + +/datum/compressor_recipe/crossbreed/charged/cerulean + required_oozes = list( + /datum/reagent/slime_ooze/cerulean = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/cerulean + +/datum/compressor_recipe/crossbreed/charged/rainbow + required_oozes = list( + /datum/reagent/slime_ooze/rainbow = 500, + /datum/reagent/slime_ooze/yellow = 500, + ) + output_item = /obj/item/slimecross/charged/rainbow diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/chilling.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/chilling.dm new file mode 100644 index 000000000000..e902f179f5fd --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/chilling.dm @@ -0,0 +1,155 @@ +/datum/compressor_recipe/crossbreed/chilling + output_item = /obj/item/slimecross/chilling/grey + +/datum/compressor_recipe/crossbreed/chilling/grey + required_oozes = list( + /datum/reagent/slime_ooze/grey = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/grey + +/datum/compressor_recipe/crossbreed/chilling/orange + required_oozes = list( + /datum/reagent/slime_ooze/darkblue = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/chilling/orange + +/datum/compressor_recipe/crossbreed/chilling/metal + required_oozes = list( + /datum/reagent/slime_ooze/darkblue = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/chilling/metal + +/datum/compressor_recipe/crossbreed/chilling/purple + required_oozes = list( + /datum/reagent/slime_ooze/purple = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/purple + +/datum/compressor_recipe/crossbreed/chilling/blue + required_oozes = list( + /datum/reagent/slime_ooze/blue = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/blue + +/datum/compressor_recipe/crossbreed/chilling/yellow + required_oozes = list( + /datum/reagent/slime_ooze/yellow = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/yellow + +/datum/compressor_recipe/crossbreed/chilling/darkpurple + required_oozes = list( + /datum/reagent/slime_ooze/darkpurple = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/darkpurple + +/datum/compressor_recipe/crossbreed/chilling/darkblue + required_oozes = list( + /datum/reagent/slime_ooze/darkblue = 1000, + ) + output_item = /obj/item/slimecross/chilling/darkblue + +/datum/compressor_recipe/crossbreed/chilling/silver + required_oozes = list( + /datum/reagent/slime_ooze/silver = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/silver + +/datum/compressor_recipe/crossbreed/chilling/bluespace + required_oozes = list( + /datum/reagent/slime_ooze/bluespace = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/bluespace + +/datum/compressor_recipe/crossbreed/chilling/sepia + required_oozes = list( + /datum/reagent/slime_ooze/sepia = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/sepia + +/datum/compressor_recipe/crossbreed/chilling/pyrite + required_oozes = list( + /datum/reagent/slime_ooze/pyrite = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/pyrite + +/datum/compressor_recipe/crossbreed/chilling/red + required_oozes = list( + /datum/reagent/slime_ooze/red = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/red + +/datum/compressor_recipe/crossbreed/chilling/green + required_oozes = list( + /datum/reagent/slime_ooze/green = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/green + +/datum/compressor_recipe/crossbreed/chilling/pink + required_oozes = list( + /datum/reagent/slime_ooze/pink = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/pink + +/datum/compressor_recipe/crossbreed/chilling/gold + required_oozes = list( + /datum/reagent/slime_ooze/gold = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/gold + +/datum/compressor_recipe/crossbreed/chilling/oil + required_oozes = list( + /datum/reagent/slime_ooze/oil = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/oil + +/datum/compressor_recipe/crossbreed/chilling/black + required_oozes = list( + /datum/reagent/slime_ooze/black = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/black + +/datum/compressor_recipe/crossbreed/chilling/lightpink + required_oozes = list( + /datum/reagent/slime_ooze/lightpink = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/lightpink + +/datum/compressor_recipe/crossbreed/chilling/adamantine + required_oozes = list( + /datum/reagent/slime_ooze/adamantine = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/adamantine + +/datum/compressor_recipe/crossbreed/chilling/cerulean + required_oozes = list( + /datum/reagent/slime_ooze/cerulean = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/cerulean + +/datum/compressor_recipe/crossbreed/chilling/rainbow + required_oozes = list( + /datum/reagent/slime_ooze/rainbow = 500, + /datum/reagent/slime_ooze/darkblue = 500, + ) + output_item = /obj/item/slimecross/chilling/rainbow diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/colors.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/colors.dm new file mode 100644 index 000000000000..ff9d3754bcd6 --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/colors.dm @@ -0,0 +1,87 @@ +/datum/compressor_recipe/grey + required_oozes = list(/datum/reagent/slime_ooze/grey = 20) + output_item = /obj/item/slime_extract/grey + +/datum/compressor_recipe/metal + required_oozes = list(/datum/reagent/slime_ooze/metal = 20) + output_item = /obj/item/slime_extract/metal + +/datum/compressor_recipe/orange + required_oozes = list(/datum/reagent/slime_ooze/orange = 20) + output_item = /obj/item/slime_extract/orange + +/datum/compressor_recipe/purple + required_oozes = list(/datum/reagent/slime_ooze/purple = 20) + output_item = /obj/item/slime_extract/purple + +/datum/compressor_recipe/yellow + required_oozes = list(/datum/reagent/slime_ooze/yellow = 20) + output_item = /obj/item/slime_extract/yellow + +/datum/compressor_recipe/darkpurple + required_oozes = list(/datum/reagent/slime_ooze/darkpurple = 20) + output_item = /obj/item/slime_extract/darkpurple + +/datum/compressor_recipe/darkblue + required_oozes = list(/datum/reagent/slime_ooze/darkblue = 20) + output_item = /obj/item/slime_extract/darkblue + +/datum/compressor_recipe/silver + required_oozes = list(/datum/reagent/slime_ooze/silver = 20) + output_item = /obj/item/slime_extract/silver + +/datum/compressor_recipe/blue + required_oozes = list(/datum/reagent/slime_ooze/blue = 20) + output_item = /obj/item/slime_extract/blue + +/datum/compressor_recipe/cerulean + required_oozes = list(/datum/reagent/slime_ooze/cerulean = 20) + output_item = /obj/item/slime_extract/cerulean + +/datum/compressor_recipe/sepia + required_oozes = list(/datum/reagent/slime_ooze/sepia = 20) + output_item = /obj/item/slime_extract/sepia + +/datum/compressor_recipe/bluespace + required_oozes = list(/datum/reagent/slime_ooze/bluespace = 20) + output_item = /obj/item/slime_extract/bluespace + +/datum/compressor_recipe/pyrite + required_oozes = list(/datum/reagent/slime_ooze/pyrite = 20) + output_item = /obj/item/slime_extract/pyrite + +/datum/compressor_recipe/red + required_oozes = list(/datum/reagent/slime_ooze/red = 20) + output_item = /obj/item/slime_extract/red + +/datum/compressor_recipe/green + required_oozes = list(/datum/reagent/slime_ooze/green = 20) + output_item = /obj/item/slime_extract/green + +/datum/compressor_recipe/pink + required_oozes = list(/datum/reagent/slime_ooze/pink = 20) + output_item = /obj/item/slime_extract/pink + +/datum/compressor_recipe/oil + required_oozes = list(/datum/reagent/slime_ooze/oil = 20) + output_item = /obj/item/slime_extract/oil + +/datum/compressor_recipe/black + required_oozes = list(/datum/reagent/slime_ooze/black = 20) + output_item = /obj/item/slime_extract/black + +/datum/compressor_recipe/lightpink + required_oozes = list(/datum/reagent/slime_ooze/lightpink = 20) + output_item = /obj/item/slime_extract/lightpink + +/datum/compressor_recipe/adamantine + required_oozes = list(/datum/reagent/slime_ooze/adamantine = 20) + output_item = /obj/item/slime_extract/adamantine + +/datum/compressor_recipe/rainbow + required_oozes = list(/datum/reagent/slime_ooze/rainbow = 20) + output_item = /obj/item/slime_extract/rainbow + +/datum/compressor_recipe/gold + required_oozes = list(/datum/reagent/slime_ooze/gold = 20) + output_item = /obj/item/slime_extract/gold diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/consuming.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/consuming.dm new file mode 100644 index 000000000000..ce77d9f1407f --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/consuming.dm @@ -0,0 +1,155 @@ +/datum/compressor_recipe/crossbreed/consuming + output_item = /obj/item/slimecross/consuming/grey + +/datum/compressor_recipe/crossbreed/consuming/grey + required_oozes = list( + /datum/reagent/slime_ooze/grey = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/grey + +/datum/compressor_recipe/crossbreed/consuming/orange + required_oozes = list( + /datum/reagent/slime_ooze/silver = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/consuming/orange + +/datum/compressor_recipe/crossbreed/consuming/metal + required_oozes = list( + /datum/reagent/slime_ooze/silver = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/consuming/metal + +/datum/compressor_recipe/crossbreed/consuming/purple + required_oozes = list( + /datum/reagent/slime_ooze/purple = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/purple + +/datum/compressor_recipe/crossbreed/consuming/blue + required_oozes = list( + /datum/reagent/slime_ooze/blue = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/blue + +/datum/compressor_recipe/crossbreed/consuming/yellow + required_oozes = list( + /datum/reagent/slime_ooze/yellow = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/yellow + +/datum/compressor_recipe/crossbreed/consuming/darkpurple + required_oozes = list( + /datum/reagent/slime_ooze/darkpurple = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/darkpurple + +/datum/compressor_recipe/crossbreed/consuming/silver + required_oozes = list( + /datum/reagent/slime_ooze/silver = 1000, + ) + output_item = /obj/item/slimecross/consuming/silver + +/datum/compressor_recipe/crossbreed/consuming/silver + required_oozes = list( + /datum/reagent/slime_ooze/silver = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/silver + +/datum/compressor_recipe/crossbreed/consuming/bluespace + required_oozes = list( + /datum/reagent/slime_ooze/bluespace = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/bluespace + +/datum/compressor_recipe/crossbreed/consuming/sepia + required_oozes = list( + /datum/reagent/slime_ooze/sepia = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/sepia + +/datum/compressor_recipe/crossbreed/consuming/pyrite + required_oozes = list( + /datum/reagent/slime_ooze/pyrite = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/pyrite + +/datum/compressor_recipe/crossbreed/consuming/red + required_oozes = list( + /datum/reagent/slime_ooze/red = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/red + +/datum/compressor_recipe/crossbreed/consuming/green + required_oozes = list( + /datum/reagent/slime_ooze/green = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/green + +/datum/compressor_recipe/crossbreed/consuming/pink + required_oozes = list( + /datum/reagent/slime_ooze/pink = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/pink + +/datum/compressor_recipe/crossbreed/consuming/gold + required_oozes = list( + /datum/reagent/slime_ooze/gold = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/gold + +/datum/compressor_recipe/crossbreed/consuming/oil + required_oozes = list( + /datum/reagent/slime_ooze/oil = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/oil + +/datum/compressor_recipe/crossbreed/consuming/black + required_oozes = list( + /datum/reagent/slime_ooze/black = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/black + +/datum/compressor_recipe/crossbreed/consuming/lightpink + required_oozes = list( + /datum/reagent/slime_ooze/lightpink = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/lightpink + +/datum/compressor_recipe/crossbreed/consuming/adamantine + required_oozes = list( + /datum/reagent/slime_ooze/adamantine = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/adamantine + +/datum/compressor_recipe/crossbreed/consuming/cerulean + required_oozes = list( + /datum/reagent/slime_ooze/cerulean = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/cerulean + +/datum/compressor_recipe/crossbreed/consuming/rainbow + required_oozes = list( + /datum/reagent/slime_ooze/rainbow = 500, + /datum/reagent/slime_ooze/silver = 500, + ) + output_item = /obj/item/slimecross/consuming/rainbow diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/industrial.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/industrial.dm new file mode 100644 index 000000000000..07a54976d8da --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/industrial.dm @@ -0,0 +1,155 @@ +/datum/compressor_recipe/crossbreed/industrial + output_item = /obj/item/slimecross/industrial/grey + +/datum/compressor_recipe/crossbreed/industrial/grey + required_oozes = list( + /datum/reagent/slime_ooze/grey = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/grey + +/datum/compressor_recipe/crossbreed/industrial/metal + required_oozes = list( + /datum/reagent/slime_ooze/metal = 1000, + ) + output_item = /obj/item/slimecross/industrial/metal + +/datum/compressor_recipe/crossbreed/industrial/orange + required_oozes = list( + /datum/reagent/slime_ooze/metal = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/industrial/orange + +/datum/compressor_recipe/crossbreed/industrial/purple + required_oozes = list( + /datum/reagent/slime_ooze/purple = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/purple + +/datum/compressor_recipe/crossbreed/industrial/blue + required_oozes = list( + /datum/reagent/slime_ooze/blue = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/blue + +/datum/compressor_recipe/crossbreed/industrial/yellow + required_oozes = list( + /datum/reagent/slime_ooze/yellow = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/yellow + +/datum/compressor_recipe/crossbreed/industrial/darkpurple + required_oozes = list( + /datum/reagent/slime_ooze/darkpurple = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/darkpurple + +/datum/compressor_recipe/crossbreed/industrial/darkblue + required_oozes = list( + /datum/reagent/slime_ooze/darkblue = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/darkblue + +/datum/compressor_recipe/crossbreed/industrial/silver + required_oozes = list( + /datum/reagent/slime_ooze/silver = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/silver + +/datum/compressor_recipe/crossbreed/industrial/bluespace + required_oozes = list( + /datum/reagent/slime_ooze/bluespace = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/bluespace + +/datum/compressor_recipe/crossbreed/industrial/sepia + required_oozes = list( + /datum/reagent/slime_ooze/sepia = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/sepia + +/datum/compressor_recipe/crossbreed/industrial/pyrite + required_oozes = list( + /datum/reagent/slime_ooze/pyrite = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/pyrite + +/datum/compressor_recipe/crossbreed/industrial/red + required_oozes = list( + /datum/reagent/slime_ooze/red = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/red + +/datum/compressor_recipe/crossbreed/industrial/green + required_oozes = list( + /datum/reagent/slime_ooze/green = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/green + +/datum/compressor_recipe/crossbreed/industrial/pink + required_oozes = list( + /datum/reagent/slime_ooze/pink = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/pink + +/datum/compressor_recipe/crossbreed/industrial/gold + required_oozes = list( + /datum/reagent/slime_ooze/gold = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/gold + +/datum/compressor_recipe/crossbreed/industrial/oil + required_oozes = list( + /datum/reagent/slime_ooze/oil = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/oil + +/datum/compressor_recipe/crossbreed/industrial/black + required_oozes = list( + /datum/reagent/slime_ooze/black = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/black + +/datum/compressor_recipe/crossbreed/industrial/lightpink + required_oozes = list( + /datum/reagent/slime_ooze/lightpink = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/lightpink + +/datum/compressor_recipe/crossbreed/industrial/adamantine + required_oozes = list( + /datum/reagent/slime_ooze/adamantine = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/adamantine + +/datum/compressor_recipe/crossbreed/industrial/cerulean + required_oozes = list( + /datum/reagent/slime_ooze/cerulean = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/cerulean + +/datum/compressor_recipe/crossbreed/industrial/rainbow + required_oozes = list( + /datum/reagent/slime_ooze/rainbow = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/industrial/rainbow diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/prismatic.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/prismatic.dm new file mode 100644 index 000000000000..c891dda82357 --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/prismatic.dm @@ -0,0 +1,155 @@ +/datum/compressor_recipe/crossbreed/prismatic + output_item = /obj/item/slimecross/prismatic/grey + +/datum/compressor_recipe/crossbreed/prismatic/grey + required_oozes = list( + /datum/reagent/slime_ooze/grey = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/grey + +/datum/compressor_recipe/crossbreed/prismatic/orange + required_oozes = list( + /datum/reagent/slime_ooze/pyrite = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/prismatic/orange + +/datum/compressor_recipe/crossbreed/prismatic/metal + required_oozes = list( + /datum/reagent/slime_ooze/pyrite = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/prismatic/metal + +/datum/compressor_recipe/crossbreed/prismatic/purple + required_oozes = list( + /datum/reagent/slime_ooze/purple = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/purple + +/datum/compressor_recipe/crossbreed/prismatic/blue + required_oozes = list( + /datum/reagent/slime_ooze/blue = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/blue + +/datum/compressor_recipe/crossbreed/prismatic/yellow + required_oozes = list( + /datum/reagent/slime_ooze/yellow = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/yellow + +/datum/compressor_recipe/crossbreed/prismatic/darkpurple + required_oozes = list( + /datum/reagent/slime_ooze/darkpurple = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/darkpurple + +/datum/compressor_recipe/crossbreed/prismatic/pyrite + required_oozes = list( + /datum/reagent/slime_ooze/pyrite = 1000, + ) + output_item = /obj/item/slimecross/prismatic/pyrite + +/datum/compressor_recipe/crossbreed/prismatic/silver + required_oozes = list( + /datum/reagent/slime_ooze/silver = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/silver + +/datum/compressor_recipe/crossbreed/prismatic/bluespace + required_oozes = list( + /datum/reagent/slime_ooze/bluespace = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/bluespace + +/datum/compressor_recipe/crossbreed/prismatic/sepia + required_oozes = list( + /datum/reagent/slime_ooze/sepia = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/sepia + +/datum/compressor_recipe/crossbreed/prismatic/darkblue + required_oozes = list( + /datum/reagent/slime_ooze/darkblue = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/darkblue + +/datum/compressor_recipe/crossbreed/prismatic/red + required_oozes = list( + /datum/reagent/slime_ooze/red = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/red + +/datum/compressor_recipe/crossbreed/prismatic/green + required_oozes = list( + /datum/reagent/slime_ooze/green = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/green + +/datum/compressor_recipe/crossbreed/prismatic/pink + required_oozes = list( + /datum/reagent/slime_ooze/pink = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/pink + +/datum/compressor_recipe/crossbreed/prismatic/gold + required_oozes = list( + /datum/reagent/slime_ooze/gold = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/gold + +/datum/compressor_recipe/crossbreed/prismatic/oil + required_oozes = list( + /datum/reagent/slime_ooze/oil = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/oil + +/datum/compressor_recipe/crossbreed/prismatic/black + required_oozes = list( + /datum/reagent/slime_ooze/black = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/black + +/datum/compressor_recipe/crossbreed/prismatic/lightpink + required_oozes = list( + /datum/reagent/slime_ooze/lightpink = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/lightpink + +/datum/compressor_recipe/crossbreed/prismatic/adamantine + required_oozes = list( + /datum/reagent/slime_ooze/adamantine = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/adamantine + +/datum/compressor_recipe/crossbreed/prismatic/cerulean + required_oozes = list( + /datum/reagent/slime_ooze/cerulean = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/cerulean + +/datum/compressor_recipe/crossbreed/prismatic/rainbow + required_oozes = list( + /datum/reagent/slime_ooze/rainbow = 500, + /datum/reagent/slime_ooze/pyrite = 500, + ) + output_item = /obj/item/slimecross/prismatic/rainbow diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/recurring.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/recurring.dm new file mode 100644 index 000000000000..fc0b74619efa --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/recurring.dm @@ -0,0 +1,155 @@ +/datum/compressor_recipe/crossbreed/recurring + output_item = /obj/item/slimecross/recurring/grey + +/datum/compressor_recipe/crossbreed/recurring/grey + required_oozes = list( + /datum/reagent/slime_ooze/grey = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/grey + +/datum/compressor_recipe/crossbreed/recurring/orange + required_oozes = list( + /datum/reagent/slime_ooze/cerulean = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/recurring/orange + +/datum/compressor_recipe/crossbreed/recurring/metal + required_oozes = list( + /datum/reagent/slime_ooze/cerulean = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/recurring/metal + +/datum/compressor_recipe/crossbreed/recurring/purple + required_oozes = list( + /datum/reagent/slime_ooze/purple = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/purple + +/datum/compressor_recipe/crossbreed/recurring/blue + required_oozes = list( + /datum/reagent/slime_ooze/blue = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/blue + +/datum/compressor_recipe/crossbreed/recurring/yellow + required_oozes = list( + /datum/reagent/slime_ooze/yellow = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/yellow + +/datum/compressor_recipe/crossbreed/recurring/darkpurple + required_oozes = list( + /datum/reagent/slime_ooze/darkpurple = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/darkpurple + +/datum/compressor_recipe/crossbreed/recurring/cerulean + required_oozes = list( + /datum/reagent/slime_ooze/cerulean = 1000, + ) + output_item = /obj/item/slimecross/recurring/cerulean + +/datum/compressor_recipe/crossbreed/recurring/silver + required_oozes = list( + /datum/reagent/slime_ooze/silver = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/silver + +/datum/compressor_recipe/crossbreed/recurring/bluespace + required_oozes = list( + /datum/reagent/slime_ooze/bluespace = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/bluespace + +/datum/compressor_recipe/crossbreed/recurring/sepia + required_oozes = list( + /datum/reagent/slime_ooze/sepia = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/sepia + +/datum/compressor_recipe/crossbreed/recurring/darkblue + required_oozes = list( + /datum/reagent/slime_ooze/darkblue = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/darkblue + +/datum/compressor_recipe/crossbreed/recurring/red + required_oozes = list( + /datum/reagent/slime_ooze/red = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/red + +/datum/compressor_recipe/crossbreed/recurring/green + required_oozes = list( + /datum/reagent/slime_ooze/green = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/green + +/datum/compressor_recipe/crossbreed/recurring/pink + required_oozes = list( + /datum/reagent/slime_ooze/pink = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/pink + +/datum/compressor_recipe/crossbreed/recurring/gold + required_oozes = list( + /datum/reagent/slime_ooze/gold = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/gold + +/datum/compressor_recipe/crossbreed/recurring/oil + required_oozes = list( + /datum/reagent/slime_ooze/oil = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/oil + +/datum/compressor_recipe/crossbreed/recurring/black + required_oozes = list( + /datum/reagent/slime_ooze/black = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/black + +/datum/compressor_recipe/crossbreed/recurring/lightpink + required_oozes = list( + /datum/reagent/slime_ooze/lightpink = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/lightpink + +/datum/compressor_recipe/crossbreed/recurring/adamantine + required_oozes = list( + /datum/reagent/slime_ooze/adamantine = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/adamantine + +/datum/compressor_recipe/crossbreed/recurring/pyrite + required_oozes = list( + /datum/reagent/slime_ooze/pyrite = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/pyrite + +/datum/compressor_recipe/crossbreed/recurring/rainbow + required_oozes = list( + /datum/reagent/slime_ooze/rainbow = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/recurring/rainbow diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/regenerative.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/regenerative.dm new file mode 100644 index 000000000000..afaa3cb751da --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/regenerative.dm @@ -0,0 +1,155 @@ +/datum/compressor_recipe/crossbreed/regenerative + output_item = /obj/item/slimecross/regenerative/grey + +/datum/compressor_recipe/crossbreed/regenerative/grey + required_oozes = list( + /datum/reagent/slime_ooze/grey = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/grey + +/datum/compressor_recipe/crossbreed/regenerative/orange + required_oozes = list( + /datum/reagent/slime_ooze/purple = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/regenerative/orange + +/datum/compressor_recipe/crossbreed/regenerative/metal + required_oozes = list( + /datum/reagent/slime_ooze/purple = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/regenerative/metal + +/datum/compressor_recipe/crossbreed/regenerative/cerulean + required_oozes = list( + /datum/reagent/slime_ooze/purple = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/regenerative/cerulean + +/datum/compressor_recipe/crossbreed/regenerative/blue + required_oozes = list( + /datum/reagent/slime_ooze/blue = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/blue + +/datum/compressor_recipe/crossbreed/regenerative/yellow + required_oozes = list( + /datum/reagent/slime_ooze/yellow = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/yellow + +/datum/compressor_recipe/crossbreed/regenerative/darkpurple + required_oozes = list( + /datum/reagent/slime_ooze/darkpurple = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/darkpurple + +/datum/compressor_recipe/crossbreed/regenerative/purple + required_oozes = list( + /datum/reagent/slime_ooze/purple = 1000, + ) + output_item = /obj/item/slimecross/regenerative/purple + +/datum/compressor_recipe/crossbreed/regenerative/silver + required_oozes = list( + /datum/reagent/slime_ooze/silver = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/silver + +/datum/compressor_recipe/crossbreed/regenerative/bluespace + required_oozes = list( + /datum/reagent/slime_ooze/bluespace = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/bluespace + +/datum/compressor_recipe/crossbreed/regenerative/sepia + required_oozes = list( + /datum/reagent/slime_ooze/sepia = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/sepia + +/datum/compressor_recipe/crossbreed/regenerative/darkblue + required_oozes = list( + /datum/reagent/slime_ooze/darkblue = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/darkblue + +/datum/compressor_recipe/crossbreed/regenerative/red + required_oozes = list( + /datum/reagent/slime_ooze/red = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/red + +/datum/compressor_recipe/crossbreed/regenerative/green + required_oozes = list( + /datum/reagent/slime_ooze/green = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/green + +/datum/compressor_recipe/crossbreed/regenerative/pink + required_oozes = list( + /datum/reagent/slime_ooze/pink = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/pink + +/datum/compressor_recipe/crossbreed/regenerative/gold + required_oozes = list( + /datum/reagent/slime_ooze/gold = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/gold + +/datum/compressor_recipe/crossbreed/regenerative/oil + required_oozes = list( + /datum/reagent/slime_ooze/oil = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/oil + +/datum/compressor_recipe/crossbreed/regenerative/black + required_oozes = list( + /datum/reagent/slime_ooze/black = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/black + +/datum/compressor_recipe/crossbreed/regenerative/lightpink + required_oozes = list( + /datum/reagent/slime_ooze/lightpink = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/lightpink + +/datum/compressor_recipe/crossbreed/regenerative/adamantine + required_oozes = list( + /datum/reagent/slime_ooze/adamantine = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/adamantine + +/datum/compressor_recipe/crossbreed/regenerative/pyrite + required_oozes = list( + /datum/reagent/slime_ooze/pyrite = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/pyrite + +/datum/compressor_recipe/crossbreed/regenerative/rainbow + required_oozes = list( + /datum/reagent/slime_ooze/rainbow = 500, + /datum/reagent/slime_ooze/purple = 500, + ) + output_item = /obj/item/slimecross/regenerative/rainbow diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/reproductive.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/reproductive.dm new file mode 100644 index 000000000000..f583194de434 --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/reproductive.dm @@ -0,0 +1,155 @@ +/datum/compressor_recipe/crossbreed/reproductive + output_item = /obj/item/slimecross/reproductive/purple + +/datum/compressor_recipe/crossbreed/reproductive/purple + required_oozes = list( + /datum/reagent/slime_ooze/purple = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/purple + +/datum/compressor_recipe/crossbreed/reproductive/orange + required_oozes = list( + /datum/reagent/slime_ooze/grey = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/reproductive/orange + +/datum/compressor_recipe/crossbreed/reproductive/metal + required_oozes = list( + /datum/reagent/slime_ooze/grey = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/reproductive/metal + +/datum/compressor_recipe/crossbreed/reproductive/cerulean + required_oozes = list( + /datum/reagent/slime_ooze/grey = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/reproductive/cerulean + +/datum/compressor_recipe/crossbreed/reproductive/blue + required_oozes = list( + /datum/reagent/slime_ooze/blue = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/blue + +/datum/compressor_recipe/crossbreed/reproductive/yellow + required_oozes = list( + /datum/reagent/slime_ooze/yellow = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/yellow + +/datum/compressor_recipe/crossbreed/reproductive/darkpurple + required_oozes = list( + /datum/reagent/slime_ooze/darkpurple = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/darkpurple + +/datum/compressor_recipe/crossbreed/reproductive/grey + required_oozes = list( + /datum/reagent/slime_ooze/grey = 1000, + ) + output_item = /obj/item/slimecross/reproductive/grey + +/datum/compressor_recipe/crossbreed/reproductive/silver + required_oozes = list( + /datum/reagent/slime_ooze/silver = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/silver + +/datum/compressor_recipe/crossbreed/reproductive/bluespace + required_oozes = list( + /datum/reagent/slime_ooze/bluespace = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/bluespace + +/datum/compressor_recipe/crossbreed/reproductive/sepia + required_oozes = list( + /datum/reagent/slime_ooze/sepia = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/sepia + +/datum/compressor_recipe/crossbreed/reproductive/darkblue + required_oozes = list( + /datum/reagent/slime_ooze/darkblue = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/darkblue + +/datum/compressor_recipe/crossbreed/reproductive/red + required_oozes = list( + /datum/reagent/slime_ooze/red = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/red + +/datum/compressor_recipe/crossbreed/reproductive/green + required_oozes = list( + /datum/reagent/slime_ooze/green = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/green + +/datum/compressor_recipe/crossbreed/reproductive/pink + required_oozes = list( + /datum/reagent/slime_ooze/pink = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/pink + +/datum/compressor_recipe/crossbreed/reproductive/gold + required_oozes = list( + /datum/reagent/slime_ooze/gold = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/gold + +/datum/compressor_recipe/crossbreed/reproductive/oil + required_oozes = list( + /datum/reagent/slime_ooze/oil = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/oil + +/datum/compressor_recipe/crossbreed/reproductive/black + required_oozes = list( + /datum/reagent/slime_ooze/black = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/black + +/datum/compressor_recipe/crossbreed/reproductive/lightpink + required_oozes = list( + /datum/reagent/slime_ooze/lightpink = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/lightpink + +/datum/compressor_recipe/crossbreed/reproductive/adamantine + required_oozes = list( + /datum/reagent/slime_ooze/adamantine = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/adamantine + +/datum/compressor_recipe/crossbreed/reproductive/pyrite + required_oozes = list( + /datum/reagent/slime_ooze/pyrite = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/pyrite + +/datum/compressor_recipe/crossbreed/reproductive/rainbow + required_oozes = list( + /datum/reagent/slime_ooze/rainbow = 500, + /datum/reagent/slime_ooze/grey = 500, + ) + output_item = /obj/item/slimecross/reproductive/rainbow diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/selfsustaining.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/selfsustaining.dm new file mode 100644 index 000000000000..60d960c607d9 --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/selfsustaining.dm @@ -0,0 +1,155 @@ +/datum/compressor_recipe/crossbreed/selfsustaining + output_item = /obj/item/slimecross/selfsustaining/purple + +/datum/compressor_recipe/crossbreed/selfsustaining/purple + required_oozes = list( + /datum/reagent/slime_ooze/purple = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/purple + +/datum/compressor_recipe/crossbreed/selfsustaining/orange + required_oozes = list( + /datum/reagent/slime_ooze/darkpurple = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/orange + +/datum/compressor_recipe/crossbreed/selfsustaining/metal + required_oozes = list( + /datum/reagent/slime_ooze/darkpurple = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/metal + +/datum/compressor_recipe/crossbreed/selfsustaining/cerulean + required_oozes = list( + /datum/reagent/slime_ooze/darkpurple = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/cerulean + +/datum/compressor_recipe/crossbreed/selfsustaining/blue + required_oozes = list( + /datum/reagent/slime_ooze/blue = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/blue + +/datum/compressor_recipe/crossbreed/selfsustaining/yellow + required_oozes = list( + /datum/reagent/slime_ooze/yellow = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/yellow + +/datum/compressor_recipe/crossbreed/selfsustaining/grey + required_oozes = list( + /datum/reagent/slime_ooze/grey = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/grey + +/datum/compressor_recipe/crossbreed/selfsustaining/darkpurple + required_oozes = list( + /datum/reagent/slime_ooze/darkpurple = 1000, + ) + output_item = /obj/item/slimecross/selfsustaining/darkpurple + +/datum/compressor_recipe/crossbreed/selfsustaining/silver + required_oozes = list( + /datum/reagent/slime_ooze/silver = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/silver + +/datum/compressor_recipe/crossbreed/selfsustaining/bluespace + required_oozes = list( + /datum/reagent/slime_ooze/bluespace = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/bluespace + +/datum/compressor_recipe/crossbreed/selfsustaining/sepia + required_oozes = list( + /datum/reagent/slime_ooze/sepia = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/sepia + +/datum/compressor_recipe/crossbreed/selfsustaining/darkblue + required_oozes = list( + /datum/reagent/slime_ooze/darkblue = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/darkblue + +/datum/compressor_recipe/crossbreed/selfsustaining/red + required_oozes = list( + /datum/reagent/slime_ooze/red = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/red + +/datum/compressor_recipe/crossbreed/selfsustaining/green + required_oozes = list( + /datum/reagent/slime_ooze/green = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/green + +/datum/compressor_recipe/crossbreed/selfsustaining/pink + required_oozes = list( + /datum/reagent/slime_ooze/pink = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/pink + +/datum/compressor_recipe/crossbreed/selfsustaining/gold + required_oozes = list( + /datum/reagent/slime_ooze/gold = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/gold + +/datum/compressor_recipe/crossbreed/selfsustaining/oil + required_oozes = list( + /datum/reagent/slime_ooze/oil = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/oil + +/datum/compressor_recipe/crossbreed/selfsustaining/black + required_oozes = list( + /datum/reagent/slime_ooze/black = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/black + +/datum/compressor_recipe/crossbreed/selfsustaining/lightpink + required_oozes = list( + /datum/reagent/slime_ooze/lightpink = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/lightpink + +/datum/compressor_recipe/crossbreed/selfsustaining/adamantine + required_oozes = list( + /datum/reagent/slime_ooze/adamantine = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/adamantine + +/datum/compressor_recipe/crossbreed/selfsustaining/pyrite + required_oozes = list( + /datum/reagent/slime_ooze/pyrite = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/pyrite + +/datum/compressor_recipe/crossbreed/selfsustaining/rainbow + required_oozes = list( + /datum/reagent/slime_ooze/rainbow = 500, + /datum/reagent/slime_ooze/darkpurple = 500, + ) + output_item = /obj/item/slimecross/selfsustaining/rainbow diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/stabilized.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/stabilized.dm new file mode 100644 index 000000000000..446563660f71 --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/recipes/stabilized.dm @@ -0,0 +1,155 @@ +/datum/compressor_recipe/crossbreed/stabilized + output_item = /obj/item/slimecross/stabilized/purple + +/datum/compressor_recipe/crossbreed/stabilized/purple + required_oozes = list( + /datum/reagent/slime_ooze/purple = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/purple + +/datum/compressor_recipe/crossbreed/stabilized/orange + required_oozes = list( + /datum/reagent/slime_ooze/blue = 500, + /datum/reagent/slime_ooze/orange = 500, + ) + output_item = /obj/item/slimecross/stabilized/orange + +/datum/compressor_recipe/crossbreed/stabilized/metal + required_oozes = list( + /datum/reagent/slime_ooze/blue = 500, + /datum/reagent/slime_ooze/metal = 500, + ) + output_item = /obj/item/slimecross/stabilized/metal + +/datum/compressor_recipe/crossbreed/stabilized/cerulean + required_oozes = list( + /datum/reagent/slime_ooze/blue = 500, + /datum/reagent/slime_ooze/cerulean = 500, + ) + output_item = /obj/item/slimecross/stabilized/cerulean + +/datum/compressor_recipe/crossbreed/stabilized/darkpurple + required_oozes = list( + /datum/reagent/slime_ooze/darkpurple = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/darkpurple + +/datum/compressor_recipe/crossbreed/stabilized/yellow + required_oozes = list( + /datum/reagent/slime_ooze/yellow = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/yellow + +/datum/compressor_recipe/crossbreed/stabilized/grey + required_oozes = list( + /datum/reagent/slime_ooze/grey = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/grey + +/datum/compressor_recipe/crossbreed/stabilized/blue + required_oozes = list( + /datum/reagent/slime_ooze/blue = 1000, + ) + output_item = /obj/item/slimecross/stabilized/blue + +/datum/compressor_recipe/crossbreed/stabilized/silver + required_oozes = list( + /datum/reagent/slime_ooze/silver = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/silver + +/datum/compressor_recipe/crossbreed/stabilized/bluespace + required_oozes = list( + /datum/reagent/slime_ooze/bluespace = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/bluespace + +/datum/compressor_recipe/crossbreed/stabilized/sepia + required_oozes = list( + /datum/reagent/slime_ooze/sepia = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/sepia + +/datum/compressor_recipe/crossbreed/stabilized/darkblue + required_oozes = list( + /datum/reagent/slime_ooze/darkblue = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/darkblue + +/datum/compressor_recipe/crossbreed/stabilized/red + required_oozes = list( + /datum/reagent/slime_ooze/red = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/red + +/datum/compressor_recipe/crossbreed/stabilized/green + required_oozes = list( + /datum/reagent/slime_ooze/green = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/green + +/datum/compressor_recipe/crossbreed/stabilized/pink + required_oozes = list( + /datum/reagent/slime_ooze/pink = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/pink + +/datum/compressor_recipe/crossbreed/stabilized/gold + required_oozes = list( + /datum/reagent/slime_ooze/gold = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/gold + +/datum/compressor_recipe/crossbreed/stabilized/oil + required_oozes = list( + /datum/reagent/slime_ooze/oil = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/oil + +/datum/compressor_recipe/crossbreed/stabilized/black + required_oozes = list( + /datum/reagent/slime_ooze/black = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/black + +/datum/compressor_recipe/crossbreed/stabilized/lightpink + required_oozes = list( + /datum/reagent/slime_ooze/lightpink = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/lightpink + +/datum/compressor_recipe/crossbreed/stabilized/adamantine + required_oozes = list( + /datum/reagent/slime_ooze/adamantine = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/adamantine + +/datum/compressor_recipe/crossbreed/stabilized/pyrite + required_oozes = list( + /datum/reagent/slime_ooze/pyrite = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/pyrite + +/datum/compressor_recipe/crossbreed/stabilized/rainbow + required_oozes = list( + /datum/reagent/slime_ooze/rainbow = 500, + /datum/reagent/slime_ooze/blue = 500, + ) + output_item = /obj/item/slimecross/stabilized/rainbow diff --git a/monkestation/code/modules/slimecore/machines/ooze_compressor/shitcode.dm b/monkestation/code/modules/slimecore/machines/ooze_compressor/shitcode.dm new file mode 100644 index 000000000000..a7d46b403e6c --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_compressor/shitcode.dm @@ -0,0 +1,42 @@ +/obj/machinery/plumbing/ooze_compressor/proc/return_color_from_string(string) + switch(string) + if("orange") + return "#FFA500" + if("purple") + return "#B19CD9" + if("blue") + return "#ADD8E6" + if("metal") + return "#7E7E7E" + if("yellow") + return "#FFFF00" + if("dark purple") + return "#551A8B" + if("dark blue") + return "#0000FF" + if("silver") + return "#D3D3D3" + if("bluespace") + return "#32CD32" + if("sepia") + return "#704214" + if("cerulean") + return "#2956B2" + if("pyrite") + return "#FAFAD2" + if("red") + return "#FF0000" + if("green") + return "#00FF00" + if("pink") + return "#FF69B4" + if("gold") + return "#FFD700" + if("oil") + return "#505050" + if("black") + return "#000000" + if("light pink") + return "#FFB6C1" + if("adamantine") + return "#008B8B" diff --git a/monkestation/code/modules/slimecore/machines/ooze_sucker.dm b/monkestation/code/modules/slimecore/machines/ooze_sucker.dm new file mode 100644 index 000000000000..216edb7dfdbe --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/ooze_sucker.dm @@ -0,0 +1,130 @@ +///this cannablizes floor_pump code but rips specific reagents and and such just does stuff itself so it can be expanded easier in the future + +/obj/machinery/plumbing/ooze_sucker + name = "ooze sucker" + icon = 'monkestation/code/modules/slimecore/icons/machinery.dmi' + base_icon_state = "ooze_sucker" + icon_state = "ooze_sucker" + anchored = FALSE + density = FALSE + idle_power_usage = 10 + active_power_usage = 1000 + buffer = 3000 + category="Distribution" + reagent_flags = NO_REACT + + /// Pump is turned on by engineer, etc. + var/turned_on = FALSE + + var/obj/machinery/slime_pen_controller/linked_controller + ///if we have this on mapload we will look in a range for a controller + var/mapping_id + + /// Floor tile is placed down + var/tile_placed = FALSE + + var/processes = 0 + var/processes_required = 5 + + /// Base amount to drain + var/drain_flat = 20 + /// Additional ratio of liquid volume to drain + var/drain_percent = 1 + +/obj/machinery/plumbing/ooze_sucker/Initialize(mapload, bolt, layer) + . = ..() + AddComponent(/datum/component/plumbing/simple_supply, bolt, layer) + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/plumbing/ooze_sucker/LateInitialize() + . = ..() + locate_machinery() + +/obj/machinery/plumbing/ooze_sucker/locate_machinery(multitool_connection) + if(!mapping_id) + return + for(var/obj/machinery/slime_pen_controller/main in GLOB.machines) + if(main.mapping_id != mapping_id) + continue + linked_controller = main + main.linked_sucker = src + return + +/obj/machinery/plumbing/ooze_sucker/examine(mob/user) + . = ..() + . += span_notice("It's currently turned [turned_on ? "ON" : "OFF"].") + + +/obj/machinery/plumbing/ooze_sucker/update_icon_state() + . = ..() + if(turned_on) + icon_state = "[base_icon_state]-on" + else + icon_state = base_icon_state + +/obj/machinery/plumbing/ooze_sucker/default_unfasten_wrench(mob/user, obj/item/I, time = 20) + . = ..() + if(. == SUCCESSFUL_UNFASTEN) + turned_on = FALSE + update_icon_state() + + +/obj/machinery/plumbing/ooze_sucker/proc/toggle_state() + turned_on = !turned_on + update_appearance() + +/obj/machinery/plumbing/ooze_sucker/proc/can_run() + return is_operational \ + && turned_on \ + && anchored \ + && !panel_open \ + && isturf(loc) \ + && are_reagents_ready() + +/obj/machinery/plumbing/ooze_sucker/proc/are_reagents_ready() + return reagents.total_volume < reagents.maximum_volume + +/obj/machinery/plumbing/ooze_sucker/process(seconds_per_tick) + if(!can_run()) + return + + // Determine what tiles should be pumped. We grab from a 3x3 area, + // but overall try to pump the same volume regardless of number of affected tiles + var/turf/local_turf = get_turf(src) + var/list/turf/candidate_turfs = local_turf.get_atmos_adjacent_turfs(alldir = TRUE) + candidate_turfs += local_turf + + var/list/turf/affected_turfs = list() + + for(var/turf/candidate as anything in candidate_turfs) + if(isturf(candidate)) + affected_turfs += candidate + + if(!length(affected_turfs)) + return + + // note that the length was verified to be > 0 directly above and is a local var. + var/multiplier = 1 / length(affected_turfs) + + // We're good, actually pump. + for(var/turf/affected_turf as anything in affected_turfs) + pump_turf(affected_turf, seconds_per_tick, multiplier) + +/obj/machinery/plumbing/ooze_sucker/proc/pump_turf(turf/affected_turf, seconds_per_tick, multiplier) + if(processes < processes_required) + processes++ + return + processes = 0 + if(!affected_turf.liquids || !affected_turf.liquids.liquid_group) + return + + var/target_value = seconds_per_tick * (drain_flat + (affected_turf.liquids.liquid_group.total_reagent_volume * drain_percent)) * multiplier + //Free space handling + var/free_space = reagents.maximum_volume - reagents.total_volume + if(target_value > free_space) + target_value = free_space + + var/datum/liquid_group/targeted_group = affected_turf.liquids.liquid_group + if(!targeted_group.reagents_per_turf) + return + targeted_group.transfer_specific_reagents(reagents, target_value, reagents_to_check = typesof(/datum/reagent/slime_ooze), merge = TRUE) diff --git a/monkestation/code/modules/slimecore/machines/slime_grinder.dm b/monkestation/code/modules/slimecore/machines/slime_grinder.dm new file mode 100644 index 000000000000..4cb79b472b19 --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/slime_grinder.dm @@ -0,0 +1,73 @@ +///your an evil person for grinding poor slimes up into ooze + +/obj/machinery/plumbing/slime_grinder + name = "slime grinder" + desc = "An unholy creation, does not grind the slimes quickly." + + icon = 'monkestation/code/modules/slimecore/icons/slime_grinder.dmi' + icon_state = "slime_grinder_backdrop" + base_icon_state = "slime_grinder_backdrop" + idle_power_usage = 10 + active_power_usage = 1000 + buffer = 3000 + category="Distribution" + + var/grind_time = 5 SECONDS + ///this is the face you see when you start grinding the poor slime up + var/mob/living/basic/slime/poster_boy + ///list of all the slimes we have + var/list/soon_to_be_crushed = list() + ///the amount of souls we have grinded + var/trapped_souls = 0 + ///are we grinding some slimes + var/GRINDING_SOME_SLIMES = FALSE + + +/obj/machinery/plumbing/slime_grinder/Initialize(mapload, bolt, layer) + . = ..() + AddComponent(/datum/component/plumbing/simple_supply, bolt, layer) + +/obj/machinery/plumbing/slime_grinder/attack_hand(mob/living/user, list/modifiers) + . = ..() + if(length(soon_to_be_crushed) && !GRINDING_SOME_SLIMES) + Shake(6, 6, 10 SECONDS) + GRINDING_SOME_SLIMES = TRUE + var/datum/looping_sound/microwave/new_loop = new(src) + new_loop.start() + machine_do_after_visable(src, 10 SECONDS) + GRINDING_SOME_SLIMES = FALSE + new_loop.stop() + playsound(src, 'sound/machines/blender.ogg', 50, TRUE) + grind_slimes() + +/obj/machinery/plumbing/slime_grinder/proc/grind_slimes() + poster_boy = null + update_appearance() + for(var/mob/living/basic/slime/slime as anything in soon_to_be_crushed) + trapped_souls++ + + var/datum/slime_color/current_color = slime.current_color + reagents.add_reagent(current_color.secretion_path, 25) + soon_to_be_crushed -= slime + qdel(slime) + soon_to_be_crushed = list() + +/obj/machinery/plumbing/slime_grinder/update_overlays() + . = ..() + if(poster_boy) + var/mutable_appearance/slime = poster_boy.appearance + . += slime + . += mutable_appearance(icon, "slime_grinder_overlay", layer + 0.1, src) + +/obj/machinery/plumbing/slime_grinder/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) + . = ..() + if(isslime(AM)) + if(!poster_boy) + poster_boy = AM + poster_boy.layer = layer + poster_boy.plane = plane + SEND_SIGNAL(AM, COMSIG_EMOTION_STORE, null, EMOTION_SCARED, "I'm trapped inside a blender, I don't want to die!") + AM.update_appearance() + soon_to_be_crushed |= AM + AM.forceMove(src) + update_appearance() diff --git a/monkestation/code/modules/slimecore/machines/slime_market.dm b/monkestation/code/modules/slimecore/machines/slime_market.dm new file mode 100644 index 000000000000..8e299bec9cda --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/slime_market.dm @@ -0,0 +1,137 @@ +/obj/machinery/slime_market_pad + name = "intergalactic market pad" + desc = "A tall device with a hole for inserting slime extracts. IMPs are widely used for trading small items on large distances all over the galaxy." + icon = 'monkestation/code/modules/slimecore/icons/machinery.dmi' + icon_state = "market_pad" + base_icon_state = "market_pad" + density = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 10 + active_power_usage = 2000 + circuit = /obj/item/circuitboard/machine/slime_market_pad + var/obj/machinery/computer/slime_market/console + +/obj/machinery/slime_market_pad/attackby(obj/item/I, mob/user, params) + if(default_deconstruction_screwdriver(user, icon_state, icon_state, I)) + user.visible_message(span_notice("\The [user] [panel_open ? "opens" : "closes"] the hatch on \the [src]."), span_notice("You [panel_open ? "open" : "close"] the hatch on \the [src].")) + update_appearance() + return TRUE + + if(default_unfasten_wrench(user, I)) + return TRUE + + if(default_deconstruction_crowbar(I)) + return TRUE + + . = ..() + +/obj/machinery/slime_market_pad/examine(mob/user) + . = ..() + if(!panel_open) + . += span_notice("The panel is screwed in.") + +/obj/machinery/slime_market_pad/update_overlays() + . = ..() + if(panel_open) + . += "market_pad-panel" + +/obj/machinery/slime_market_pad/Initialize(mapload) + . = ..() + link_console() + +/obj/machinery/slime_market_pad/AltClick(mob/user) + . = ..() + link_console() + +/obj/machinery/slime_market_pad/proc/link_console() + if(console) + return + + for(var/direction in GLOB.cardinals) + console = locate(/obj/machinery/computer/slime_market, get_step(src, direction)) + if(console) + console.link_market_pad() + break + +/obj/machinery/slime_market_pad/attackby(obj/item/I, mob/living/user, params) + . = ..() + if(!console) + to_chat(user, span_warning("[src] does not have a console linked to it!")) + return + + if(istype(I, /obj/item/slime_extract)) + var/obj/item/slime_extract/extract = I + if(extract.tier == 0) + to_chat(user, span_warning("[src] doesn't seem to accept this extract!")) + return + flick("[base_icon_state]_vend", src) + sell_extract(extract) + return + + else if(istype(I, /obj/item/storage/bag/xeno)) + if(tgui_alert(user, "Are you sure you want to sell all extracts from [I]?", "<3?", list("Yes", "No")) != "Yes") + return + + flick("[base_icon_state]_vend", src) + for(var/obj/item/slime_extract/extract in I) + if(extract.tier == 0) + continue + sell_extract(extract) + return + +/obj/machinery/slime_market_pad/proc/sell_extract(obj/item/slime_extract/extract) + SSresearch.xenobio_points += round(SSresearch.slime_core_prices[extract.type]) + + var/price_mod = rand(SLIME_SELL_MODIFIER_MIN * 10000, SLIME_SELL_MODIFIER_MAX * 10000) / 10000 + var/price_limiter = 1 - ((SSresearch.default_core_prices[extract.tier] * SLIME_SELL_MINIMUM_MODIFIER) / SSresearch.slime_core_prices[extract.type]) + SSresearch.slime_core_prices[extract.type] = (1 + price_mod * price_limiter) * SSresearch.slime_core_prices[extract.type] + + for(var/core_type in SSresearch.slime_core_prices) + if(core_type == extract.type) + continue + + var/obj/item/slime_extract/core = core_type + price_mod = rand(SLIME_SELL_OTHER_MODIFIER_MIN * 100000, SLIME_SELL_OTHER_MODIFIER_MAX * 100000) / 100000 + price_limiter = 1 - (SSresearch.slime_core_prices[core_type] / (SSresearch.default_core_prices[initial(core.tier)] * SLIME_SELL_MAXIMUM_MODIFIER)) + + SSresearch.slime_core_prices[core_type] = (1 + price_mod * price_limiter) * SSresearch.slime_core_prices[core_type] + qdel(extract) + +/obj/machinery/slime_market_pad/attackby_secondary(obj/item/weapon, mob/user, params) + if(!console) + to_chat(user, span_warning("[src] does not have a console linked to it!")) + return + + if(!console.request_pad) + to_chat(user, span_warning("[console] does not have a request_pad linked to it!")) + return + + if(!length(console.request_pad.current_requests)) + to_chat(user, span_warning("There are no current extract requests!")) + return + + if(istype(weapon, /obj/item/slime_extract)) + var/list/radial_choices = list() + var/list/choice_to_request = list() + var/obj/item/slime_extract/extract = weapon + for(var/datum/extract_request_data/current as anything in console.request_pad.current_requests) + if((current.extract_path != extract.type) || current.ready_for_pickup) + continue + radial_choices |= current.radial_data + choice_to_request |= list(current.request_name = current) + + if(!length(radial_choices)) + say("There are no current extract requests that need this extract!") + return + + var/choice = show_radial_menu(user, src, radial_choices, require_near = TRUE, tooltips = TRUE) + if(!choice_to_request[choice]) + return + + var/datum/extract_request_data/chosen = choice_to_request[choice] + chosen.add_extract() + + flick("[base_icon_state]_vend", src) + qdel(extract) + + return diff --git a/monkestation/code/modules/slimecore/machines/slime_market_computer.dm b/monkestation/code/modules/slimecore/machines/slime_market_computer.dm new file mode 100644 index 000000000000..3c86eb44af7a --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/slime_market_computer.dm @@ -0,0 +1,169 @@ +GLOBAL_DATUM(default_slime_market, /obj/machinery/computer/slime_market) + +/obj/machinery/computer/slime_market + name = "slime market console" + desc = "Used to sell slime cores and manage intergalactic slime bounties." + icon = 'monkestation/code/modules/slimecore/icons/machinery.dmi' + icon_state = "market" + icon_screen = "market_screen" + icon_keyboard = "" + keyboard_change_icon = FALSE + light_color = LIGHT_COLOR_LAVENDER + circuit = /obj/item/circuitboard/computer/slime_market + var/obj/machinery/slime_market_pad/market_pad + var/obj/machinery/slime_extract_requestor/request_pad + var/stored_credits = 0 + + var/static/list/slime_shop_items = list() + +/obj/machinery/computer/slime_market/Initialize(mapload, obj/item/circuitboard/C) + . = ..() + if(!GLOB.default_slime_market && is_station_level(z)) + GLOB.default_slime_market = src + + link_market_pad() + +/obj/machinery/computer/slime_market/Destroy() + . = ..() + if(GLOB.default_slime_market == src) + GLOB.default_slime_market = null + + if(market_pad) + market_pad.console = null + if(request_pad) + request_pad.console = null + + request_pad = null + market_pad = null + +/obj/machinery/computer/slime_market/proc/link_market_pad() + if(market_pad) + return + + for(var/direction in GLOB.cardinals) + market_pad = locate(/obj/machinery/slime_market_pad, get_step(src, direction)) + if(market_pad) + market_pad.link_console() + break + + return market_pad + +/obj/machinery/computer/slime_market/attackby(obj/item/weapon, mob/user, params) + if(panel_open) + if(weapon.tool_behaviour == TOOL_MULTITOOL) + if(!multitool_check_buffer(user, weapon)) + return + var/obj/item/multitool/M = weapon + if(!M.buffer) + return + var/obj/machinery/slime_extract_requestor/pad = M.buffer + if(!istype(pad)) + return + pad.console = src + request_pad = pad + to_chat(user, span_notice("You link the [pad] to the [src].")) + . = ..() + +/obj/machinery/computer/slime_market/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/xenobio_market), + ) + +/obj/machinery/computer/slime_market/ui_interact(mob/user, datum/tgui/ui) + . = ..() + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "XenobioMarket", name) + ui.open() + +/obj/machinery/computer/slime_market/ui_static_data(mob/user) + var/list/data = list() + if(!length(slime_shop_items)) + for(var/datum/slime_store_item/subtype as anything in subtypesof(/datum/slime_store_item)) + slime_shop_items += new subtype + + data["shop_items"] = list() + for(var/datum/slime_store_item/listed as anything in slime_shop_items) + var/list/shop_item = list() + shop_item += list( + "name" = listed.name, + "desc" = listed.desc, + "icon_state" = initial(listed.item_path.icon_state), + "cost" = listed.cost, + "item_path" = listed.item_path, + ) + data["shop_items"] += list(shop_item) + return data + +/obj/machinery/computer/slime_market/ui_data() + var/data = list() + var/list/prices = list() + var/list/price_row = list() + var/iter = 1 + for(var/core_type in (subtypesof(/obj/item/slime_extract) - subtypesof(/obj/item/slime_extract/rainbow))) + if(iter % 4 == 1) + prices.Add(list(list("key" = LAZYLEN(prices), "prices" = price_row.Copy()))) + price_row = list() + + if(core_type == /obj/item/slime_extract/grey) + price_row.Add(list(list("key" = iter % 4))) + iter += 1 + + var/obj/item/slime_extract/core = core_type + var/list/core_data = list("icon" = "[initial(core.icon_state)]", + "price" = SSresearch.slime_core_prices[core_type], + "key" = iter % 4, + ) + price_row.Add(list(core_data)) + iter += 1 + + if(core_type == /obj/item/slime_extract/grey) + core = /obj/item/slime_extract/rainbow + var/list/rainbow_core_data = list("icon" = "[initial(core.icon_state)]", + "price" = SSresearch.slime_core_prices[/obj/item/slime_extract/rainbow], + "key" = iter % 4, + ) + price_row.Add(list(rainbow_core_data)) + iter += 1 + price_row.Add(list(list("key" = iter % 4))) + iter += 1 + + data["points"] = SSresearch.xenobio_points + data["prices"] = prices + data["requests"] = list() + if(request_pad) + for(var/datum/extract_request_data/request as anything in request_pad.current_requests) + var/list/request_data = list() + var/obj/item/request_item = request.extract_path + request_data += list( + "icon" = initial(request_item.icon_state), + "amount" = request.extracts_needed, + "name" = request.request_name, + "payout" = request.payout, + "amount_give" = request.extracts_given, + ) + data["requests"] += list(request_data) + + return data + +/obj/machinery/computer/slime_market/ui_act(action, list/params) + . = ..() + if(.) + return + + switch(action) + if("buy") + for(var/datum/slime_store_item/item as anything in slime_shop_items) + if(text2path(params["path"]) == item.item_path) + try_buy(item) + return TRUE + +/obj/machinery/computer/slime_market/proc/return_extracts(obj/item/slime_extract/type, amount) + for(var/i in 1 to amount) + new type(loc) + +/obj/machinery/computer/slime_market/proc/try_buy(datum/slime_store_item/attempt) + if(SSresearch.xenobio_points < attempt.cost) + return + new attempt.item_path(get_turf(src)) + SSresearch.xenobio_points -= attempt.cost diff --git a/monkestation/code/modules/slimecore/machines/slime_pen_controller.dm b/monkestation/code/modules/slimecore/machines/slime_pen_controller.dm new file mode 100644 index 000000000000..e071ac929ecb --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/slime_pen_controller.dm @@ -0,0 +1,189 @@ +/obj/item/wallframe/slime_pen_controller + name = "slime pen management frame" + desc = "Used for building slime pen consoles." + icon_state = "button" + result_path = /obj/machinery/slime_pen_controller + custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT) + pixel_shift = 24 + + +/obj/machinery/slime_pen_controller + name = "slime pen management console" + desc = "It seems most of the features are locked down, the developers must have been pretty lazy. Can turn the ooze sucker on and off though. Can link a sucker to this using a multitool." + + icon = 'monkestation/code/modules/slimecore/icons/machinery.dmi' + base_icon_state = "slime_panel" + icon_state = "slime_panel" + + var/obj/machinery/plumbing/ooze_sucker/linked_sucker + var/datum/corral_data/linked_data + var/mapping_id + +/obj/machinery/slime_pen_controller/Initialize(mapload) + . = ..() + register_context() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/slime_pen_controller/LateInitialize() + . = ..() + locate_machinery() + + +/obj/machinery/slime_pen_controller/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + + if(linked_sucker) + context[SCREENTIP_CONTEXT_RMB] = "Toggle Linked Scrubber" + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/slime_pen_controller/ui_interact(mob/user, datum/tgui/ui) + . = ..() + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "SlimePenController", "[src]") + ui.open() + +/obj/machinery/slime_pen_controller/ui_data(mob/user) + . = ..() + var/list/data = list() + if(!linked_data) + data["slimes"] = list() + data["corral_upgrades"] = list() + data["buyable_upgrades"] = list() + + else + data["slimes"] = list() + linked_data.update_slimes() + for(var/mob/living/basic/slime/slime as anything in linked_data.managed_slimes) + var/list/slime_data = list() + slime_data += list( + "name" = slime.name, + "health" = round((slime.health / slime.maxHealth) * 100), + "slime_color" = capitalize(slime.current_color.name), + "hunger_precent" = slime.hunger_precent, + "mutation_chance" = slime.mutation_chance, + "accessory" = slime.worn_accessory ? slime.worn_accessory.name : "None", + ) + slime_data["possible_mutations"] = list() + for(var/datum/slime_mutation_data/mutation_data as anything in slime.possible_color_mutations) + var/list/mutation_info = list() + var/mob_string + for(var/mob/living/mob as anything in mutation_data.latch_needed) + mob_string += "[mutation_data.latch_needed[mob]] units of genetic data from [initial(mob.name)]. \n" + var/item_string + for(var/obj/item/item as anything in mutation_data.needed_items) + item_string += "[initial(item.name)]. \n" + + mutation_info += list( + "color" = capitalize(initial(mutation_data.output.name)), + "weight" = mutation_data.weight, + "mutate_chance" = mutation_data.mutate_probability, + "mobs_needed" = mob_string, + "items_needed" = item_string, + ) + slime_data["possible_mutations"] += list(mutation_info) + + slime_data["traits"] = list() + for(var/datum/slime_trait/trait as anything in slime.slime_traits) + var/list/trait_data = list() + trait_data += list( + "name" = trait.name, + "desc" = trait.desc, + "food" = (FOOD_CHANGE in trait.menu_buttons), + "environment" = (ENVIRONMENT_CHANGE in trait.menu_buttons), + "behaviour" = (BEHAVIOUR_CHANGE in trait.menu_buttons), + "danger" = (DANGEROUS_CHANGE in trait.menu_buttons), + "docile" = (DOCILE_CHANGE in trait.menu_buttons), + ) + slime_data["traits"] += list(trait_data) + + data["slimes"] += list(slime_data) + + data["corral_upgrades"] = list() + for(var/datum/corral_upgrade/upgrade as anything in linked_data.corral_upgrades) + data["corral_upgrades"] += list(list( + "name" = upgrade.name, + "desc" = upgrade.desc, + )) + + data["buyable_upgrades"] = list() + for(var/datum/corral_upgrade/listed as anything in subtypesof(/datum/corral_upgrade)) + var/list/upgrade_data = list() + upgrade_data += list( + "name" = listed.name, + "desc" = listed.desc, + "cost" = listed.cost, + "owned" = (listed in linked_data.corral_upgrades), + "path" = listed.type, + ) + data["buyable_upgrades"] += list(upgrade_data) + + data["reagent_amount"] = 0 + data["reagent_data"] = list() + if(linked_sucker) + data["reagent_amount"] = linked_sucker.reagents.total_volume + data["reagent_data"] = list() + for(var/datum/reagent/reagent as anything in linked_sucker.reagents.reagent_list) + data["reagent_data"] += list(list( + "name" = reagent.name, + "amount" = reagent.volume, + )) + + return data + +/obj/machinery/slime_pen_controller/ui_act(action, list/params) + . = ..() + if(.) + return + + switch(action) + if("buy") + for(var/datum/corral_upgrade/item as anything in subtypesof(/datum/corral_upgrade)) + if(text2path(params["path"]) == item) + try_buy(item) + return TRUE + +/obj/machinery/slime_pen_controller/proc/try_buy(datum/corral_upgrade/item) + if(!linked_data) + return + if(SSresearch.xenobio_points < initial(item.cost)) + return + + var/datum/corral_upgrade/new_upgrade = new item + SSresearch.xenobio_points -= new_upgrade.cost + new_upgrade.on_add(linked_data) + linked_data.corral_upgrades |= new_upgrade + +/obj/machinery/slime_pen_controller/locate_machinery(multitool_connection) + if(!mapping_id) + return + for(var/obj/machinery/plumbing/ooze_sucker/main in GLOB.machines) + if(main.mapping_id != mapping_id) + continue + linked_sucker = main + main.linked_controller = src + return + +/obj/machinery/slime_pen_controller/attack_hand_secondary(mob/user, list/modifiers) + if(linked_sucker) + visible_message(span_notice("[user] fiddles with the [src] toggling the pens ooze sucker.")) + linked_sucker.toggle_state() + return TRUE + . = ..() + +/obj/machinery/slime_pen_controller/attackby(obj/item/weapon, mob/user, params) + if(weapon.tool_behaviour == TOOL_MULTITOOL) + if(!multitool_check_buffer(user, weapon)) + return + var/obj/item/multitool/M = weapon + if(!M.buffer) + return + var/obj/machinery/corral_corner/pad = M.buffer + if(!istype(pad)) + return + if(!pad.connected_data) + return + linked_data = pad.connected_data + to_chat(user, span_notice("You link the [pad] to the [src].")) + return + . = ..() diff --git a/monkestation/code/modules/slimecore/machines/slime_store/_base_item.dm b/monkestation/code/modules/slimecore/machines/slime_store/_base_item.dm new file mode 100644 index 000000000000..8c51a33c63f4 --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/slime_store/_base_item.dm @@ -0,0 +1,5 @@ +/datum/slime_store_item + var/name = "Generic Store Item" + var/desc = "A generic store item description." + var/obj/item/item_path + var/cost = 1000 diff --git a/monkestation/code/modules/slimecore/machines/slime_store/mutators.dm b/monkestation/code/modules/slimecore/machines/slime_store/mutators.dm new file mode 100644 index 000000000000..19130ddef486 --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/slime_store/mutators.dm @@ -0,0 +1,53 @@ +/datum/slime_store_item/cleaner_mutation + name = "Cleaner Slime Mutation Syringe" + desc = "Adds the Cleaner Slime mutation to a single slime." + item_path = /obj/item/slime_mutation_syringe/cleaner + cost = 2500 + +/datum/slime_store_item/polluter_mutation + name = "Polluter Slime Mutation Syringe" + desc = "Adds the Polluter Slime mutation to a single slime." + item_path = /obj/item/slime_mutation_syringe/polluter + cost = 2500 + +/datum/slime_store_item/cat_mutation + name = "Gooey Cat Slime Mutation Syringe" + desc = "Adds the Gooey Cat Slime mutation to a single slime." + item_path = /obj/item/slime_mutation_syringe/gooey_cat + cost = 2500 + +/datum/slime_store_item/radioactive_mutation + name = "Radioactive Slime Mutation Syringe" + desc = "Adds the Radioactive Slime mutation to a single slime." + item_path = /obj/item/slime_mutation_syringe/radioactive + cost = 5000 + +/datum/slime_store_item/neverchanging_mutation + name = "Never Changing Slime Mutation Syringe" + desc = "Adds the Never Changing Slime mutation to a single slime." + item_path = /obj/item/slime_mutation_syringe/never_evolving + cost = 2500 + +/datum/slime_store_item/noooze_mutation + name = "No Ooze Mutation Syringe" + desc = "Adds the No Ooze Slime mutation to a single slime." + item_path = /obj/item/slime_mutation_syringe/never_ooze + cost = 2500 + +/datum/slime_store_item/random_color_mutator + name = "Random Color Mutation Syringe" + desc = "Adds the No Ooze Slime mutation to a single slime." + item_path = /obj/item/slime_mutation_syringe_random + cost = 3000 + +/datum/slime_store_item/soda_slime + name = "Soda Slime Mutation Syringe" + desc = "Adds the soda slime mutation to a single slime." + item_path = /obj/item/slime_mutation_syringe/soda_slime + cost = 3000 + +/datum/slime_store_item/beer_slime + name = "Beer Slime Mutation Syringe" + desc = "Adds the beer slime mutation to a single slime." + item_path = /obj/item/slime_mutation_syringe/beer_slime + cost = 3000 diff --git a/monkestation/code/modules/slimecore/machines/slime_store/vac_upgrades.dm b/monkestation/code/modules/slimecore/machines/slime_store/vac_upgrades.dm new file mode 100644 index 000000000000..b0a9a913926a --- /dev/null +++ b/monkestation/code/modules/slimecore/machines/slime_store/vac_upgrades.dm @@ -0,0 +1,5 @@ +/datum/slime_store_item/biomass_vac + name = "Slime Vac Biomass Link Upgrade" + desc = "A module for the slime vac that lets you link with a biomass recycler." + item_path = /obj/item/disk/vacuum_upgrade/biomass + cost = 1000 diff --git a/monkestation/code/modules/slimecore/mobs/_base_slime.dm b/monkestation/code/modules/slimecore/mobs/_base_slime.dm new file mode 100644 index 000000000000..dfbe5d102b8a --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/_base_slime.dm @@ -0,0 +1,467 @@ +/mob/living/basic/slime + name = "grey baby slime (123)" + icon = 'monkestation/code/modules/slimecore/icons/slimes.dmi' + icon_state = "grey baby slime" + base_icon_state = "grey baby slime" + icon_dead = "grey baby slime dead" + + maxHealth = 150 + health = 150 + + ai_controller = /datum/ai_controller/basic_controller/slime + density = FALSE + + maximum_survivable_temperature = 2000 + + pass_flags = PASSTABLE | PASSGRILLE + gender = NEUTER + faction = list(FACTION_SLIME) + + melee_damage_lower = 5 + melee_damage_upper = 15 + + //emote_see = list("jiggles", "bounces in place") + speak_emote = list("blorbles") + bubble_icon = "slime" + initial_language_holder = /datum/language_holder/slime + + + response_help_continuous = "pets" + response_help_simple = "pet" + attack_verb_continuous = "glomps" + attack_verb_simple = "glomp" + + verb_say = "blorbles" + verb_ask = "inquisitively blorbles" + verb_exclaim = "loudly blorbles" + verb_yell = "loudly blorbles" + + can_be_held = TRUE + + minimum_survivable_temperature = 100 + maximum_survivable_temperature = 600 + + // canstun and canknockdown don't affect slimes because they ignore stun and knockdown variables + // for the sake of cleanliness, though, here they are. + status_flags = CANUNCONSCIOUS|CANPUSH + + ///we track flags for slimes here like ADULT_SLIME, and PASSIVE_SLIME + var/slime_flags = NONE + + ///our current datum for slime color + var/datum/slime_color/current_color = /datum/slime_color/grey + ///this is our last cached hunger precentage between 0 and 1 + var/hunger_precent = 0 + ///how much hunger we need to produce + var/production_precent = 0.6 + ///our list of slime traits + var/list/slime_traits = list() + ///used to help our name changes so we don't rename named slimes + var/static/regex/slime_name_regex = new("\\w+ (baby|adult) slime \\(\\d+\\)") + ///our number + var/number + + ///list of all possible mutations + var/list/possible_color_mutations = list() + + var/list/compiled_liked_foods = list() + ///this is our list of trait foods + var/list/trait_foods = list() + ///the in progress mutation used for descs + var/datum/slime_color/mutating_into + ///this is our mutation chance + var/mutation_chance = 30 + + var/obj/item/slime_accessory/worn_accessory + + ///this is a list of trees that we replace goes from base = replaced + var/list/replacement_trees = list() + ///this is our emotion overlay states + var/list/emotion_states = list( + EMOTION_HAPPY = "aslime-happy", + EMOTION_SAD = "aslime-sad", + EMOTION_ANGER = "aslime-angry", + EMOTION_FUNNY = "aslime-mischevous", + EMOTION_SCARED = "aslime-scared", + EMOTION_SUPRISED = "aslime-happy", + EMOTION_HUNGRY = "aslime-pout", + ) + + ///if set and with the trait replaces the grey part with this + var/icon_state_override + var/overwrite_color + var/datum/reagent/chemical_injection + var/overriding_name_prefix + + + /// Commands you can give this carp once it is tamed, not static because subtypes can modify it + var/friendship_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/follow, + /datum/pet_command/point_targeting/attack/latch, + /datum/pet_command/stop_eating, + ) + ///the amount of ooze we produce + var/ooze_production = 10 + +/mob/living/basic/slime/Initialize(mapload, datum/slime_color/passed_color) + . = ..() + AddElement(/datum/element/footstep, FOOTSTEP_MOB_SLIME, 0.5, -11) + AddElement(/datum/element/soft_landing) + + ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_CAREFUL_STEPS, INNATE_TRAIT) + + if(!passed_color) + current_color = new current_color + else + current_color = new passed_color + current_color.on_add_to_slime(src) + + AddComponent(/datum/component/obeys_commands, friendship_commands) + + AddComponent(/datum/component/liquid_secretion, current_color.secretion_path, ooze_production, 10 SECONDS, TYPE_PROC_REF(/mob/living/basic/slime, check_secretion)) + AddComponent(/datum/component/generic_mob_hunger, 400, 0.1, 5 MINUTES, 200) + AddComponent(/datum/component/scared_of_item, 5) + AddComponent(/datum/component/emotion_buffer, emotion_states) + AddComponent(/datum/component/friendship_container, list(FRIENDSHIP_HATED = -100, FRIENDSHIP_DISLIKED = -50, FRIENDSHIP_STRANGER = 0, FRIENDSHIP_NEUTRAL = 10, FRIENDSHIP_ACQUAINTANCES = 25, FRIENDSHIP_FRIEND = 50, FRIENDSHIP_BESTFRIEND = 100), FRIENDSHIP_FRIEND) + + RegisterSignal(src, COMSIG_HUNGER_UPDATED, PROC_REF(hunger_updated)) + RegisterSignal(src, COMSIG_MOB_OVERATE, PROC_REF(attempt_change)) + + for(var/datum/slime_mutation_data/listed as anything in current_color.possible_mutations) + var/datum/slime_mutation_data/data = new listed + data.on_add_to_slime(src) + possible_color_mutations += data + if(length(data.needed_items)) + compiled_liked_foods |= data.needed_items + + update_slime_varience() + if(length(compiled_liked_foods)) + recompile_ai_tree() + + +/mob/living/basic/slime/death(gibbed) + . = ..() + if(buckled) + buckled?.unbuckle_all_mobs() + +/mob/living/basic/slime/Destroy() + . = ..() + for(var/datum/slime_trait/trait as anything in slime_traits) + remove_trait(trait) + UnregisterSignal(src, COMSIG_HUNGER_UPDATED) + UnregisterSignal(src, COMSIG_MOB_OVERATE) + + for(var/datum/slime_mutation_data/mutation as anything in possible_color_mutations) + qdel(mutation) + + QDEL_NULL(current_color) + +/mob/living/basic/slime/mob_try_pickup(mob/living/user, instant) + if(!SEND_SIGNAL(src, COMSIG_FRIENDSHIP_CHECK_LEVEL, user, FRIENDSHIP_FRIEND)) + to_chat(user, span_notice("[src] doesn't trust you enough to let you pick them up")) + return FALSE + . = ..() + +/mob/living/basic/slime/examine(mob/user) + . = ..() + if(SEND_SIGNAL(src, COMSIG_FRIENDSHIP_CHECK_LEVEL, user, FRIENDSHIP_FRIEND)) + if(SEND_SIGNAL(src, COMSIG_FRIENDSHIP_CHECK_LEVEL, user, FRIENDSHIP_BESTFRIEND)) + . += span_notice("You are one of [src]'s best friends!") + else + . += span_notice("You are one of [src]'s friends") + +/mob/living/basic/slime/resolve_right_click_attack(atom/target, list/modifiers) + if(GetComponent(/datum/component/latch_feeding)) + unbuckle_all_mobs() + return + else if(CanReach(target) && !HAS_TRAIT(target, TRAIT_LATCH_FEEDERED)) + AddComponent(/datum/component/latch_feeding, target, TOX, 2, 4, FALSE, CALLBACK(src, TYPE_PROC_REF(/mob/living/basic/slime, latch_callback), target)) + return + . = ..() + + +/mob/living/basic/slime/proc/rebuild_foods() + compiled_liked_foods |= trait_foods + +/mob/living/basic/slime/proc/recompile_ai_tree() + var/list/new_planning_subtree = list() + rebuild_foods() + + RemoveElement(/datum/element/basic_eating) + + new_planning_subtree |= add_or_replace_tree(/datum/ai_planning_subtree/pet_planning) + + if(!HAS_TRAIT(src, TRAIT_SLIME_RABID)) + new_planning_subtree |= add_or_replace_tree(/datum/ai_planning_subtree/simple_find_nearest_target_to_flee_has_item) + new_planning_subtree |= add_or_replace_tree(/datum/ai_planning_subtree/flee_target) + + if(slime_flags & CLEANER_SLIME) + new_planning_subtree |= add_or_replace_tree(/datum/ai_planning_subtree/cleaning_subtree) + + if(!(slime_flags & PASSIVE_SLIME)) + new_planning_subtree |= add_or_replace_tree(/datum/ai_planning_subtree/simple_find_target_no_trait/slime) + + if(length(compiled_liked_foods)) + AddElement(/datum/element/basic_eating, food_types = compiled_liked_foods) + new_planning_subtree |= add_or_replace_tree(/datum/ai_planning_subtree/find_food) + ai_controller.override_blackboard_key(BB_BASIC_FOODS, compiled_liked_foods) //since list we override + + new_planning_subtree |= add_or_replace_tree(/datum/ai_planning_subtree/basic_melee_attack_subtree/slime) + + ai_controller.replace_planning_subtrees(new_planning_subtree) + +/mob/living/basic/slime/proc/add_or_replace_tree(datum/ai_planning_subtree/checker) + if(checker in replacement_trees) + return replacement_trees[checker] + return checker + +/mob/living/basic/slime/proc/update_slime_varience() + var/prefix = "grey" + if(icon_state_override) + prefix = icon_state_override + else + prefix = current_color.icon_prefix + + if(slime_flags & ADULT_SLIME) + icon_state = "[prefix] adult slime" + icon_dead = "[prefix] baby slime dead" + else + icon_state = "[prefix] baby slime" + icon_dead = "[prefix] baby slime dead" + + if(stat == DEAD) + icon_state = icon_dead + + update_name() + if(!chemical_injection) + SEND_SIGNAL(src, COMSIG_SECRETION_UPDATE, current_color.secretion_path, ooze_production, 10 SECONDS) + else + SEND_SIGNAL(src, COMSIG_SECRETION_UPDATE, chemical_injection, ooze_production, 10 SECONDS) + +/mob/living/basic/slime/update_overlays() + . = ..() + if(worn_accessory) + if(slime_flags & ADULT_SLIME) + .+= mutable_appearance(worn_accessory.accessory_icon, "[worn_accessory.accessory_icon_state]-adult", layer + 0.15, src, appearance_flags = (KEEP_APART | RESET_COLOR)) + else + .+= mutable_appearance(worn_accessory.accessory_icon, "[worn_accessory.accessory_icon_state]-baby", layer + 0.15, src, appearance_flags = (KEEP_APART | RESET_COLOR)) + +/mob/living/basic/slime/proc/check_secretion() + if((!(slime_flags & ADULT_SLIME)) || (slime_flags & STORED_SLIME) || (slime_flags & MUTATING_SLIME) || (slime_flags & NOOOZE_SLIME)) + return FALSE + if(stat == DEAD) + return FALSE + if(hunger_precent < production_precent) + return FALSE + return TRUE + +/mob/living/basic/slime/proc/hunger_updated(datum/source, current_hunger, max_hunger) + hunger_precent = current_hunger / max_hunger + if(hunger_precent > 0.6) + slime_flags |= ADULT_SLIME + else + slime_flags &= ~ADULT_SLIME + update_slime_varience() + update_appearance() + +/mob/living/basic/slime/proc/add_trait(datum/slime_trait/added_trait) + for(var/datum/slime_trait/trait as anything in slime_traits) + if(added_trait in trait.incompatible_traits) + return FALSE + + var/datum/slime_trait/new_trait = new added_trait + new_trait.on_add(src) + slime_traits += new_trait + return TRUE + +///unlike add trait this uses a type and is checked against the list don't pass the created one pass the type +/mob/living/basic/slime/proc/remove_trait(datum/slime_trait/removed_trait) + for(var/datum/slime_trait/trait as anything in slime_traits) + if(trait.type != removed_trait) + continue + slime_traits -= trait + qdel(trait) + return + +///unlike add trait this uses a type and is checked against the list don't pass the created one pass the type +/mob/living/basic/slime/proc/has_slime_trait(datum/slime_trait/checked_trait) + for(var/datum/slime_trait/trait as anything in slime_traits) + if(trait.type != checked_trait) + continue + return TRUE + return FALSE + +/mob/living/basic/slime/update_name() + if(slime_name_regex.Find(name)) + if(!number) + number = rand(1, 1000) + if(overriding_name_prefix) + name = "[overriding_name_prefix] [current_color.name] [(slime_flags & ADULT_SLIME) ? "adult" : "baby"] slime ([number])" + else + name = "[current_color.name] [(slime_flags & ADULT_SLIME) ? "adult" : "baby"] slime ([number])" + real_name = name + return ..() + +/mob/living/basic/slime/proc/start_split() + ai_controller.set_ai_status(AI_STATUS_OFF) + slime_flags |= SPLITTING_SLIME + + visible_message(span_notice("[name] starts to flatten, it looks to be splitting.")) + + addtimer(CALLBACK(src, PROC_REF(finish_splitting)), 15 SECONDS) + +/mob/living/basic/slime/proc/finish_splitting() + SEND_SIGNAL(src, COMSIG_MOB_ADJUST_HUNGER, -200) + update_slime_varience() + + slime_flags &= ~SPLITTING_SLIME + ai_controller.set_ai_status(AI_STATUS_ON) + + var/mob/living/basic/slime/new_slime = new(loc, current_color.type) + new_slime.mutation_chance = mutation_chance + for(var/datum/slime_trait/trait as anything in slime_traits) + new_slime.add_trait(trait.type) + +/mob/living/basic/slime/proc/start_mutating(random = FALSE) + if(!pick_mutation(random)) + return FALSE + + ai_controller.set_ai_status(AI_STATUS_OFF) + visible_message(span_notice("[name] starts to undulate, it looks to be mutating.")) + slime_flags |= MUTATING_SLIME + + ungulate() + + + addtimer(CALLBACK(src, PROC_REF(finish_mutating)), 30 SECONDS) + mutation_chance = 30 + return TRUE + +/mob/living/basic/slime/proc/change_color(datum/slime_color/new_color) + var/datum/slime_color/new_slime_color = new new_color + QDEL_NULL(current_color) + current_color = new_slime_color + new_slime_color.on_add_to_slime(src) + + update_slime_varience() + + compiled_liked_foods = list() + + QDEL_LIST(possible_color_mutations) + possible_color_mutations = list() + + for(var/datum/slime_mutation_data/listed as anything in current_color.possible_mutations) + var/datum/slime_mutation_data/data = new listed + data.on_add_to_slime(src) + possible_color_mutations += data + if(length(data.needed_items)) + compiled_liked_foods |= data.needed_items + + recompile_ai_tree() + +/mob/living/basic/slime/proc/finish_mutating() + animate(src) // empty animate to break ungulating + if(!mutating_into) + return + SEND_SIGNAL(src, COMSIG_MOB_ADJUST_HUNGER, -200) + change_color(mutating_into) + + slime_flags &= ~MUTATING_SLIME + ai_controller.set_ai_status(AI_STATUS_ON) + + +/mob/living/basic/slime/proc/pick_mutation(random = FALSE) + mutating_into = null + var/list/valid_choices = list() + for(var/datum/slime_mutation_data/listed as anything in possible_color_mutations) + if(!random && !listed.can_mutate) + continue + if(random && listed.syringe_blocked) + continue + valid_choices += listed + valid_choices[listed] = listed.weight + if(!length(valid_choices)) + return FALSE + + var/datum/slime_mutation_data/picked = pick_weight(valid_choices) + if(!picked) + return FALSE + mutating_into = picked.output + return TRUE + +/mob/living/basic/slime/proc/attempt_change(datum/source, hunger_precent) + if(slime_flags & NOEVOLVE_SLIME) + return + if(prob(mutation_chance)) // we try to mutate 30% of the time + if(!start_mutating()) + start_split() + else + mutation_chance += 10 + start_split() + +/mob/living/basic/slime/attackby(obj/item/attacking_item, mob/living/user, params) + . = ..() + if(!istype(attacking_item, /obj/item/slime_accessory)) + return + worn_accessory = attacking_item + attacking_item.forceMove(src) + update_appearance() + +/mob/living/basic/slime/attack_hand(mob/living/carbon/human/user, list/modifiers) + . = ..() + if(worn_accessory) + visible_message("[user] takes the [worn_accessory] off the [src].") + worn_accessory = null + worn_accessory.forceMove(get_turf(user)) + update_appearance() + +/mob/living/basic/slime/Life(seconds_per_tick, times_fired) + if(isopenturf(loc)) + var/turf/open/my_our_turf = loc + if(my_our_turf.pollution) + my_our_turf.pollution.touch_act(src) + . = ..() + +/mob/living/basic/slime/proc/apply_water() + adjustBruteLoss(rand(15,20)) + if(!client) + if(buckled) + unbuckle_mob(buckled, TRUE) + return + +/mob/living/basic/slime/proc/latch_callback(mob/living/target) + if(!chemical_injection) + return FALSE + if(!target.reagents) + return FALSE + target.reagents.add_reagent(chemical_injection, 3) // guh + return TRUE + +/mob/living/basic/slime/rainbow + current_color = /datum/slime_color/rainbow + +/mob/living/basic/slime/random + +/mob/living/basic/slime/random/Initialize(mapload, datum/slime_color/passed_color) + current_color = pick(subtypesof(/datum/slime_color)) + . = ..() + +/mob/living/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + if(HAS_TRAIT(src, VACPACK_THROW)) + REMOVE_TRAIT(src, VACPACK_THROW, "vacpack") + pass_flags &= ~PASSMOB + +/mob/living/basic/slime/throw_at(atom/target, range, speed, mob/thrower, spin, diagonals_first, datum/callback/callback, force, gentle, quickstart) + force = 0 + . = ..() + +/mob/living/basic/slime/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + if(SEND_SIGNAL(src, COMSIG_FRIENDSHIP_CHECK_LEVEL, throwingdatum.thrower, FRIENDSHIP_FRIEND)) + if(!HAS_TRAIT(hit_atom, TRAIT_LATCH_FEEDERED) && isliving(hit_atom)) + AddComponent(/datum/component/latch_feeding, hit_atom, TOX, 2, 4, FALSE, CALLBACK(src, PROC_REF(latch_callback), hit_atom), FALSE) + visible_message(span_danger("[throwingdatum.thrower] hucks [src] at [hit_atom] causing the [src] to stick to [hit_atom].")) diff --git a/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/clean_target.dm b/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/clean_target.dm new file mode 100644 index 000000000000..36172a0bb356 --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/clean_target.dm @@ -0,0 +1,42 @@ +/datum/ai_behavior/execute_clean + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH + +/datum/ai_behavior/execute_clean/setup(datum/ai_controller/controller, target_key) + . = ..() + var/turf/target = controller.blackboard[target_key] + if(isnull(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/execute_clean/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() + var/mob/living/basic/living_pawn = controller.pawn + var/atom/target = controller.blackboard[target_key] + + if(QDELETED(target)) + finish_action(controller, FALSE, target_key) + return + + living_pawn.visible_message(span_notice("[living_pawn] dissolves the [target].")) + SEND_SIGNAL(living_pawn, COMSIG_MOB_FEED, target, 20) + qdel(target) // Sent to the shadow realm to never be seen again + finish_action(controller, TRUE, target_key) + +/datum/ai_behavior/execute_clean/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target) || is_type_in_typecache(target, controller.blackboard[BB_HUNTABLE_TRASH])) + return + if(!iscarbon(target)) + controller.clear_blackboard_key(target_key) + return + controller.clear_blackboard_key(target_key) + +/datum/ai_behavior/find_and_set/in_list/clean_targets + action_cooldown = 2 SECONDS + +/datum/ai_behavior/find_and_set/in_list/clean_targets/search_tactic(datum/ai_controller/controller, locate_paths, search_range) + var/list/found = typecache_filter_list(oview(search_range, controller.pawn), locate_paths) + if(length(found)) + return pick(found) + diff --git a/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/feed.dm b/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/feed.dm new file mode 100644 index 000000000000..9e19ada40e61 --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/feed.dm @@ -0,0 +1,22 @@ +/datum/ai_behavior/basic_melee_attack/try_latch_feed + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + terminate_after_action = TRUE + melee_attacks = FALSE + +/datum/ai_behavior/basic_melee_attack/try_latch_feed/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) + var/mob/living/basic/basic_mob = controller.pawn + if(HAS_TRAIT(basic_mob, TRAIT_FEEDING)) + return FALSE + . = ..() + +/datum/ai_behavior/basic_melee_attack/try_latch_feed/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) + if(SEND_SIGNAL(controller.pawn, COMSIG_FRIENDSHIP_CHECK_LEVEL, controller.blackboard[target_key], FRIENDSHIP_FRIEND)) + controller.clear_blackboard_key(target_key) + else if(succeeded && isliving(controller.blackboard[target_key])) + var/atom/target = controller.blackboard[target_key] + var/mob/living/basic/slime/basic_mob = controller.pawn + if(basic_mob.CanReach(target) && !HAS_TRAIT(target, TRAIT_LATCH_FEEDERED)) + basic_mob.AddComponent(/datum/component/latch_feeding, target, TOX, 2, 4, FALSE, CALLBACK(basic_mob, TYPE_PROC_REF(/mob/living/basic/slime, latch_callback), target)) + controller.clear_blackboard_key(target_key) + . = ..() + diff --git a/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/find_target_without_trait.dm b/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/find_target_without_trait.dm new file mode 100644 index 000000000000..4e8fae2271b3 --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/find_target_without_trait.dm @@ -0,0 +1,82 @@ +/datum/ai_behavior/find_potential_targets_without_trait + action_cooldown = 2 SECONDS + /// How far can we see stuff? + var/vision_range = 9 + /// Blackboard key for aggro range, uses vision range if not specified + var/aggro_range_key = BB_AGGRO_RANGE + /// Static typecache list of potentially dangerous objs + var/static/list/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/vehicle/sealed/mecha)) + ///our max size + var/checks_size = FALSE + +/datum/ai_behavior/find_potential_targets_without_trait/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, trait) + . = ..() + var/mob/living/living_mob = controller.pawn + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) + + if(!targeting_strategy) + CRASH("No target datum was supplied in the blackboard for [controller.pawn]") + + var/atom/current_target = controller.blackboard[target_key] + if (targeting_strategy.can_attack(living_mob, current_target, vision_range)) + finish_action(controller, succeeded = FALSE) + return + + var/aggro_range = controller.blackboard[aggro_range_key] || vision_range + + controller.clear_blackboard_key(target_key) + var/list/potential_targets = hearers(aggro_range, controller.pawn) - living_mob //Remove self, so we don't suicide + + for(var/HM in typecache_filter_list(range(aggro_range, living_mob), hostile_machines)) //Can we see any hostile machines? + if(can_see(living_mob, HM, aggro_range)) + potential_targets += HM + + if(!potential_targets.len) + finish_action(controller, succeeded = FALSE) + return + + var/list/filtered_targets = list() + + for(var/mob/living/pot_target in potential_targets) + if(HAS_TRAIT(pot_target, trait)) + continue + + if(SEND_SIGNAL(controller.pawn, COMSIG_FRIENDSHIP_CHECK_LEVEL, pot_target, FRIENDSHIP_FRIEND)) + continue + + if(pot_target.client && controller.blackboard[BB_WONT_TARGET_CLIENTS]) + continue + + if(checks_size && pot_target.mob_size >= living_mob.mob_size)///hello shitcode department? + continue + + if(targeting_strategy.can_attack(living_mob, pot_target))//Can we attack it? + filtered_targets += pot_target + continue + + if(!filtered_targets.len) + finish_action(controller, succeeded = FALSE) + return + + var/atom/target = pick_final_target(controller, filtered_targets) + controller.set_blackboard_key(target_key, target) + + var/atom/potential_hiding_location = targeting_strategy.find_hidden_mobs(living_mob, target) + + if(potential_hiding_location) //If they're hiding inside of something, we need to know so we can go for that instead initially. + controller.set_blackboard_key(hiding_location_key, potential_hiding_location) + + finish_action(controller, succeeded = TRUE) + +/datum/ai_behavior/find_potential_targets_without_trait/finish_action(datum/ai_controller/controller, succeeded, ...) + . = ..() + if (succeeded) + controller.CancelActions() // On retarget cancel any further queued actions so that they will setup again with new target + +/// Returns the desired final target from the filtered list of targets +/datum/ai_behavior/find_potential_targets_without_trait/proc/pick_final_target(datum/ai_controller/controller, list/filtered_targets) + return pick(filtered_targets) + + +/datum/ai_behavior/find_potential_targets_without_trait/smaller + checks_size = TRUE diff --git a/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/flee_from_item.dm b/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/flee_from_item.dm new file mode 100644 index 000000000000..2046f2e14e9d --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/flee_from_item.dm @@ -0,0 +1,76 @@ +/datum/ai_behavior/find_potential_targets_with_item + action_cooldown = 2 SECONDS + /// How far can we see stuff? + var/vision_range = 9 + /// Blackboard key for aggro range, uses vision range if not specified + var/aggro_range_key = BB_AGGRO_RANGE + /// Static typecache list of potentially dangerous objs + var/static/list/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/vehicle/sealed/mecha)) + +/datum/ai_behavior/find_potential_targets_with_item/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, scared_item_key) + . = ..() + var/mob/living/living_mob = controller.pawn + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) + var/obj/item/scared_item_path = controller.blackboard[scared_item_key] + + if(!targeting_strategy) + CRASH("No target datum was supplied in the blackboard for [controller.pawn]") + + var/atom/current_target = controller.blackboard[target_key] + if (targeting_strategy.can_attack(living_mob, current_target, vision_range)) + finish_action(controller, succeeded = FALSE) + return + + var/aggro_range = controller.blackboard[aggro_range_key] || vision_range + + controller.clear_blackboard_key(target_key) + var/list/potential_targets = hearers(aggro_range, controller.pawn) - living_mob //Remove self, so we don't suicide + + for(var/HM in typecache_filter_list(range(aggro_range, living_mob), hostile_machines)) //Can we see any hostile machines? + if(can_see(living_mob, HM, aggro_range)) + potential_targets += HM + + if(!potential_targets.len) + finish_action(controller, succeeded = FALSE) + return + + var/list/filtered_targets = list() + + for(var/atom/pot_target in potential_targets) + if(targeting_strategy.can_attack(living_mob, pot_target))//Can we attack it? + if(!ishuman(pot_target)) + continue + + var/mob/living/carbon/human/human = pot_target + for(var/obj/item/item as anything in human.held_items) + if(!item) + continue + if(item.type != scared_item_path) + continue + filtered_targets += pot_target + break + + continue + + if(!filtered_targets.len) + finish_action(controller, succeeded = FALSE) + return + + var/atom/target = pick_final_target(controller, filtered_targets) + controller.set_blackboard_key(target_key, target) + + var/atom/potential_hiding_location = targeting_strategy.find_hidden_mobs(living_mob, target) + + if(potential_hiding_location) //If they're hiding inside of something, we need to know so we can go for that instead initially. + controller.set_blackboard_key(hiding_location_key, potential_hiding_location) + + finish_action(controller, succeeded = TRUE) + +/datum/ai_behavior/find_potential_targets_with_item/finish_action(datum/ai_controller/controller, succeeded, ...) + . = ..() + if (succeeded) + controller.CancelActions() // On retarget cancel any further queued actions so that they will setup again with new target + +/// Returns the desired final target from the filtered list of targets +/datum/ai_behavior/find_potential_targets_with_item/proc/pick_final_target(datum/ai_controller/controller, list/filtered_targets) + return pick(filtered_targets) diff --git a/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/slime_stacker.dm b/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/slime_stacker.dm new file mode 100644 index 000000000000..4967f6a0afaa --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/ai_controller/behaviours/slime_stacker.dm @@ -0,0 +1,62 @@ +/datum/ai_behavior/slime_stacker + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/slime_stacker/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) + . = ..() + if(!controller.blackboard[BB_TARGETING_STRATEGY]) + CRASH("No target datum was supplied in the blackboard for [controller.pawn]") + + if(controller.pawn.GetComponent(/datum/component/mob_stacker)) + return FALSE + + if(HAS_TRAIT(controller.pawn, TRAIT_IN_STACK)) + return FALSE + //Hiding location is priority + var/atom/real_target + var/list/potential_targets = list() + for(var/mob/living/basic/slime/target in oview(4, controller.pawn)) + if(target.GetComponent(/datum/component/latch_feeding)) + continue + if(target.GetComponent(/datum/component/mob_stacker)) + if(target == controller.pawn) + return FALSE + if(!SEND_SIGNAL(target, COMSIG_CHECK_CAN_ADD_NEW_STACK)) + continue + real_target = target + break + if(target == controller.pawn) + continue + + if(HAS_TRAIT(target, TRAIT_IN_STACK)) + continue + + potential_targets += target + + if(!real_target && length(potential_targets)) + real_target = pick(potential_targets) + real_target.AddComponent(/datum/component/mob_stacker) + + if(QDELETED(real_target)) + return FALSE + + controller.set_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET, real_target) + set_movement_target(controller, real_target) + + + +/datum/ai_behavior/slime_stacker/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, trait) + if (isliving(controller.pawn)) + var/mob/living/pawn = controller.pawn + if (world.time < pawn.next_move) + return + + . = ..() + + finish_action(controller, TRUE, BB_BASIC_MOB_CURRENT_TARGET) + +/datum/ai_behavior/slime_stacker/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) + . = ..() + if(succeeded) + var/mob/living/basic/basic_mob = controller.pawn + var/atom/movable/target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] + SEND_SIGNAL(target, COMSIG_ATOM_JOIN_STACK, basic_mob) diff --git a/monkestation/code/modules/slimecore/mobs/ai_controller/controller.dm b/monkestation/code/modules/slimecore/mobs/ai_controller/controller.dm new file mode 100644 index 000000000000..c4b937fbb729 --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/ai_controller/controller.dm @@ -0,0 +1,21 @@ +/datum/ai_controller/basic_controller/slime + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + BB_TARGET_MINIMUM_STAT = HARD_CRIT, + BB_BASIC_MOB_SCARED_ITEM = /obj/item/extinguisher, + BB_BASIC_MOB_STOP_FLEEING = TRUE, + BB_WONT_TARGET_CLIENTS = FALSE, //specifically to stop targetting clients + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_slime_playful + planning_subtrees = list( + /datum/ai_planning_subtree/pet_planning, + //we try to flee first these flip flop based on flee state which is controlled by a componenet on the mob + /datum/ai_planning_subtree/simple_find_nearest_target_to_flee_has_item, + /datum/ai_planning_subtree/flee_target, + //now we try to + /datum/ai_planning_subtree/simple_find_target_no_trait/slime, + /datum/ai_planning_subtree/basic_melee_attack_subtree/slime, + ) diff --git a/monkestation/code/modules/slimecore/mobs/ai_controller/idle_behavior/slime_playful.dm b/monkestation/code/modules/slimecore/mobs/ai_controller/idle_behavior/slime_playful.dm new file mode 100644 index 000000000000..e1ed36b396c4 --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/ai_controller/idle_behavior/slime_playful.dm @@ -0,0 +1,22 @@ +/datum/idle_behavior/idle_slime_playful + ///Chance that the mob random walks per second + var/walk_chance = 25 + ///list of possible play_type + var/list/playing_types = list( + /datum/ai_behavior/slime_stacker, + ) + +/datum/idle_behavior/idle_slime_playful/perform_idle_behavior(seconds_per_tick, datum/ai_controller/controller) + . = ..() + var/mob/living/living_pawn = controller.pawn + if(LAZYLEN(living_pawn.do_afters)) + return + + if(SPT_PROB(walk_chance, seconds_per_tick) && (living_pawn.mobility_flags & MOBILITY_MOVE) && isturf(living_pawn.loc) && !living_pawn.pulledby) + var/move_dir = pick(GLOB.alldirs) + living_pawn.Move(get_step(living_pawn, move_dir), move_dir) + + if(prob(3)) //change this as we see fit + controller.queue_behavior(pick(playing_types)) + else if (prob(4)) + SEND_SIGNAL(controller.pawn, EMOTION_BUFFER_SPEAK_FROM_BUFFER) diff --git a/monkestation/code/modules/slimecore/mobs/ai_controller/subtrees/basic_melee_tree.dm b/monkestation/code/modules/slimecore/mobs/ai_controller/subtrees/basic_melee_tree.dm new file mode 100644 index 000000000000..4a4ae0f1ea90 --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/ai_controller/subtrees/basic_melee_tree.dm @@ -0,0 +1,7 @@ +/datum/ai_planning_subtree/basic_melee_attack_subtree/slime + melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/try_latch_feed + +/datum/ai_planning_subtree/basic_melee_attack_subtree/slime/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + . = ..() + if(!controller.blackboard[BB_BASIC_MOB_STOP_FLEEING]) + return diff --git a/monkestation/code/modules/slimecore/mobs/ai_controller/subtrees/cleaning_tree.dm b/monkestation/code/modules/slimecore/mobs/ai_controller/subtrees/cleaning_tree.dm new file mode 100644 index 000000000000..f8671b4e1c17 --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/ai_controller/subtrees/cleaning_tree.dm @@ -0,0 +1,17 @@ + +/datum/ai_planning_subtree/cleaning_subtree + +/datum/ai_planning_subtree/cleaning_subtree/SelectBehaviors(datum/ai_controller/basic_controller/controller, seconds_per_tick) + if(controller.blackboard_key_exists(BB_CLEAN_TARGET)) + controller.queue_behavior(/datum/ai_behavior/execute_clean, BB_CLEAN_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING + + var/list/final_hunt_list = list() + + final_hunt_list += controller.blackboard[BB_CLEANABLE_DECALS] + final_hunt_list += controller.blackboard[BB_CLEANABLE_BLOOD] + final_hunt_list += controller.blackboard[BB_HUNTABLE_PESTS] + final_hunt_list += controller.blackboard[BB_HUNTABLE_TRASH] + + controller.queue_behavior(/datum/ai_behavior/find_and_set/in_list/clean_targets, BB_CLEAN_TARGET, final_hunt_list) + diff --git a/monkestation/code/modules/slimecore/mobs/ai_controller/subtrees/find_target_slime.dm b/monkestation/code/modules/slimecore/mobs/ai_controller/subtrees/find_target_slime.dm new file mode 100644 index 000000000000..0631be487a80 --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/ai_controller/subtrees/find_target_slime.dm @@ -0,0 +1,27 @@ +/datum/ai_planning_subtree/simple_find_target_no_trait + var/trait = TRAIT_AI_PAUSED + var/unique_behavior = FALSE + +/datum/ai_planning_subtree/simple_find_target_no_trait/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + . = ..() + if(!unique_behavior) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets_without_trait, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION, trait) + + +/datum/ai_planning_subtree/simple_find_target_no_trait/slime + trait = TRAIT_LATCH_FEEDERED + +/datum/ai_planning_subtree/simple_find_target_no_trait/slime/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!controller.blackboard[BB_BASIC_MOB_STOP_FLEEING]) + return + . = ..() + +/datum/ai_planning_subtree/simple_find_target_no_trait/slime_cat + trait = TRAIT_LATCH_FEEDERED + unique_behavior = TRUE + +/datum/ai_planning_subtree/simple_find_target_no_trait/slime/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!controller.blackboard[BB_BASIC_MOB_STOP_FLEEING]) + return + . = ..() + controller.queue_behavior(/datum/ai_behavior/find_potential_targets_without_trait/smaller, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION, trait) diff --git a/monkestation/code/modules/slimecore/mobs/ai_controller/subtrees/flee_with_item.dm b/monkestation/code/modules/slimecore/mobs/ai_controller/subtrees/flee_with_item.dm new file mode 100644 index 000000000000..031fe175665f --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/ai_controller/subtrees/flee_with_item.dm @@ -0,0 +1,9 @@ +/// Find the nearest thing which we assume is hostile and set it as the flee target +/datum/ai_planning_subtree/simple_find_nearest_target_to_flee_has_item + +/datum/ai_planning_subtree/simple_find_nearest_target_to_flee_has_item/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + . = ..() + if(controller.blackboard[BB_BASIC_MOB_STOP_FLEEING]) + return + controller.queue_behavior(/datum/ai_behavior/find_potential_targets_with_item, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION, BB_BASIC_MOB_SCARED_ITEM) + diff --git a/monkestation/code/modules/slimecore/mobs/feeding_flora.dm b/monkestation/code/modules/slimecore/mobs/feeding_flora.dm new file mode 100644 index 000000000000..e4fcac709527 --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/feeding_flora.dm @@ -0,0 +1,80 @@ +/mob/living/basic/cockroach/rockroach + name = "rockroach" + desc = "This cockroach has decided to cosplay as a turtle and is carrying a rock shell on it's back." + icon = 'monkestation/code/modules/slimecore/icons/xenofauna.dmi' + icon_state = "rockroach" + health = 15 + maxHealth = 15 + +/mob/living/basic/cockroach/rockroach/Initialize(mapload) + . = ..() + AddComponent(/datum/component/squashable, squash_chance = 15, squash_damage = 5) + AddElement(/datum/element/death_drops, list(/obj/item/rockroach_shell)) + +/obj/item/rockroach_shell + name = "rockroach shell" + desc = "A rocky shell of some poor rockroach." + icon = 'monkestation/code/modules/slimecore/icons/xenofauna.dmi' + icon_state = "rockroach_shell" + w_class = WEIGHT_CLASS_SMALL + throw_speed = 2 + throw_range = 7 + +/mob/living/basic/cockroach/iceroach + name = "iceroach" + desc = "This cockroach has decided to cosplay as a turtle and is carrying some ice shards on it's back." + icon = 'monkestation/code/modules/slimecore/icons/xenofauna.dmi' + icon_state = "rockroach" + health = 15 + maxHealth = 15 + +/mob/living/basic/cockroach/recursive + name = "recursive roach" + desc = "I swear I've seen this one before but I can't remember where." + icon = 'monkestation/code/modules/slimecore/icons/xenofauna.dmi' + icon_state = "rockroach" + health = 15 + maxHealth = 15 + +/mob/living/basic/xenofauna + desc = "Feed these to the slimes!" + icon = 'monkestation/code/modules/slimecore/icons/xenofauna.dmi' + ai_controller = /datum/ai_controller/basic_controller/cockroach + health = 40 + maxHealth = 40 + +/mob/living/basic/xenofauna/diyaab + name = "diyaab" + icon_state = "diyaab" + +/mob/living/basic/xenofauna/lavadog + name = "lava dog" + icon_state = "lavadog" + +/mob/living/basic/xenofauna/dron + name = "semi-organic bug" + icon_state = "dron" + +/mob/living/basic/xenofauna/greeblefly + name = "greeblefly" + icon_state = "greeblefly" + +/mob/living/basic/xenofauna/possum + name = "possum" + icon_state = "possum" + +/mob/living/basic/xenofauna/thoom + name = "thoom" + icon_state = "thoom" + +/mob/living/basic/xenofauna/meatbeast + name = "meat beast" + icon_state = "meatbeast" + +/mob/living/basic/xenofauna/thinbug + name = "thin bug" + icon_state = "thinbug" + +/mob/living/basic/xenofauna/voxslug + name = "strange slug" + icon_state = "voxslug" diff --git a/monkestation/code/modules/slimecore/mobs/pet_commands/latch_feed.dm b/monkestation/code/modules/slimecore/mobs/pet_commands/latch_feed.dm new file mode 100644 index 000000000000..e55cf3912b66 --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/pet_commands/latch_feed.dm @@ -0,0 +1,2 @@ +/datum/pet_command/point_targeting/attack/latch + attack_behaviour = /datum/ai_behavior/basic_melee_attack/try_latch_feed diff --git a/monkestation/code/modules/slimecore/mobs/pet_commands/stop_feeding.dm b/monkestation/code/modules/slimecore/mobs/pet_commands/stop_feeding.dm new file mode 100644 index 000000000000..d93bc55ff5d4 --- /dev/null +++ b/monkestation/code/modules/slimecore/mobs/pet_commands/stop_feeding.dm @@ -0,0 +1,13 @@ +/datum/pet_command/stop_eating + command_name = "Stop Eating" + command_desc = "Command your pet to stop eating." + radial_icon = 'icons/testing/turf_analysis.dmi' + radial_icon_state = "red_arrow" + speech_commands = list("stop eating", "get off") + +/datum/pet_command/stop_eating/execute_action(datum/ai_controller/controller) + var/mob/living/mob = controller.pawn + if(mob.buckled) + mob.buckled.unbuckle_mob(mob, force=TRUE) + + return SUBTREE_RETURN_FINISH_PLANNING diff --git a/monkestation/code/modules/slimecore/readme.md b/monkestation/code/modules/slimecore/readme.md new file mode 100644 index 000000000000..2e6bb87e4c0a --- /dev/null +++ b/monkestation/code/modules/slimecore/readme.md @@ -0,0 +1,36 @@ +## Title: + + +MODULE ID: SLIMECORE + +### Description: + +This PR trys to rework slimes into the cool little blobs they always should have been. + + + + +### TG Proc/File Changes: + + + - N/A + +### Defines: + + + +### Master file additions + + + + +### Included files that are not contained in this module: + +- N/A + + +### Credits: + + + +Made by Dwasint diff --git a/monkestation/code/modules/slimecore/reagents/_base_reagent.dm b/monkestation/code/modules/slimecore/reagents/_base_reagent.dm new file mode 100644 index 000000000000..a0c1b691692c --- /dev/null +++ b/monkestation/code/modules/slimecore/reagents/_base_reagent.dm @@ -0,0 +1,12 @@ +/datum/reagent/slime_ooze + name = "Generic Slime Ooze" + evaporation_rate = 0.01 + opacity = 225 + slippery = FALSE + var/obj/item/slime_extract/extract_path + +/datum/reagent/proc/add_to_member(obj/effect/abstract/liquid_turf/adder) + return + +/datum/reagent/proc/remove_from_member(obj/effect/abstract/liquid_turf/remover) + return diff --git a/monkestation/code/modules/slimecore/reagents/base_colors.dm b/monkestation/code/modules/slimecore/reagents/base_colors.dm new file mode 100644 index 000000000000..37a526ed01b0 --- /dev/null +++ b/monkestation/code/modules/slimecore/reagents/base_colors.dm @@ -0,0 +1,116 @@ + +/datum/reagent/slime_ooze/grey + name = "Grey Slime Ooze" + color = COLOR_GRAY + extract_path = /obj/item/slime_extract/grey + +/datum/reagent/slime_ooze/blue + name = "Light Blue Slime Ooze" + color = COLOR_CARP_LIGHT_BLUE + extract_path = /obj/item/slime_extract/blue + +/datum/reagent/slime_ooze/darkblue + name = "Dark Blue Slime Ooze" + color = COLOR_BLUE + extract_path = /obj/item/slime_extract/darkblue + +/datum/reagent/slime_ooze/green + name = "Green Slime Ooze" + color = "#D6F264" + extract_path = /obj/item/slime_extract/green + +/datum/reagent/slime_ooze/metal + name = "Metal Slime Ooze" + color = "#6D758D" + extract_path = /obj/item/slime_extract/metal + +/datum/reagent/slime_ooze/purple + name = "Purple Slime Ooze" + color = "#BC4A9B" + extract_path = /obj/item/slime_extract/purple + +/datum/reagent/slime_ooze/orange + name = "Orange Slime Ooze" + color = "#FA6A0A" + extract_path = /obj/item/slime_extract/orange + +/datum/reagent/slime_ooze/pink + name = "Pink Slime Ooze" + color = "#F5A097" + extract_path = /obj/item/slime_extract/pink + +/datum/reagent/slime_ooze/darkpurple + name = "Dark Purple Slime Ooze" + color = "#793A80" + extract_path = /obj/item/slime_extract/darkpurple + +/datum/reagent/slime_ooze/red + name = "Red Slime Ooze" + color = "#B4202A" + extract_path = /obj/item/slime_extract/red + +/datum/reagent/slime_ooze/yellow + name = "Yellow Slime Ooze" + color = "#F9A31B" + extract_path = /obj/item/slime_extract/yellow + +/datum/reagent/slime_ooze/gold + name = "Gold Slime Ooze" + color = "#BB7547" + extract_path = /obj/item/slime_extract/gold + +/datum/reagent/slime_ooze/silver + name = "Silver Slime Ooze" + color = "#8B93AF" + extract_path = /obj/item/slime_extract/silver + +/datum/reagent/slime_ooze/lightpink + name = "Light Pink Slime Ooze" + color = "#E9B5A3" + extract_path = /obj/item/slime_extract/lightpink + +/datum/reagent/slime_ooze/black + name = "Black Slime Ooze" + color = "#333941" + extract_path = /obj/item/slime_extract/black + +/datum/reagent/slime_ooze/rainbow + name = "Rainbow Slime Ooze" + color = "#ffffff" + extract_path = /obj/item/slime_extract/rainbow + +/datum/reagent/slime_ooze/rainbow/add_to_member(obj/effect/abstract/liquid_turf/adder) + adder.rainbow_effect() + +/datum/reagent/slime_ooze/rainbow/remove_from_member(obj/effect/abstract/liquid_turf/remover) + remover.remove_rainbow_effect() + +/datum/reagent/slime_ooze/oil + name = "Oil Slime Ooze" + color = "#242234" + extract_path = /obj/item/slime_extract/oil + +/datum/reagent/slime_ooze/adamantine + name = "Adamantine Slime Ooze" + color = "#5DAF8D" + extract_path = /obj/item/slime_extract/adamantine + +/datum/reagent/slime_ooze/bluespace + name = "Bluespace Slime Ooze" + color = "#C0E4FD" + extract_path = /obj/item/slime_extract/bluespace + +/datum/reagent/slime_ooze/pyrite + name = "Pyrite Slime Ooze" + color = "#FFD541" + extract_path = /obj/item/slime_extract/pyrite + +/datum/reagent/slime_ooze/sepia + name = "Sepia Slime Ooze" + color = "#A08662" + extract_path = /obj/item/slime_extract/sepia + +/datum/reagent/slime_ooze/cerulean + name = "Cerulean Slime Ooze" + color = "#285CC4" + extract_path = /obj/item/slime_extract/cerulean diff --git a/monkestation/code/modules/slimecore/research_and_recipes.dm b/monkestation/code/modules/slimecore/research_and_recipes.dm new file mode 100644 index 000000000000..1063300564be --- /dev/null +++ b/monkestation/code/modules/slimecore/research_and_recipes.dm @@ -0,0 +1,102 @@ +/obj/item/circuitboard/machine/biomass_recycler + name = "Biomass Recycler (Machine Board)" + greyscale_colors = CIRCUIT_COLOR_SCIENCE + build_path = /obj/machinery/biomass_recycler + req_components = list( + /datum/stock_part/matter_bin = 3, + /datum/stock_part/manipulator = 2) + needs_anchored = FALSE + +/obj/item/circuitboard/machine/corral_corner + name = "Corral Corner (Machine Board)" + greyscale_colors = CIRCUIT_COLOR_SCIENCE + build_path = /obj/machinery/corral_corner + req_components = list( + /datum/stock_part/matter_bin = 1, + /datum/stock_part/manipulator = 1) + needs_anchored = TRUE + +/obj/item/circuitboard/machine/slime_extract_requestor + name = "Extract Request Pad (Machine Board)" + greyscale_colors = CIRCUIT_COLOR_SCIENCE + build_path = /obj/machinery/slime_extract_requestor + req_components = list( + /datum/stock_part/manipulator = 2, + /obj/item/stack/sheet/glass = 1) + def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) + +/obj/item/circuitboard/computer/slime_market + name = "Slime Market (Computer Board)" + greyscale_colors = CIRCUIT_COLOR_SCIENCE + build_path = /obj/machinery/computer/slime_market + +/obj/item/circuitboard/machine/slime_market_pad + name = "Intergalactic Market Pad (Machine Board)" + greyscale_colors = CIRCUIT_COLOR_SCIENCE + build_path = /obj/machinery/slime_market_pad + req_components = list( + /datum/stock_part/manipulator = 2, + /obj/item/stack/sheet/glass = 1) + def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) + + +/datum/design/slimevac + name = "Slime Vacuum" + id = "slimevac" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) + build_path = /obj/item/vacuum_pack + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/board/slime_market_pad + name = "Slime Market Pad Board" + desc = "The circuit board for a slime market pad." + id = "slime_market_pad" + build_path = /obj/item/circuitboard/machine/slime_market_pad + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_FAB + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/board/slime_market + name = "Slime Market Computer Board" + desc = "The circuit board for a slime market computer." + id = "slime_market" + build_path = /obj/item/circuitboard/computer/slime_market + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_FAB + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/board/slime_extract_requestor + name = "Slime Extract Requestor Board" + desc = "The circuit board for a slime extract requestor." + id = "slime_extract_requestor" + build_path = /obj/item/circuitboard/machine/slime_extract_requestor + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_FAB + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/board/corral_corner + name = "Corral Corner Board" + desc = "The circuit board for a corral corner piece." + id = "corral_corner" + build_path = /obj/item/circuitboard/machine/corral_corner + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_FAB + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/board/biomass_recycler + name = "Biomass Recycler Board" + desc = "The circuit board for a biomass recycler." + id = "biomass_recycler" + build_path = /obj/item/circuitboard/machine/biomass_recycler + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_FAB + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE diff --git a/monkestation/code/modules/slimecore/slime_accessories/_base_accessory.dm b/monkestation/code/modules/slimecore/slime_accessories/_base_accessory.dm new file mode 100644 index 000000000000..6dd3f44115a7 --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_accessories/_base_accessory.dm @@ -0,0 +1,12 @@ +/obj/item/slime_accessory + name = "Generic Accessory" + desc = "Can be worn by a slime." + + icon = 'monkestation/code/modules/slimecore/icons/slimes.dmi' + icon_state = "witch_hat" + + var/accessory_icon = 'monkestation/code/modules/slimecore/icons/slimes.dmi' + var/accessory_icon_state = "witch_hat" + +/obj/item/slime_accessory/witch_hat + name = "Slime Witch Hat" diff --git a/monkestation/code/modules/slimecore/slime_color_mutations/_base_color.dm b/monkestation/code/modules/slimecore/slime_color_mutations/_base_color.dm new file mode 100644 index 000000000000..341224e91b69 --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_color_mutations/_base_color.dm @@ -0,0 +1,25 @@ +GLOBAL_LIST_INIT(unlocked_slime_colors, list()) + +/datum/slime_color + ///the name of the slime color + var/name = "Generic Color" + ///this is appended to the icon_states of the slime + var/icon_prefix = "grey" + ///secretion path + var/secretion_path = /datum/reagent/slime_ooze/grey + ///our slimes true color + var/slime_color = "#FFFFFF" + ///list of possible mutations from this color + var/list/possible_mutations = list() + +/datum/slime_color/proc/on_add_to_slime(mob/living/basic/slime/slime) + return + +/datum/slime_color/New() + . = ..() + if(!(type in GLOB.unlocked_slime_colors)) + on_first_unlock() + GLOB.unlocked_slime_colors |= type + +/datum/slime_color/proc/on_first_unlock() + return diff --git a/monkestation/code/modules/slimecore/slime_color_mutations/colors.dm b/monkestation/code/modules/slimecore/slime_color_mutations/colors.dm new file mode 100644 index 000000000000..97c9f1e167d2 --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_color_mutations/colors.dm @@ -0,0 +1,238 @@ +/datum/slime_color/grey + name = "grey" + icon_prefix = "grey" + secretion_path = /datum/reagent/slime_ooze/grey + slime_color = "#FFFFFF" // I know this is white its because the base colors are greyed + possible_mutations = list( + /datum/slime_mutation_data/metal, + /datum/slime_mutation_data/orange, + /datum/slime_mutation_data/purple, + /datum/slime_mutation_data/blue, + ) + +/datum/slime_color/grey/on_first_unlock() + GLOB.biomass_unlocks |= list(/mob/living/basic/cockroach/iceroach = 1) + +/datum/slime_color/blue + name = "blue" + icon_prefix = "blue" + secretion_path = /datum/reagent/slime_ooze/blue + slime_color = "#25F8E6" + possible_mutations = list( + /datum/slime_mutation_data/silver, + /datum/slime_mutation_data/dark_blue, + /datum/slime_mutation_data/pink, + ) + +/datum/slime_color/blue/on_first_unlock() + GLOB.biomass_unlocks |= list(/mob/living/basic/xenofauna/meatbeast = 2) + GLOB.biomass_unlocks |= list(/mob/living/basic/xenofauna/diyaab = 1) + GLOB.biomass_unlocks |= list(/mob/living/basic/xenofauna/thinbug = 1) + +/datum/slime_color/dark_blue + name = "dark blue" + icon_prefix = "dark blue" + secretion_path = /datum/reagent/slime_ooze/darkblue + slime_color = "#3375F9" + possible_mutations = list( + /datum/slime_mutation_data/blue, + /datum/slime_mutation_data/purple, + /datum/slime_mutation_data/cerulean, + ) + + +/datum/slime_color/dark_blue/on_first_unlock() + GLOB.biomass_unlocks |= list(/mob/living/basic/cockroach/iceroach = 1) + GLOB.biomass_unlocks |= list(/mob/living/basic/cockroach/recursive = 1) + +/datum/slime_color/green + name = "green" + icon_prefix = "green" + secretion_path = /datum/reagent/slime_ooze/green + slime_color = "#D6F264" + possible_mutations = list( + /datum/slime_mutation_data/black, + ) + +/datum/slime_color/green/on_first_unlock() + GLOB.biomass_unlocks |= list(/mob/living/basic/xenofauna/thoom = 2) + +/datum/slime_color/metal + name = "metal" + icon_prefix = "metal" + secretion_path = /datum/reagent/slime_ooze/metal + slime_color = "#6D758D" + possible_mutations = list( + /datum/slime_mutation_data/silver, + /datum/slime_mutation_data/yellow, + /datum/slime_mutation_data/gold, + ) + +/datum/slime_color/metal/on_first_unlock() + GLOB.biomass_unlocks |= list(/mob/living/basic/xenofauna/meatbeast = 2) + +/datum/slime_color/purple + name = "purple" + icon_prefix = "purple" + secretion_path = /datum/reagent/slime_ooze/purple + slime_color = "#BC4A9B" + possible_mutations = list( + /datum/slime_mutation_data/green, + /datum/slime_mutation_data/dark_blue, + /datum/slime_mutation_data/darkpurple, + ) + +/datum/slime_color/purple/on_first_unlock() + GLOB.biomass_unlocks |= list(/mob/living/basic/xenofauna/greeblefly = 2) + GLOB.biomass_unlocks |= list(/mob/living/basic/xenofauna/diyaab = 1) + +/datum/slime_color/orange + name = "orange" + icon_prefix = "orange" + secretion_path = /datum/reagent/slime_ooze/orange + slime_color = "#FA6A0A" + possible_mutations = list( + /datum/slime_mutation_data/darkpurple, + /datum/slime_mutation_data/yellow, + /datum/slime_mutation_data/red, + ) + +/datum/slime_color/orange/on_first_unlock() + GLOB.biomass_unlocks |= list(/mob/living/basic/xenofauna/lavadog = 1) + +/datum/slime_color/pink + name = "pink" + icon_prefix = "pink" + secretion_path = /datum/reagent/slime_ooze/pink + slime_color = "#F5A097" + possible_mutations = list( + /datum/slime_mutation_data/lightpink, + ) + +/datum/slime_color/pink/on_first_unlock() + GLOB.biomass_unlocks |= list(/mob/living/basic/xenofauna/voxslug = 1) + +/datum/slime_color/darkpurple + name = "dark purple" + icon_prefix = "dark purple" + secretion_path = /datum/reagent/slime_ooze/darkpurple + slime_color = "#793A80" + possible_mutations = list( + /datum/slime_mutation_data/sepia, + /datum/slime_mutation_data/purple, + /datum/slime_mutation_data/orange, + ) + +/datum/slime_color/darkpurple/on_first_unlock() + GLOB.biomass_unlocks |= list(/mob/living/basic/xenofauna/possum = 1) + +/datum/slime_color/red + name = "red" + icon_prefix = "red" + secretion_path = /datum/reagent/slime_ooze/red + slime_color = "#B4202A" + possible_mutations = list( + /datum/slime_mutation_data/oil, + ) + +/datum/slime_color/darkpurple/on_first_unlock() + GLOB.biomass_unlocks |= list(/mob/living/basic/xenofauna/dron = 1) + +/datum/slime_color/yellow + name = "yellow" + icon_prefix = "yellow" + secretion_path = /datum/reagent/slime_ooze/yellow + slime_color = "#F9A31B" + possible_mutations = list( + /datum/slime_mutation_data/bluespace, + /datum/slime_mutation_data/metal, + /datum/slime_mutation_data/orange, + ) + +/datum/slime_color/gold + name = "gold" + icon_prefix = "gold" + secretion_path = /datum/reagent/slime_ooze/gold + slime_color = "#BB7547" + possible_mutations = list( + /datum/slime_mutation_data/adamantine, + ) + +/datum/slime_color/silver + name = "silver" + icon_prefix = "silver" + secretion_path = /datum/reagent/slime_ooze/silver + slime_color = "#8B93AF" + possible_mutations = list( + /datum/slime_mutation_data/pyrite, + /datum/slime_mutation_data/metal, + /datum/slime_mutation_data/blue, + ) + +/datum/slime_color/silver/on_first_unlock() + GLOB.biomass_unlocks |= list(/mob/living/basic/cockroach/iceroach = 1) + +/datum/slime_color/lightpink + name = "light pink" + icon_prefix = "light pink" + secretion_path = /datum/reagent/slime_ooze/lightpink + slime_color = "#E9B5A3" + possible_mutations = list(/datum/slime_mutation_data/rainbow) + +/datum/slime_color/black + name = "black" + icon_prefix = "black" + secretion_path = /datum/reagent/slime_ooze/black + slime_color = "#333941" + possible_mutations = list(/datum/slime_mutation_data/rainbow) + +/datum/slime_color/rainbow + name = "rainbow" + icon_prefix = "rainbow" + secretion_path = /datum/reagent/slime_ooze/rainbow + slime_color = "#FFFFFF" + +/datum/slime_color/rainbow/on_add_to_slime(mob/living/basic/slime/slime) + slime.rainbow_effect() + +/datum/slime_color/oil + name = "oil" + icon_prefix = "oil" + secretion_path = /datum/reagent/slime_ooze/oil + slime_color = "#242234" + possible_mutations = list(/datum/slime_mutation_data/rainbow) + +/datum/slime_color/sepia + name = "sepia" + icon_prefix = "sepia" + secretion_path = /datum/reagent/slime_ooze/sepia + slime_color = "#A08662" + possible_mutations = list(/datum/slime_mutation_data/rainbow) + +/datum/slime_color/adamantine + name = "adamantine" + icon_prefix = "adamantine" + secretion_path = /datum/reagent/slime_ooze/adamantine + slime_color = "#5DAF8D" + possible_mutations = list(/datum/slime_mutation_data/rainbow) + +/datum/slime_color/bluespace + name = "bluespace" + icon_prefix = "bluespace" + secretion_path = /datum/reagent/slime_ooze/bluespace + slime_color = "#C0E4FD" + possible_mutations = list(/datum/slime_mutation_data/rainbow) + +/datum/slime_color/pyrite + name = "pyrite" + icon_prefix = "pyrite" + secretion_path = /datum/reagent/slime_ooze/pyrite + slime_color = "#FFD541" + possible_mutations = list(/datum/slime_mutation_data/rainbow) + +/datum/slime_color/cerulean + name = "cerulean" + icon_prefix = "cerulean" + secretion_path = /datum/reagent/slime_ooze/cerulean + slime_color = "#285CC4" + possible_mutations = list(/datum/slime_mutation_data/rainbow) diff --git a/monkestation/code/modules/slimecore/slime_color_mutations/mutations/_base_mutation.dm b/monkestation/code/modules/slimecore/slime_color_mutations/mutations/_base_mutation.dm new file mode 100644 index 000000000000..0d26407b2584 --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_color_mutations/mutations/_base_mutation.dm @@ -0,0 +1,59 @@ +/datum/slime_mutation_data + var/mob/living/basic/slime/host + ///mutation weight + var/weight = 10 + ///our probability of being mutated after weight + var/mutate_probability = 100 + ///are we blocked from color mutation syringes + var/syringe_blocked = FALSE + ///can we mutate + var/can_mutate = FALSE + ///The slime mutation we pass on if we succeed + var/datum/slime_color/output + ///Items to feed the slime in order to mutate + var/list/needed_items = list() + ///the liquids we need to consume in order to mutate + var/list/needed_reagents = list() + ///the mobs needed to be latch fed in order to mutate - stored in type = amount + var/list/latch_needed = list() + +/datum/slime_mutation_data/Destroy(force, ...) + . = ..() + host = null + +/datum/slime_mutation_data/proc/on_add_to_slime(mob/living/basic/slime/host) + src.host = host + if(length(needed_items)) + RegisterSignal(host, COMSIG_LIVING_ATE, PROC_REF(check_ate)) + + /* + if(length(needed_reagents)) + */ + + if(length(latch_needed)) + RegisterSignal(host, COMSIG_MOB_FEED, PROC_REF(check_latch)) + +/datum/slime_mutation_data/proc/recheck_mutation() + if(length(latch_needed) || length(needed_reagents) || length(needed_items)) + return + can_mutate = TRUE + UnregisterSignal(host, COMSIG_LIVING_ATE) + UnregisterSignal(host, COMSIG_MOB_FEED) + +/datum/slime_mutation_data/proc/check_latch(datum/source, mob/living/target, amount) + if(!(target.type in latch_needed)) + return + + latch_needed[target.type] -= amount + if(latch_needed[target.type] <= 0) + latch_needed -= target.type + recheck_mutation() + +/datum/slime_mutation_data/proc/check_ate(datum/source, atom/target) + for(var/item in needed_items) + if(!istype(target, item)) + continue + needed_items -= item + + recheck_mutation() + diff --git a/monkestation/code/modules/slimecore/slime_color_mutations/mutations/colors.dm b/monkestation/code/modules/slimecore/slime_color_mutations/mutations/colors.dm new file mode 100644 index 000000000000..e090430f7645 --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_color_mutations/mutations/colors.dm @@ -0,0 +1,93 @@ +/datum/slime_mutation_data/metal + output = /datum/slime_color/metal + needed_items = list(/obj/item/stack/sheet/iron) + +/datum/slime_mutation_data/orange + output = /datum/slime_color/orange + needed_items = list(/obj/item/stack/sheet/mineral/plasma) + +/datum/slime_mutation_data/purple + output = /datum/slime_color/purple + needed_items = list(/obj/item/stack/medical/gauze) + +/datum/slime_mutation_data/blue + output = /datum/slime_color/blue + latch_needed = list(/mob/living/basic/cockroach/iceroach = 50) + +/datum/slime_mutation_data/cerulean + output = /datum/slime_color/cerulean + latch_needed = list(/mob/living/basic/cockroach/recursive = 40) + +/datum/slime_mutation_data/dark_blue + output = /datum/slime_color/dark_blue + latch_needed = list(/mob/living/basic/xenofauna/diyaab = 75) + +/datum/slime_mutation_data/red + output = /datum/slime_color/red + latch_needed = list(/mob/living/basic/xenofauna/lavadog = 50) + +/datum/slime_mutation_data/oil + output = /datum/slime_color/oil + latch_needed = list(/mob/living/basic/xenofauna/dron = 65) + +/datum/slime_mutation_data/yellow + output = /datum/slime_color/yellow + needed_items = list(/obj/item/stock_parts/cell) + +/datum/slime_mutation_data/green + output = /datum/slime_color/green + latch_needed = list(/mob/living/basic/xenofauna/greeblefly = 65) + +/datum/slime_mutation_data/sepia + output = /datum/slime_color/sepia + latch_needed = list(/mob/living/basic/xenofauna/possum = 65) + +/datum/slime_mutation_data/black + output = /datum/slime_color/black + latch_needed = list(/mob/living/basic/xenofauna/thoom = 50) + +/datum/slime_mutation_data/silver + output = /datum/slime_color/silver + latch_needed = list(/mob/living/basic/xenofauna/meatbeast = 80) + +/datum/slime_mutation_data/gold + output = /datum/slime_color/gold + needed_items = list(/obj/item/stack/sheet/mineral/gold) + +/datum/slime_mutation_data/adamantine + output = /datum/slime_color/adamantine + needed_items = list(/obj/item/rockroach_shell) + +/datum/slime_mutation_data/darkpurple + output = /datum/slime_color/darkpurple + needed_items = list(/obj/item/slime_extract/purple) + +/datum/slime_mutation_data/pink + output = /datum/slime_color/pink + latch_needed = list(/mob/living/basic/xenofauna/thinbug = 80) + +/datum/slime_mutation_data/pyrite + output = /datum/slime_color/pyrite + needed_items = list(/obj/item/toy/crayon/rainbow) + +/datum/slime_mutation_data/bluespace + output = /datum/slime_color/bluespace + needed_items = list(/obj/item/stack/ore/bluespace_crystal) + +/datum/slime_mutation_data/lightpink + output = /datum/slime_color/lightpink + latch_needed = list(/mob/living/basic/xenofauna/voxslug = 80) + +/datum/slime_mutation_data/rainbow + output = /datum/slime_color/rainbow + needed_items = list( + /obj/item/slime_extract/orange = 1, + /obj/item/slime_extract/purple = 1, + /obj/item/slime_extract/blue = 1, + /obj/item/slime_extract/metal = 1, + /obj/item/slime_extract/yellow = 1, + /obj/item/slime_extract/darkblue = 1, + /obj/item/slime_extract/darkpurple = 1, + /obj/item/slime_extract/silver = 1, + ) + syringe_blocked = TRUE diff --git a/monkestation/code/modules/slimecore/slime_traits/_base_trait.dm b/monkestation/code/modules/slimecore/slime_traits/_base_trait.dm new file mode 100644 index 000000000000..ff7b5d45e980 --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_traits/_base_trait.dm @@ -0,0 +1,57 @@ +/datum/slime_trait + var/name = "Base Trait" + var/desc = "You shouldn't see this, this means someone forgot to set a trait desc or your seeing the base trait." + + //flags this trait has like TRAIT_PROCESS, TRAIT_ON_DEATH, TRAIT_ON_LIFE, etc + var/trait_flags = NONE + + ///what buttons do we show in the trait menu ie FOOD_CHANGE, ENVIRONMENT_CHANGE + var/list/menu_buttons = list() + + ///this is type paths of traits don't work together + var/list/incompatible_traits = list() + + ///our host slime + var/mob/living/basic/slime/host + +/datum/slime_trait/proc/on_add(mob/living/basic/slime/parent) + if(!parent) + return + host = parent + if(trait_flags & TRAIT_ON_DEATH) + RegisterSignal(host, COMSIG_LIVING_DEATH, PROC_REF(on_death)) + if(trait_flags & TRAIT_VISUAL) + RegisterSignal(host, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(apply_overlays)) + host.update_overlays() + +/datum/slime_trait/proc/on_remove(mob/living/basic/slime/parent) + return + +/datum/slime_trait/proc/on_death() + return + +/datum/slime_trait/proc/apply_overlays(obj/item/source, list/overlays) + return + + +/datum/slime_trait/visual + + trait_flags = (TRAIT_VISUAL) + //the visual icon_state of the trait + var/trait_icon_state + ///the icon path of the trait + var/trait_icon + + +/datum/slime_trait/visual/apply_overlays(obj/item/source, list/overlays) + if(!trait_icon || !trait_icon_state) + return + + var/mutable_appearance/slime_visual = mutable_appearance(trait_icon, trait_icon_state, host.layer, host, host.plane) + + if(!host.overwrite_color) + slime_visual.color = host.current_color.slime_color + else + slime_visual.color = host.overwrite_color + + overlays += slime_visual diff --git a/monkestation/code/modules/slimecore/slime_traits/beer_slime.dm b/monkestation/code/modules/slimecore/slime_traits/beer_slime.dm new file mode 100644 index 000000000000..c47630c4a6c1 --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_traits/beer_slime.dm @@ -0,0 +1,17 @@ +/datum/slime_trait/beer_slime + name = "Beer Slime" + desc = "Modifies their genomes to allow them to produce beer instead of ooze" + menu_buttons = list(BEHAVIOUR_CHANGE) + +/datum/slime_trait/beer_slime/on_add(mob/living/basic/slime/parent) + . = ..() + var/datum/reagent/reagent = pick(typesof(/datum/reagent/consumable/ethanol)) + parent.chemical_injection = reagent + parent.overriding_name_prefix = initial(reagent.name) + parent.update_slime_varience() + +/datum/slime_trait/beer_slime/on_remove(mob/living/basic/slime/parent) + . = ..() + parent.chemical_injection = null + parent.overriding_name_prefix = null + parent.update_slime_varience() diff --git a/monkestation/code/modules/slimecore/slime_traits/cleaner.dm b/monkestation/code/modules/slimecore/slime_traits/cleaner.dm new file mode 100644 index 000000000000..0bd7ffff9f19 --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_traits/cleaner.dm @@ -0,0 +1,67 @@ +/datum/slime_trait/cleaner + name = "Cleaner" + desc = "Changes the slime to consume pollution and grime." + menu_buttons = list(FOOD_CHANGE, DOCILE_CHANGE, BEHAVIOUR_CHANGE) + incompatible_traits = list(/datum/slime_trait/polluter) + + ///decals we can clean + var/static/list/cleanable_decals = typecacheof(list( + /obj/effect/decal/cleanable/ants, + /obj/effect/decal/cleanable/ash, + /obj/effect/decal/cleanable/confetti, + /obj/effect/decal/cleanable/dirt, + /obj/effect/decal/cleanable/fuel_pool, + /obj/effect/decal/cleanable/generic, + /obj/effect/decal/cleanable/glitter, + /obj/effect/decal/cleanable/greenglow, + /obj/effect/decal/cleanable/insectguts, + /obj/effect/decal/cleanable/molten_object, + /obj/effect/decal/cleanable/oil, + /obj/effect/decal/cleanable/food, + /obj/effect/decal/cleanable/robot_debris, + /obj/effect/decal/cleanable/shreds, + /obj/effect/decal/cleanable/glass, + /obj/effect/decal/cleanable/vomit, + /obj/effect/decal/cleanable/wrapping, + /obj/effect/decal/remains, + )) + ///blood we can clean + var/static/list/cleanable_blood = typecacheof(list( + /obj/effect/decal/cleanable/xenoblood, + /obj/effect/decal/cleanable/blood, + /obj/effect/decal/cleanable/trail_holder, + )) + ///pests we hunt + var/static/list/huntable_pests = typecacheof(list( + /mob/living/basic/cockroach, + /mob/living/basic/mouse, + )) + ///trash we will burn + var/static/list/huntable_trash = typecacheof(list( + /obj/item/trash, + /obj/item/food/deadmouse, + )) + +/datum/slime_trait/cleaner/on_add(mob/living/basic/slime/parent) + . = ..() + parent.AddComponent(/datum/component/pollution_scrubber, 15) + + parent.slime_flags |= (CLEANER_SLIME | PASSIVE_SLIME) + + parent.ai_controller.set_blackboard_key(BB_CLEANABLE_DECALS, cleanable_decals) + parent.ai_controller.set_blackboard_key(BB_CLEANABLE_BLOOD, cleanable_blood) + parent.ai_controller.set_blackboard_key(BB_HUNTABLE_PESTS, huntable_pests) + parent.ai_controller.set_blackboard_key(BB_HUNTABLE_TRASH, huntable_trash) + + ADD_TRAIT(parent, TRAIT_SLIME_DUST_IMMUNE, "trait") + parent.recompile_ai_tree() + +/datum/slime_trait/cleaner/on_remove(mob/living/basic/slime/parent) + . = ..() + + parent.slime_flags &= ~(CLEANER_SLIME | PASSIVE_SLIME) + + parent.recompile_ai_tree() + + qdel(parent.GetComponent(/datum/component/pollution_scrubber)) + REMOVE_TRAIT(parent, TRAIT_SLIME_DUST_IMMUNE, "trait") diff --git a/monkestation/code/modules/slimecore/slime_traits/docility.dm b/monkestation/code/modules/slimecore/slime_traits/docility.dm new file mode 100644 index 000000000000..30e1a1c4de91 --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_traits/docility.dm @@ -0,0 +1,11 @@ +/datum/slime_trait/docility + name = "Docility Mutation" + desc = "Mutates a slime so they avoid people with souls" + +/datum/slime_trait/docility/on_add(mob/living/basic/slime/parent) + . = ..() + parent.ai_controller.set_blackboard_key(BB_WONT_TARGET_CLIENTS, TRUE) + +/datum/slime_trait/docility/on_remove(mob/living/basic/slime/parent) + . = ..() + parent.ai_controller.set_blackboard_key(BB_WONT_TARGET_CLIENTS, FALSE) diff --git a/monkestation/code/modules/slimecore/slime_traits/endisnigh.dm b/monkestation/code/modules/slimecore/slime_traits/endisnigh.dm new file mode 100644 index 000000000000..f12c99315b86 --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_traits/endisnigh.dm @@ -0,0 +1,18 @@ +/datum/slime_trait/endisnigh + name = "Ash" + desc = "This feels like a reference?" + + +/datum/slime_trait/endisnigh/on_add(mob/living/basic/slime/parent) + . = ..() + parent.slime_flags |= OVERWRITES_COLOR + parent.icon_state_override = "ash" + parent.overwrite_color = "#242234" + SEND_SIGNAL(parent, EMOTION_BUFFER_UPDATE_OVERLAY_STATES, list()) + +/datum/slime_trait/endisnigh/on_remove(mob/living/basic/slime/parent) + . = ..() + parent.slime_flags &= ~OVERWRITES_COLOR + parent.icon_state_override = null + parent.overwrite_color = null + SEND_SIGNAL(parent, EMOTION_BUFFER_UPDATE_OVERLAY_STATES, parent.emotion_states) diff --git a/monkestation/code/modules/slimecore/slime_traits/never_ooze.dm b/monkestation/code/modules/slimecore/slime_traits/never_ooze.dm new file mode 100644 index 000000000000..d80ff898b780 --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_traits/never_ooze.dm @@ -0,0 +1,11 @@ +/datum/slime_trait/never_ooze + name = "Ooze Prevention" + desc = "Prevents slimes from making ooze." + +/datum/slime_trait/never_ooze/on_add(mob/living/basic/slime/parent) + . = ..() + parent.slime_flags |= NOOOZE_SLIME + +/datum/slime_trait/never_ooze/on_remove(mob/living/basic/slime/parent) + . = ..() + parent.slime_flags &= ~NOOOZE_SLIME diff --git a/monkestation/code/modules/slimecore/slime_traits/never_split.dm b/monkestation/code/modules/slimecore/slime_traits/never_split.dm new file mode 100644 index 000000000000..0be6e81ade1a --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_traits/never_split.dm @@ -0,0 +1,12 @@ +/datum/slime_trait/never_evolving + name = "Never Changing Slime" + desc = "Prevents the slime from splitting or mutating" + + +/datum/slime_trait/never_evolving/on_add(mob/living/basic/slime/parent) + . = ..() + parent.slime_flags |= NOEVOLVE_SLIME + +/datum/slime_trait/never_evolving/on_remove(mob/living/basic/slime/parent) + . = ..() + parent.slime_flags &= ~NOEVOLVE_SLIME diff --git a/monkestation/code/modules/slimecore/slime_traits/polluter.dm b/monkestation/code/modules/slimecore/slime_traits/polluter.dm new file mode 100644 index 000000000000..405c1da69cfc --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_traits/polluter.dm @@ -0,0 +1,28 @@ +/datum/slime_trait/polluter + name = "Polluter" + desc = "Emits large quanitities of pollution." + menu_buttons = list(ENVIRONMENT_CHANGE) + incompatible_traits = list(/datum/slime_trait/cleaner) + +/datum/slime_trait/polluter/on_add(mob/living/basic/slime/parent) + . = ..() + parent.AddElement(/datum/element/pollution_emitter, /datum/pollutant/slime_dust, 30) + +/datum/slime_trait/polluter/on_remove(mob/living/basic/slime/parent) + . = ..() + parent.RemoveElement(/datum/element/pollution_emitter) + +/datum/pollutant/slime_dust + name = "Slime Dust" + pollutant_flags = POLLUTANT_APPEARANCE | POLLUTANT_BREATHE_ACT | POLLUTANT_TOUCH_ACT + thickness = 3 + color = "#5769a5" + +/datum/pollutant/slime_dust/touch_act(mob/living/victim, amount) + if(!istype(victim, /mob/living/basic/slime) || amount < 90) + return + if(HAS_TRAIT(victim, TRAIT_SLIME_DUST_IMMUNE)) + return + + victim.adjustBruteLoss(1) + diff --git a/monkestation/code/modules/slimecore/slime_traits/radioactive.dm b/monkestation/code/modules/slimecore/slime_traits/radioactive.dm new file mode 100644 index 000000000000..77afec774bbd --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_traits/radioactive.dm @@ -0,0 +1,13 @@ +/datum/slime_trait/radioactive + name = "Radioactive" + desc = "Emits violent rays of radiation." + menu_buttons = list(ENVIRONMENT_CHANGE, DANGEROUS_CHANGE) + +/datum/slime_trait/radioactive/on_add(mob/living/basic/slime/parent) + . = ..() + parent.add_filter("radio_slime", 10, outline_filter(12, "#39ff1430")) + parent.AddComponent(/datum/component/radioactive_emitter, cooldown_time = 5 SECONDS, range = 3, threshold = RAD_MEDIUM_INSULATION) + +/datum/slime_trait/radioactive/on_remove(mob/living/basic/slime/parent) + . = ..() + qdel(parent.GetComponent(/datum/component/radioactive_emitter)) diff --git a/monkestation/code/modules/slimecore/slime_traits/slime_cat.dm b/monkestation/code/modules/slimecore/slime_traits/slime_cat.dm new file mode 100644 index 000000000000..ab200dd42f69 --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_traits/slime_cat.dm @@ -0,0 +1,20 @@ +/datum/slime_trait/visual/cat + name = "Gooey Cat" + desc = "A docile slime with cat ears!" + + trait_icon_state = "cat_ears" + trait_icon = 'monkestation/code/modules/slimecore/icons/slimes.dmi' + menu_buttons = list(FOOD_CHANGE, DOCILE_CHANGE, BEHAVIOUR_CHANGE) + +/datum/slime_trait/visual/cat/on_add(mob/living/basic/slime/parent) + . = ..() + parent.replacement_trees += list(/datum/ai_planning_subtree/simple_find_target_no_trait/slime = /datum/ai_planning_subtree/simple_find_target_no_trait/slime_cat) + parent.emotion_states[EMOTION_HAPPY] = "aslime-:33" + SEND_SIGNAL(parent, EMOTION_BUFFER_UPDATE_OVERLAY_STATES, parent.emotion_states) + parent.recompile_ai_tree() + +/datum/slime_trait/visual/cat/on_remove (mob/living/basic/slime/parent) + parent.replacement_trees -= list(/datum/ai_planning_subtree/simple_find_target_no_trait/slime = /datum/ai_planning_subtree/simple_find_target_no_trait/slime_cat) + parent.emotion_states[EMOTION_HAPPY] = "aslime-happy" + SEND_SIGNAL(parent, EMOTION_BUFFER_UPDATE_OVERLAY_STATES, parent.emotion_states) + parent.recompile_ai_tree() diff --git a/monkestation/code/modules/slimecore/slime_traits/soda_slime.dm b/monkestation/code/modules/slimecore/slime_traits/soda_slime.dm new file mode 100644 index 000000000000..81f1edfc4d1c --- /dev/null +++ b/monkestation/code/modules/slimecore/slime_traits/soda_slime.dm @@ -0,0 +1,32 @@ +/datum/slime_trait/soda_slime + name = "Soda Slime" + desc = "Modifies their genomes to allow them to produce soda instead of ooze" + menu_buttons = list(BEHAVIOUR_CHANGE) + +/datum/slime_trait/soda_slime/on_add(mob/living/basic/slime/parent) + . = ..() + var/datum/reagent/reagent = pick( + /datum/reagent/consumable/space_cola, + /datum/reagent/consumable/dr_gibb, + /datum/reagent/consumable/grenadine, + /datum/reagent/consumable/icetea, + /datum/reagent/consumable/menthol, + /datum/reagent/consumable/pwr_game, + /datum/reagent/consumable/shamblers, + /datum/reagent/consumable/spacemountainwind, + /datum/reagent/consumable/sodawater, + /datum/reagent/consumable/sol_dry, + /datum/reagent/consumable/space_up, + /datum/reagent/consumable/tonic, + /datum/reagent/consumable/ethanol/thirteenloko, + /datum/reagent/consumable/ethanol/whiskey_cola, + ) + parent.chemical_injection = reagent + parent.overriding_name_prefix = initial(reagent.name) + parent.update_slime_varience() + +/datum/slime_trait/soda_slime/on_remove(mob/living/basic/slime/parent) + . = ..() + parent.chemical_injection = null + parent.overriding_name_prefix = null + parent.update_slime_varience() diff --git a/monkestation/code/modules/spells/spell_types/aoe_spell/mind_swap.dm b/monkestation/code/modules/spells/spell_types/aoe_spell/mind_swap.dm index 335a2e99b29c..f55384da8ef3 100644 --- a/monkestation/code/modules/spells/spell_types/aoe_spell/mind_swap.dm +++ b/monkestation/code/modules/spells/spell_types/aoe_spell/mind_swap.dm @@ -61,6 +61,12 @@ if(!nearby_mob.key && target_requires_key) continue + if(HAS_TRAIT(nearby_mob, TRAIT_MIND_TEMPORARILY_GONE)) + continue + + if(HAS_TRAIT(nearby_mob, TRAIT_NO_MINDSWAP)) + continue + things += nearby_mob return things diff --git a/monkestation/code/modules/storytellers/converted_events/_base_event.dm b/monkestation/code/modules/storytellers/converted_events/_base_event.dm index 6a85bfb630ef..ee3ce781be7b 100644 --- a/monkestation/code/modules/storytellers/converted_events/_base_event.dm +++ b/monkestation/code/modules/storytellers/converted_events/_base_event.dm @@ -201,11 +201,14 @@ var/list/possible_candidates = cast_control.get_candidates() var/list/candidates = list() if(cast_control == SSgamemode.current_roundstart_event && length(SSgamemode.roundstart_antag_minds)) + log_storyteller("Running roundstart antagonist assignment, event: [src], roundstart_antag_minds: [english_list(SSgamemode.roundstart_antag_minds)]") for(var/datum/mind/antag_mind in SSgamemode.roundstart_antag_minds) if(!antag_mind.current) + log_storyteller("Roundstart antagonist setup error: antag_mind([antag_mind]) in roundstart_antag_minds without a set mob") continue candidates += antag_mind.current - SSgamemode.roundstart_antag_minds -= antag_mind //commented out for debugging in case something breaks + SSgamemode.roundstart_antag_minds -= antag_mind + log_storyteller("Roundstart antag_mind, [antag_mind]") //guh var/list/cliented_list = list() @@ -221,7 +224,15 @@ var/client/picked_client = pick_n_take_weighted(weighted_candidates) var/mob/picked_mob = picked_client.mob if(picked_mob) - candidates |= poll_candidates("Would you like to be a [cast_control.name]", antag_flag, antag_flag, 20 SECONDS, FALSE, FALSE, list(picked_mob)) + candidates |= SSpolling.poll_candidates( + question = "Would you like to be a [cast_control.name]?", + check_jobban = antag_flag, + role = antag_flag, + poll_time = 20 SECONDS, + group = list(picked_mob), + pic_source = antag_datum, + role_name_text = lowertext(cast_control.name), + ) else var/client/picked_client = pick_n_take_weighted(weighted_candidates) var/mob/picked_mob = picked_client.mob @@ -263,7 +274,15 @@ mass_adjust_antag_rep(cliented_list, 1) if(prompted_picking) - candidates = poll_candidates("Would you like to be a [cast_control.name]", antag_flag, antag_flag, 20 SECONDS, FALSE, FALSE, candidates) + candidates = SSpolling.poll_candidates( + question = "Would you like to be a [cast_control.name]?", + check_jobban = antag_flag, + role = antag_flag, + poll_time = 20 SECONDS, + group = candidates, + pic_source = antag_datum, + role_name_text = lowertext(cast_control.name), + ) var/list/weighted_candidates = return_antag_rep_weight(candidates) diff --git a/monkestation/code/modules/storytellers/converted_events/event_overrides.dm b/monkestation/code/modules/storytellers/converted_events/event_overrides.dm index b40d14fb7b5d..dd475b2ec623 100644 --- a/monkestation/code/modules/storytellers/converted_events/event_overrides.dm +++ b/monkestation/code/modules/storytellers/converted_events/event_overrides.dm @@ -6,6 +6,7 @@ /datum/round_event_control/anomaly track = EVENT_TRACK_MODERATE tags = list(TAG_DESTRUCTIVE, TAG_MAGICAL) + shared_occurence_type = /datum/round_event_control/anomaly /datum/round_event_control/alien_infestation track = EVENT_TRACK_ROLESET @@ -71,7 +72,6 @@ /datum/round_event_control/fugitives track = EVENT_TRACK_MAJOR tags = list(TAG_COMBAT, TAG_EXTERNAL) - checks_antag_cap = TRUE /datum/round_event_control/gravity_generator_blackout track = EVENT_TRACK_MODERATE @@ -120,12 +120,10 @@ checks_antag_cap = TRUE /datum/round_event_control/obsessed - track = EVENT_TRACK_MODERATE - tags = list(TAG_CREW_ANTAG, TAG_TARGETED) + weight = 0 // use storyteller variants instead /datum/round_event_control/operative track = EVENT_TRACK_MAJOR //this is a safe guard and does not trigger normally(technically it can but not really) so no tags - checks_antag_cap = TRUE /datum/round_event_control/portal_storm_syndicate track = EVENT_TRACK_MAJOR @@ -209,6 +207,7 @@ /datum/round_event_control/spider_infestation track = EVENT_TRACK_ROLESET tags = list(TAG_COMBAT, TAG_DESTRUCTIVE, TAG_EXTERNAL, TAG_ALIEN) + checks_antag_cap = TRUE /datum/round_event_control/stray_cargo track = EVENT_TRACK_MUNDANE @@ -233,3 +232,4 @@ /datum/round_event_control/wormholes track = EVENT_TRACK_MODERATE tags = list(TAG_COMMUNAL, TAG_MAGICAL) + shared_occurence_type = /datum/round_event_control/anomaly diff --git a/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm b/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm index d90993f09861..c655e25f9b84 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm @@ -30,6 +30,7 @@ /datum/round_event_control/antagonist/solo/changeling/midround name = "Genome Awakening (Changelings)" + antag_flag = ROLE_CHANGELING_MIDROUND prompted_picking = TRUE max_occurrences = 2 shared_occurences = list(/datum/round_event_control/antagonist/solo/changeling/roundstart) diff --git a/monkestation/code/modules/storytellers/converted_events/solo/ghosts/paradox_clone.dm b/monkestation/code/modules/storytellers/converted_events/solo/ghosts/paradox_clone.dm index be987640501a..dc13c8d8b8fc 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/ghosts/paradox_clone.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/ghosts/paradox_clone.dm @@ -2,7 +2,8 @@ name = "Paradox Clone" tags = list(TAG_OUTSIDER_ANTAG, TAG_SPOOKY, TAG_TARGETED) typepath = /datum/round_event/antagonist/solo/ghost/paradox_clone - antag_flag = ROLE_WIZARD + antag_flag = ROLE_PARADOX_CLONE + track = EVENT_TRACK_MAJOR antag_datum = /datum/antagonist/paradox_clone enemy_roles = list( JOB_CAPTAIN, @@ -12,7 +13,7 @@ ) maximum_antags = 1 required_enemies = 2 - weight = 4 + weight = 6 max_occurrences = 2 prompted_picking = TRUE @@ -41,12 +42,18 @@ if(prompted_picking) - candidates = poll_candidates("Would you like to be a [cast_control.name]", antag_flag, antag_flag, 20 SECONDS, FALSE, FALSE, candidates) + candidates = SSpolling.poll_ghost_candidates( + "Would you like to be a paradox clone?", + check_jobban = ROLE_PARADOX_CLONE, + poll_time = 20 SECONDS, + pic_source = /datum/antagonist/paradox_clone, + role_name_text = "paradox clone", + ) var/list/weighted_candidates = return_antag_rep_weight(candidates) for(var/i in 1 to antag_count) - if(!candidates.len) + if(!length(candidates)) break var/client/mob_client = pick_n_take(weighted_candidates) diff --git a/monkestation/code/modules/storytellers/converted_events/solo/ghosts/wizard.dm b/monkestation/code/modules/storytellers/converted_events/solo/ghosts/wizard.dm index 74c7cf7cf320..0a60d45d24dc 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/ghosts/wizard.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/ghosts/wizard.dm @@ -24,11 +24,11 @@ max_occurrences = 1 prompted_picking = TRUE -/datum/round_event_control/antagonist/solo/ghost/wizard/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE) +/datum/round_event_control/antagonist/solo/from_ghosts/wizard/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE) . = ..() if(!.) return - if(GLOB.wizardstart.len == 0) + if(!length(GLOB.wizardstart)) return FALSE /datum/round_event/antagonist/solo/ghost/wizard diff --git a/monkestation/code/modules/storytellers/converted_events/solo/malf.dm b/monkestation/code/modules/storytellers/converted_events/solo/malf.dm index d5cb6f3fb621..b931cf1ec884 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/malf.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/malf.dm @@ -15,7 +15,7 @@ maximum_antags = 1 exclusive_roles = list(JOB_AI) required_enemies = 4 - weight = 2 + weight = 3 min_players = 35 max_occurrences = 1 diff --git a/monkestation/code/modules/storytellers/converted_events/solo/obsessed.dm b/monkestation/code/modules/storytellers/converted_events/solo/obsessed.dm index f2f6498560eb..bdb3e263454e 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/obsessed.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/obsessed.dm @@ -1,5 +1,5 @@ /datum/round_event_control/antagonist/solo/obsessed - antag_flag = ROLE_TRAITOR + antag_flag = ROLE_OBSESSED tags = list(TAG_COMBAT) antag_datum = /datum/antagonist/obsessed typepath = /datum/round_event/antagonist/solo/obsessed diff --git a/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm b/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm index 48ae15bf4317..adc9f127a003 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm @@ -31,7 +31,7 @@ min_players = 35 roundstart = TRUE earliest_start = 0 SECONDS - weight = 0 //value was 3, we need to manually test if this works or not before allowing it normally + weight = 3 //value was 3, we need to manually test if this works or not before allowing it normally max_occurrences = 1 /datum/antagonist/rev/head/event_trigger @@ -61,6 +61,8 @@ revolution.round_result(finished) /datum/round_event/antagonist/solo/revolutionary/tick() + if(finished) + return var/winner = revolution.process_victory() if(isnull(winner)) return diff --git a/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm b/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm index 653e57269421..7514064a56db 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm @@ -1,5 +1,5 @@ /datum/round_event_control/antagonist/solo/traitor - antag_flag = ROLE_TRAITOR + antag_flag = ROLE_SYNDICATE_INFILTRATOR tags = list(TAG_COMBAT) antag_datum = /datum/antagonist/traitor/infiltrator protected_roles = list( @@ -21,7 +21,7 @@ /datum/round_event_control/antagonist/solo/traitor/roundstart name = "Traitors" - antag_flag = ROLE_SYNDICATE_INFILTRATOR + antag_flag = ROLE_TRAITOR antag_datum = /datum/antagonist/traitor roundstart = TRUE earliest_start = 0 SECONDS diff --git a/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm b/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm index 67f0b999ba41..12d081b8fcea 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm @@ -21,7 +21,7 @@ required_enemies = 5 roundstart = TRUE earliest_start = 0 SECONDS - weight = 3 + weight = 2 min_players = 35 max_occurrences = 1 diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm index d75f5a82fd3c..e470094e44f7 100644 --- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm +++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm @@ -168,11 +168,12 @@ SUBSYSTEM_DEF(gamemode) for(var/type in subtypesof(/datum/storyteller)) storytellers[type] = new type() - for(var/type in typesof(/datum/round_event_control)) - var/datum/round_event_control/event = new type() - if(!event.typepath || !event.name) - continue //don't want this one! leave it for the garbage collector + for(var/datum/round_event_control/event_type as anything in typesof(/datum/round_event_control)) + if(!event_type::typepath || !event_type::name) + continue + var/datum/round_event_control/event = new event_type if(!event.valid_for_map()) + qdel(event) continue // event isn't good for this map no point in trying to add it to the list control += event //add it to the list of all events (controls) getHoliday() @@ -367,8 +368,9 @@ SUBSYSTEM_DEF(gamemode) /// At this point we've rolled roundstart events and antags and we handle leftover points here. /datum/controller/subsystem/gamemode/proc/handle_post_setup_points() - for(var/track in event_track_points) //Just halve the points for now. - event_track_points[track] *= 0.5 +// for(var/track in event_track_points) //Just halve the points for now. +// event_track_points[track] *= 0.5 TESTING HOW THINGS GO WITHOUT THIS HALVING OF POINTS + return /// Because roundstart events need 2 steps of firing for purposes of antags, here is the first step handled, happening before occupation division. /datum/controller/subsystem/gamemode/proc/handle_pre_setup_roundstart_events() diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm index 43ba3f3b7a7b..76daca2e1dd2 100644 --- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm +++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm @@ -65,10 +65,13 @@ if(!guarantees_roundstart_roleset && prob(roundstart_prob) && !roundstart_checks) roundstart_checks = TRUE + + if(SSgamemode.current_roundstart_event && !SSgamemode.ran_roundstart && (guarantees_roundstart_roleset || roundstart_checks)) + buy_event(SSgamemode.current_roundstart_event, EVENT_TRACK_ROLESET, TRUE) + log_storyteller("Running SSgamemode.current_roundstart_event\[[SSgamemode.current_roundstart_event]\]") + SSgamemode.current_roundstart_event = null if(!ignores_roundstart) SSgamemode.ran_roundstart = TRUE - if(SSgamemode.current_roundstart_event) - buy_event(SSgamemode.current_roundstart_event, EVENT_TRACK_ROLESET) add_points(delta_time) handle_tracks() @@ -150,7 +153,7 @@ var/total_cost = bought_event.cost * mode.point_thresholds[track] if(!bought_event.roundstart) total_cost *= (1 + (rand(-cost_variance, cost_variance)/100)) //Apply cost variance if not roundstart event - mode.event_track_points[track] -= total_cost + mode.event_track_points[track] = max(mode.event_track_points[track] - total_cost, 0) message_admins("Storyteller purchased and triggered [bought_event] event, on [track] track, for [total_cost] cost.") if(bought_event.roundstart) if(!ignores_roundstart) @@ -181,5 +184,5 @@ /datum/storyteller/guide name = "The Guide" desc = "The Guide will provide a balanced and varied experience. Consider this the default experience." - weight = 8 + weight = 6 always_votable = TRUE diff --git a/monkestation/code/modules/storytellers/storytellers/clown.dm b/monkestation/code/modules/storytellers/storytellers/clown.dm index 27e0f6ce4076..0ba6750acbd3 100644 --- a/monkestation/code/modules/storytellers/storytellers/clown.dm +++ b/monkestation/code/modules/storytellers/storytellers/clown.dm @@ -12,6 +12,6 @@ ) tag_multipliers = list(TAG_COMMUNAL = 1.1, TAG_SPOOKY = 1.2) guarantees_roundstart_roleset = FALSE - restricted = FALSE //admins can still use this if they want the crew to really suffer, for that reason im going all in + restricted = TRUE //admins can still use this if they want the crew to really suffer, for that reason im going all in roundstart_prob = 75 ignores_roundstart = TRUE diff --git a/monkestation/code/modules/storytellers/storytellers/ghost.dm b/monkestation/code/modules/storytellers/storytellers/ghost.dm index 7659268aaa14..4ae0bdde8fb4 100644 --- a/monkestation/code/modules/storytellers/storytellers/ghost.dm +++ b/monkestation/code/modules/storytellers/storytellers/ghost.dm @@ -5,4 +5,4 @@ disable_distribution = TRUE population_max = 25 welcome_text = "The station feels invisible to outside influence." - weight = 3 + weight = 1 diff --git a/monkestation/code/modules/storytellers/storytellers/jester.dm b/monkestation/code/modules/storytellers/storytellers/jester.dm index f57eab8f41ee..f330d68b9141 100644 --- a/monkestation/code/modules/storytellers/storytellers/jester.dm +++ b/monkestation/code/modules/storytellers/storytellers/jester.dm @@ -4,8 +4,8 @@ event_repetition_multiplier = 0.8 point_gains_multipliers = list( EVENT_TRACK_MUNDANE = 1.2, - EVENT_TRACK_MODERATE = 1.4, - EVENT_TRACK_MAJOR = 1.4, + EVENT_TRACK_MODERATE = 1.3, + EVENT_TRACK_MAJOR = 1.3, EVENT_TRACK_ROLESET = 1, EVENT_TRACK_OBJECTIVES = 1 ) diff --git a/monkestation/code/modules/storytellers/storytellers/mystic.dm b/monkestation/code/modules/storytellers/storytellers/mystic.dm index 8ef1ae7de068..cf42c6bce029 100644 --- a/monkestation/code/modules/storytellers/storytellers/mystic.dm +++ b/monkestation/code/modules/storytellers/storytellers/mystic.dm @@ -1,6 +1,6 @@ /datum/storyteller/mystic name = "The Mystic" - desc = "The Mystic gives events from beyond the vale, some of which may even be magic in nature." + desc = "The Mystic gives events from beyond the veil, some of which may even be magic in nature." tag_multipliers = list(TAG_SPOOKY = 1.2, TAG_MAGICAL = 1.5, TAG_SPACE = 1.1) weight = 2 - population_min = 25 //wizard events spooky + population_min = 40 //all current magic antags are very murder and/or pop-based (eg: cult, wizard, heretic) change if we get less murdery magic antags diff --git a/monkestation/code/modules/storytellers/storytellers/operative.dm b/monkestation/code/modules/storytellers/storytellers/operative.dm index 58ebdb3f84cb..bc29f71ac12b 100644 --- a/monkestation/code/modules/storytellers/storytellers/operative.dm +++ b/monkestation/code/modules/storytellers/storytellers/operative.dm @@ -17,6 +17,7 @@ EVENT_TRACK_OBJECTIVES = 1 ) tag_multipliers = list(TAG_ALIEN = 0.4, TAG_CREW_ANTAG = 1.1) + restricted = TRUE population_min = 45 ignores_roundstart = TRUE weight = 1 diff --git a/monkestation/code/modules/storytellers/storytellers/sleeper.dm b/monkestation/code/modules/storytellers/storytellers/sleeper.dm index 6539e51ca965..845f821d0908 100644 --- a/monkestation/code/modules/storytellers/storytellers/sleeper.dm +++ b/monkestation/code/modules/storytellers/storytellers/sleeper.dm @@ -11,5 +11,6 @@ guarantees_roundstart_roleset = FALSE tag_multipliers = list(TAG_COMBAT = 0.6, TAG_DESTRUCTIVE = 0.7) always_votable = TRUE //good for low pop + population_max = 45 welcome_text = "The day is going slowly." - weight = 1 //close to greenshift so its very low weight + weight = 2 diff --git a/monkestation/code/modules/surgery/bodyparts/simian_bodyparts.dm b/monkestation/code/modules/surgery/bodyparts/simian_bodyparts.dm index 6f9d58a8a585..522324f44f22 100644 --- a/monkestation/code/modules/surgery/bodyparts/simian_bodyparts.dm +++ b/monkestation/code/modules/surgery/bodyparts/simian_bodyparts.dm @@ -1,5 +1,6 @@ /obj/item/bodypart/head/simian icon_greyscale = 'monkestation/icons/mob/species/simian/bodyparts.dmi' + icon_husk = 'monkestation/icons/mob/species/simian/bodyparts.dmi' husk_type = "simian" limb_id = SPECIES_SIMIAN is_dimorphic = FALSE @@ -9,6 +10,7 @@ /obj/item/bodypart/chest/simian icon_greyscale = 'monkestation/icons/mob/species/simian/bodyparts.dmi' + icon_husk = 'monkestation/icons/mob/species/simian/bodyparts.dmi' husk_type = "simian" limb_id = SPECIES_SIMIAN is_dimorphic = FALSE @@ -18,6 +20,7 @@ /obj/item/bodypart/arm/left/simian icon_greyscale = 'monkestation/icons/mob/species/simian/bodyparts.dmi' + icon_husk = 'monkestation/icons/mob/species/simian/bodyparts.dmi' husk_type = "simian" limb_id = SPECIES_SIMIAN bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM @@ -26,6 +29,7 @@ /obj/item/bodypart/arm/right/simian icon_greyscale = 'monkestation/icons/mob/species/simian/bodyparts.dmi' + icon_husk = 'monkestation/icons/mob/species/simian/bodyparts.dmi' husk_type = "simian" limb_id = SPECIES_SIMIAN bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM @@ -34,14 +38,18 @@ /obj/item/bodypart/leg/left/simian icon_greyscale = 'monkestation/icons/mob/species/simian/bodyparts.dmi' + icon_husk = 'monkestation/icons/mob/species/simian/bodyparts.dmi' husk_type = "simian" limb_id = SPECIES_SIMIAN bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM + footprint_sprite = FOOTPRINT_SPRITE_PAWS /obj/item/bodypart/leg/right/simian icon_greyscale = 'monkestation/icons/mob/species/simian/bodyparts.dmi' + icon_husk = 'monkestation/icons/mob/species/simian/bodyparts.dmi' husk_type = "simian" limb_id = SPECIES_SIMIAN bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM + footprint_sprite = FOOTPRINT_SPRITE_PAWS dmg_overlay_type = "monkey" diff --git a/monkestation/code/modules/uplink/uplink_items/device_tools.dm b/monkestation/code/modules/uplink/uplink_items/device_tools.dm index bc0776cbb196..627764f0e1f1 100644 --- a/monkestation/code/modules/uplink/uplink_items/device_tools.dm +++ b/monkestation/code/modules/uplink/uplink_items/device_tools.dm @@ -12,3 +12,12 @@ cost = 12 item = /obj/item/autosurgeon/syndicate/hacked_linked_surgery surplus = 50 + +/datum/uplink_item/device_tools/compressionkit + name = "Bluespace Compression Kit" + desc = "A modified version of a BSRPED that can be used to reduce the size of most items while retaining their original functions! \ + Does not work on storage items. \ + Recharge using bluespace crystals. \ + Comes with 5 charges." + item = /obj/item/compression_kit + cost = 4 diff --git a/monkestation/code/modules/viking/viking_armour.dm b/monkestation/code/modules/viking/viking_armour.dm new file mode 100644 index 000000000000..9c5bacd94e5e --- /dev/null +++ b/monkestation/code/modules/viking/viking_armour.dm @@ -0,0 +1,109 @@ +//vikings can't go naked now should they +// I mean they coould but funny armour + +/obj/item/clothing/head/viking + icon = 'monkestation/icons/viking/viking_items.dmi' + worn_icon = 'monkestation/icons/viking/viking_armor.dmi' + desc = "oi admins wrong one" + +/obj/item/clothing/under/viking + icon = 'monkestation/icons/viking/viking_items.dmi' + worn_icon ='monkestation/icons/viking/viking_armor.dmi' + desc = "oi admins wrong one" + +//warning this item will include the godslayer armor heal (as soon as i get the code in) +/obj/item/clothing/head/viking/godly_helmet + name = " Horned Helm" + desc = "A helmet blessed by the gods its wearer will not go down without a fight." + worn_icon_state = "horned_helm_worn" + icon_state = "horned_helm_item" + armor_type = /datum/armor/godly_viking + w_class = WEIGHT_CLASS_NORMAL + resistance_flags = FIRE_PROOF | ACID_PROOF + clothing_flags = STOPSPRESSUREDAMAGE +/// Amount to heal when the effect is triggered + var/heal_amount = 500 + /// Time until the effect can take place again + var/effect_cooldown_time = 5 MINUTES + /// Current cooldown for the effect + COOLDOWN_DECLARE(effect_cooldown) + var/static/list/damage_heal_order = list(BRUTE, BURN, OXY) + +/obj/item/clothing/head/viking/godly_helmet/examine(mob/user) + . = ..() + if(loc == user && !COOLDOWN_FINISHED(src, effect_cooldown)) + . += "You feel like the revival effect will be able to occur again in [COOLDOWN_TIMELEFT(src, effect_cooldown) / 10] seconds." + +/obj/item/clothing/head/viking/godly_helmet/equipped(mob/user, slot) + . = ..() + if(slot & ITEM_SLOT_HEAD) + RegisterSignal(user, COMSIG_MOB_STATCHANGE, PROC_REF(resurrect)) + return + UnregisterSignal(user, COMSIG_MOB_STATCHANGE) + +/obj/item/clothing/head/viking/godly_helmet/dropped(mob/user) + ..() + UnregisterSignal(user, COMSIG_MOB_STATCHANGE) + +/obj/item/clothing/head/viking/godly_helmet/proc/resurrect(mob/living/carbon/user, new_stat) + SIGNAL_HANDLER + if(new_stat > CONSCIOUS && new_stat < DEAD && COOLDOWN_FINISHED(src, effect_cooldown)) + COOLDOWN_START(src, effect_cooldown, effect_cooldown_time) //This needs to happen first, otherwise there's an infinite loop + user.heal_ordered_damage(heal_amount, damage_heal_order) + user.visible_message(span_notice("[user] suddenly revives, as if their rage healed them!"), span_notice("You suddenly feel invigorated!")) + playsound(user.loc, 'sound/magic/clockwork/ratvar_attack.ogg', 50) + +/obj/item/clothing/under/viking/godly_tunic + name = " Cloak of Fenrir" + desc = "A cloak made from hide torn from Fenrir." + worn_icon_state = "pelts" + icon_state = "pelts" + armor_type = /datum/armor/godly_viking + resistance_flags = FIRE_PROOF | ACID_PROOF + w_class = WEIGHT_CLASS_NORMAL + clothing_flags = STOPSPRESSUREDAMAGE + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + +/datum/armor/godly_viking + melee = 80 + bullet = 75 + laser = 75 + energy = 70 + bomb = 75 + bio = 100 + fire = 100 + acid = 100 + wound = 75 + +/obj/item/clothing/head/viking/helmet + name = "viking helmet" + desc = "The helmet of someone insane enough to bring an axe to a gun fight." + worn_icon_state = "honeless_helm_worn" + icon_state = "hornless_helm_item" + armor_type = /datum/armor/viking + w_class = WEIGHT_CLASS_NORMAL + resistance_flags = FIRE_PROOF | ACID_PROOF + clothing_flags = STOPSPRESSUREDAMAGE + dog_fashion = /datum/dog_fashion/head/berserker + +/obj/item/clothing/under/viking/tunic + name = "viking tunic" + desc = "A tunic made from wolf pelts." + worn_icon_state = "pelts" + icon_state = "pelts" + armor_type = /datum/armor/viking + w_class = WEIGHT_CLASS_NORMAL + resistance_flags = FIRE_PROOF | ACID_PROOF + clothing_flags = STOPSPRESSUREDAMAGE + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + +/datum/armor/viking + melee = 45 + bullet = 30 + laser = 30 + energy = 25 + bomb = 20 + bio = 75 + fire = 75 + acid = 100 + wound = 35 diff --git a/monkestation/code/modules/viking/viking_axes.dm b/monkestation/code/modules/viking/viking_axes.dm new file mode 100644 index 000000000000..e97e74235ca5 --- /dev/null +++ b/monkestation/code/modules/viking/viking_axes.dm @@ -0,0 +1,95 @@ +// fear the øx +// øx means axe for the uncultured + + + +/obj/item/melee/viking + icon = 'monkestation/icons/viking/viking_items.dmi' + lefthand_file = 'monkestation/icons/viking/axes_lefthand.dmi' + righthand_file = 'monkestation/icons/viking/axes_righthand.dmi' + worn_icon = 'monkestation/icons/viking/viking_armor.dmi' + +/obj/item/melee/viking/tenja + name = "boarding axe" + icon_state = "hand_axe" + worn_icon_state = "hand_axe_worn" + desc = "A one handed axe used by vikings." + hitsound = 'sound/weapons/bladeslice.ogg' + force = 20 + throwforce = 45 + embedding = 50 + wound_bonus = 25 + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/melee/viking/godly_tenja + name = "Leviathan Axe" + icon_state = "hand_axe_frost" + worn_icon_state = "hand_axe_frost_worn" + desc = "An axe with no equal to its power." + hitsound = 'sound/weapons/bladeslice.ogg' + force = 25 + throwforce = 65 + embedding = 75 + sharpness = SHARP_EDGED + wound_bonus = 30 + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/melee/viking/godly_tenja/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + if(iscarbon(target)) + var/mob/living/carbon/carbon_target = target + carbon_target.reagents.add_reagent(/datum/reagent/consumable/frostoil, 4) + carbon_target.reagents.add_reagent(/datum/reagent/consumable/ice, 4) + carbon_target.reagents.add_reagent(/datum/reagent/medicine/c2/hercuri, 4) +/obj/item/melee/viking/genja + name = "battle axe" + icon_state = "battleaxe0" + base_icon_state = "battleaxe" + worn_icon_state = "battle_axe_worn" + desc = "A large 2 handed axe used for raiding." + force = 15 + throwforce = 60 + embedding = 50 + sharpness = SHARP_EDGED + hitsound = 'sound/weapons/bladeslice.ogg' + wound_bonus = 30 + block_chance = 30 + slot_flags = ITEM_SLOT_BACK + w_class = WEIGHT_CLASS_BULKY +/// How much damage to do unwielded + var/force_unwielded = 15 + /// How much damage to do wielded + var/force_wielded = 30 + +/obj/item/melee/viking/genja/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, force_unwielded=force_unwielded, force_wielded=force_wielded, icon_wielded="[base_icon_state]1") + +/obj/item/melee/viking/genja/update_icon_state() + icon_state = "[base_icon_state]0" + return ..() +/obj/item/melee/viking/skeggox + name = "grappling axe" + icon_state = "hooking_axe_item" + lefthand_file = "hooking_axe_inhand_L" + righthand_file = "hooking_axe_inhand_R" + worn_icon_state = "hooking_axe_worn" + desc = "An axe meant to disarm the users opponent." + hitsound = 'sound/weapons/bladeslice.ogg' + force = 18 + throwforce = 40 + embedding = 50 + sharpness = SHARP_EDGED + wound_bonus = 20 + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_NORMAL + + +/obj/item/melee/viking/skeggox/afterattack(target, mob/user, proximity_flag) + . = ..() + if(ishuman(target) && proximity_flag) + var/mob/living/carbon/human/human_target = target + human_target.drop_all_held_items() + human_target.visible_message(span_danger("[user] disarms [human_target]!"), span_userdanger("[user] disarmed you!")) diff --git a/monkestation/code/modules/virology/disease/_disease.dm b/monkestation/code/modules/virology/disease/_disease.dm index 92f616095322..ae71c1d98470 100644 --- a/monkestation/code/modules/virology/disease/_disease.dm +++ b/monkestation/code/modules/virology/disease/_disease.dm @@ -381,6 +381,9 @@ GLOBAL_LIST_INIT(virusDB, list()) if(mob.immune_system) if(prob(8)) mob.immune_system.NaturalImmune() + //Slowly decay back to regular strength immune system while you are sick + if(mob.immune_system.strength > 1) + mob.immune_system.strength = max(1, mob.immune_system.strength - 0.01) if(!mob.immune_system.CanInfect(src)) cure(mob) @@ -824,10 +827,10 @@ GLOBAL_LIST_INIT(virusDB, list()) D.pattern = rand(1,6) D.pattern_color = "#[pick(randomhexes)][pick(randomhexes)][pick(randomhexes)][pick(randomhexes)][pick(randomhexes)][pick(randomhexes)]" if (alert("Do you want to specify the appearance of your pathogen in a petri dish?","Choose your appearance","Yes","No") == "Yes") - D.color = input(C, "Choose the color of the dish", "Cosmetic") as color + D.color = tgui_color_picker(C, "Choose the color of the dish", "Cosmetic") D.pattern = input(C, "Choose the shape of the pattern inside the dish (1 to 6)", "Cosmetic",rand(1,6)) as num D.pattern = clamp(D.pattern,1,6) - D.pattern_color = input(C, "Choose the color of the pattern", "Cosmetic") as color + D.pattern_color = tgui_color_picker(C, "Choose the color of the pattern", "Cosmetic") D.spread_flags = 0 if (alert("Can this virus spread_flags into blood? (warning! if choosing No, this virus will be impossible to sample and analyse!)","Spreading Vectors","Yes","No") == "Yes") diff --git a/monkestation/code/modules/virology/disease/symtoms/restricted/stage1.dm b/monkestation/code/modules/virology/disease/symtoms/restricted/stage1.dm index 9912306d2102..d3c3e7e11357 100644 --- a/monkestation/code/modules/virology/disease/symtoms/restricted/stage1.dm +++ b/monkestation/code/modules/virology/disease/symtoms/restricted/stage1.dm @@ -53,7 +53,7 @@ /datum/symptom/transformation/proc/replace_banned_player(mob/living/new_mob, mob/living/affected_mob) // This can run well after the mob has been transferred, so need a handle on the new mob to kill it if needed. set waitfor = FALSE - var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as [affected_mob.real_name]?", bantype, bantype, 5 SECONDS, affected_mob) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as [affected_mob.real_name]?", check_jobban = bantype, role = bantype, poll_time = 5 SECONDS, target_mob = affected_mob, pic_source = affected_mob, role_name_text = "transformation victim") if(LAZYLEN(candidates)) var/mob/dead/observer/C = pick(candidates) to_chat(affected_mob, span_userdanger("Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!")) @@ -80,7 +80,7 @@ /datum/symptom/transformation/slime name = "Advanced Mutation Transformation" - new_form = /mob/living/simple_animal/slime + new_form = /mob/living/basic/slime /datum/symptom/transformation/corgi name = "The Barkening" diff --git a/monkestation/code/modules/virology/disease/symtoms/stage4.dm b/monkestation/code/modules/virology/disease/symtoms/stage4.dm index f6bf9943abf3..68e71556eda7 100644 --- a/monkestation/code/modules/virology/disease/symtoms/stage4.dm +++ b/monkestation/code/modules/virology/disease/symtoms/stage4.dm @@ -316,7 +316,7 @@ /datum/symptom/retrovirus/activate(mob/living/carbon/affected_mob) if(!iscarbon(affected_mob)) return - switch(max_multiplier) + switch(multiplier) if(1) if(prob(4)) to_chat(affected_mob, span_danger("Your head hurts.")) diff --git a/monkestation/code/modules/virology/items/antibodyscanner.dm b/monkestation/code/modules/virology/items/antibodyscanner.dm index 94bb400fd8d4..1642dcb224a1 100644 --- a/monkestation/code/modules/virology/items/antibodyscanner.dm +++ b/monkestation/code/modules/virology/items/antibodyscanner.dm @@ -115,6 +115,8 @@ if(ID in GLOB.virusDB) var/datum/data/record/V = GLOB.virusDB[ID] info += "
[V.fields["name"]][V.fields["nickname"] ? " \"[V.fields["nickname"]]\"" : ""] detected. Strength: [D.strength]. Robustness: [D.robustness]. Antigen: [D.get_antigen_string()]" + for(var/datum/symptom/e in D.symptoms) + info += "
Stage [e.stage] - [e.name] (Danger: [e.badness]): [e.desc]" else info += "
Unknown [D.form] detected. Strength: [D.strength]" diff --git a/monkestation/code/modules/virology/living/mouse.dm b/monkestation/code/modules/virology/living/mouse.dm index c374939b1217..b91a0f87b669 100644 --- a/monkestation/code/modules/virology/living/mouse.dm +++ b/monkestation/code/modules/virology/living/mouse.dm @@ -47,7 +47,8 @@ return var/obj/item/reagent_containers/syringe/I = attacking_item var/list/data = list("viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"viruses"=list(),"immunity"=list()) - data["viruses"] |= diseases + if(diseases) + data["viruses"] |= diseases data["immunity"] = immune_system.GetImmunity() I.reagents.add_reagent(/datum/reagent/blood, I.volume, data) diff --git a/monkestation/code/modules/virology/reagents/immune_healers.dm b/monkestation/code/modules/virology/reagents/immune_healers.dm index bf428afd31e0..bd8c6b33e55a 100644 --- a/monkestation/code/modules/virology/reagents/immune_healers.dm +++ b/monkestation/code/modules/virology/reagents/immune_healers.dm @@ -3,9 +3,9 @@ description = "A powerful immune enhancing drug, often used in small doses to counteract immunodeficiency." color = "#667056" ph = 7.4 - metabolization_rate = 0.2 * REAGENTS_METABOLISM + metabolization_rate = 0.5 * REAGENTS_METABOLISM data = list( - "level" = 0.05, + "level" = 0.1,//fast at bringing your immune strength back to your initial level "threshold" = 1, ) //level is in precentage @@ -23,16 +23,30 @@ "level" = -0.05, "threshold" = 1, ) //level is in precentage + overdose_threshold = 20 //about double the amount needed to bring your immune strength to 0 + +/datum/reagent/medicine/immune_healer/immune_suppressant/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + if(affected_mob.immune_system.antibodies && affected_mob.immune_system.strength == 0) + var/list/possible_antibodies = list() + //only reduce antibodies that arent 1 + for(var/antibody as anything in affected_mob.immune_system.antibodies) + if(affected_mob.immune_system.antibodies[antibody] > 1) + possible_antibodies += antibody + //checks if there are any antibodies to remove + if(length(possible_antibodies) > 0) + var/affected_antibody = pick(possible_antibodies) + affected_mob.immune_system.antibodies[affected_antibody] = max(affected_mob.immune_system.antibodies[affected_antibody] - 1, 1) + ..() /datum/reagent/medicine/immune_healer/immune_booster name = "Aetericilide" description = "An immune system enhancement drug, able to increase the power of a person's immune system up to 5 times its starting level." color = "#16eedc" ph = 6.3 - metabolization_rate = REAGENTS_METABOLISM + metabolization_rate = 0.2 * REAGENTS_METABOLISM data = list( - "level" = 0.05, - "threshold" = 5, + "level" = 0.01,//very slow, meaning it will do little when you are already sick + "threshold" = 3, ) //level is in precentage /datum/chemical_reaction/immune_healer diff --git a/monkestation/code/modules/wiremod_chem/components/ouputs/factory_output.dm b/monkestation/code/modules/wiremod_chem/components/ouputs/factory_output.dm index 03bab0cecf05..c67263b7f628 100644 --- a/monkestation/code/modules/wiremod_chem/components/ouputs/factory_output.dm +++ b/monkestation/code/modules/wiremod_chem/components/ouputs/factory_output.dm @@ -28,21 +28,13 @@ /obj/structure/chemical_tank/factory/proc/load_styles() //expertly copypasted from chemmasters - var/datum/asset/spritesheet/simple/assets = get_asset_datum(/datum/asset/spritesheet/simple/pills) pill_styles = list() for (var/x in 1 to PILL_STYLE_COUNT) - var/list/SL = list() - SL["id"] = x - SL["class_name"] = assets.icon_class_name("pill[x]") - pill_styles += list(SL) - var/datum/asset/spritesheet/simple/patches_assets = get_asset_datum(/datum/asset/spritesheet/simple/patches) + pill_styles += list("[x]" = image(icon = 'icons/obj/medical/chemical.dmi', icon_state = "pill[x]")) + patch_styles = list() for (var/raw_patch_style in PATCH_STYLE_LIST) - //adding class_name for use in UI - var/list/patch_style = list() - patch_style["style"] = raw_patch_style - patch_style["class_name"] = patches_assets.icon_class_name(raw_patch_style) - patch_styles += list(patch_style) + patch_styles += list("[raw_patch_style]" = image(icon = 'icons/obj/medical/chemical.dmi', icon_state = raw_patch_style)) /obj/structure/chemical_tank/factory/proc/generate_product(mob/user) if(reagents.total_volume < current_volume) @@ -52,7 +44,10 @@ reagents.trans_to(P, current_volume) P.name = trim("[product_name] pill") user.put_in_hands(P) - P.icon_state = "pill[rand(1,21)]" + if(pill_number == RANDOM_PILL_STYLE) + P.icon_state = "pill[rand(1,21)]" + else + P.icon_state = "pill[pill_number]" if(P.icon_state == "pill4") //mirrored from chem masters P.desc = "A tablet or capsule, but not just any, a red one, one taken by the ones not scared of knowledge, freedom, uncertainty and the brutal truths of reality." else if (product == "patch") @@ -69,6 +64,8 @@ /obj/structure/chemical_tank/factory/AltClick(mob/user) . = ..() + if(!length(pill_styles) || !length(patch_styles)) + load_styles() var/choice_product = tgui_input_list(user, "Pick Product", "[name]", list("pill", "patch", "bottle")) if(choice_product) product = choice_product @@ -81,6 +78,17 @@ if(choice_volume) current_volume = choice_volume + if(choice_product == "patch") + var/patch_choice = show_radial_menu(user, src, patch_styles) + if(patch_choice) + patch_style = patch_choice + + if(choice_product == "pill") + var/pill_choice = show_radial_menu(user, src, pill_styles) + if(pill_choice) + pill_number = text2num(pill_choice) + + /obj/structure/chemical_tank/factory/attack_hand(mob/living/user, list/modifiers) . = ..() generate_product(user) diff --git a/monkestation/code/modules/wiremod_chem/components/ouputs/injector_output.dm b/monkestation/code/modules/wiremod_chem/components/ouputs/injector_output.dm index d358dd196b5c..5db28e73425f 100644 --- a/monkestation/code/modules/wiremod_chem/components/ouputs/injector_output.dm +++ b/monkestation/code/modules/wiremod_chem/components/ouputs/injector_output.dm @@ -7,7 +7,8 @@ reagent_flags = TRANSPARENT var/max_inject = 20 - var/inject_amount = 10 + var/inject_amount = 0 + var/creator_ckey = "" /obj/structure/chemical_tank/injector/Initialize(mapload) . = ..() @@ -23,12 +24,17 @@ return if(!iscarbon(AM)) return + if(!inject_amount) + return visible_message("[name] pricks [AM] with a needle injecting [inject_amount] units into them.") reagents.trans_to(AM, inject_amount, methods = INJECT) + if(creator_ckey) + logger.Log(LOG_CATEGORY_ATTACK, "[creator_ckey] injected [AM] with [inject_amount] units using a remote injector.") /obj/structure/chemical_tank/injector/AltClick(mob/user) . = ..() - var/inject_choice = tgui_input_number(user, "How much to put into a patch?", "[name]", inject_amount, max_inject, 1) + var/inject_choice = tgui_input_number(user, "How much to inject someone with?", "[name]", inject_amount, max_inject, 1) if(inject_choice) inject_amount = inject_choice + creator_ckey = user.client?.ckey diff --git a/monkestation/code/random_rooms/bars/boxstation.dm b/monkestation/code/random_rooms/bars/boxstation.dm new file mode 100644 index 000000000000..3261cf60a976 --- /dev/null +++ b/monkestation/code/random_rooms/bars/boxstation.dm @@ -0,0 +1,28 @@ +//should most likely make these all be a subtype of /random_bar/box/ or something, would need use subtypesof() though +/datum/map_template/random_room/random_bar/box_base + name = "Box Default Bar" + room_id = "box_default_bar" + mappath = "_maps/~monkestation/RandomBars/Box/default_bar.dmm" + centerspawner = FALSE + template_height = 17 + template_width = 11 + weight = 6 + station_name = "Box Station" + +/datum/map_template/random_room/random_bar/box_base/clockwork + name = "Clockwork Bar" + room_id = "box_clockwork" + mappath = "_maps/~monkestation/RandomBars/Box/clockwork_icebox.dmm" + weight = 2 + +/datum/map_template/random_room/random_bar/box_base/cult + name = "Cult Bar" + room_id = "box_cult" + mappath = "_maps/~monkestation/RandomBars/Box/bloody_bar.dmm" + weight = 2 + +/datum/map_template/random_room/random_bar/box_base/vietmoth + name = "Jungle Bar" + room_id = "box_vietmoth" + mappath = "_maps/~monkestation/RandomBars/Box/vietmoth_bar.dmm" + weight = 12 diff --git a/monkestation/code/random_rooms/engines/boxstation.dm b/monkestation/code/random_rooms/engines/boxstation.dm new file mode 100644 index 000000000000..cb1e0e3efe9a --- /dev/null +++ b/monkestation/code/random_rooms/engines/boxstation.dm @@ -0,0 +1,30 @@ +// *!! BOXSTATION ENGINES !!* +/datum/map_template/random_room/random_engines/box_supermatter + name = "Box Supermatter" + room_id = "box_supermatter" + mappath = "_maps/~monkestation/RandomEngines/BoxStation/supermatter.dmm" + centerspawner = FALSE + template_height = 26 + template_width = 29 + weight = 10 + station_name = "Box Station" + +/datum/map_template/random_room/random_engines/box_particle_accelerator + name = "Box Particle Accelerator" + room_id = "box_particle_accelerator" + mappath = "_maps/~monkestation/RandomEngines/BoxStation/particle_accelerator.dmm" + centerspawner = FALSE + template_height = 26 + template_width = 29 + weight = 10 + station_name = "Box Station" + +/datum/map_template/random_room/random_engines/box_teg + name = "Box TEG Engine" + room_id = "box_teg" + mappath = "_maps/~monkestation/RandomEngines/BoxStation/teg.dmm" + centerspawner = FALSE + template_height = 26 + template_width = 29 + weight = 4 // Should probably be rarer than the other two engines. + station_name = "Box Station" diff --git a/monkestation/icons/bloodsuckers/red_rabbit.dmi b/monkestation/icons/bloodsuckers/red_rabbit.dmi index 24898ccf469c..4fd50a3534ae 100644 Binary files a/monkestation/icons/bloodsuckers/red_rabbit.dmi and b/monkestation/icons/bloodsuckers/red_rabbit.dmi differ diff --git a/monkestation/icons/mob/clothing/feet.dmi b/monkestation/icons/mob/clothing/feet.dmi index 85a44b104650..c08c98c308e6 100644 Binary files a/monkestation/icons/mob/clothing/feet.dmi and b/monkestation/icons/mob/clothing/feet.dmi differ diff --git a/monkestation/icons/mob/clothing/head.dmi b/monkestation/icons/mob/clothing/head.dmi index 37aeee10c23a..c7921069bbc5 100644 Binary files a/monkestation/icons/mob/clothing/head.dmi and b/monkestation/icons/mob/clothing/head.dmi differ diff --git a/monkestation/icons/mob/clothing/neck.dmi b/monkestation/icons/mob/clothing/neck.dmi index 93ecdfdbd2d7..90cd9217b009 100644 Binary files a/monkestation/icons/mob/clothing/neck.dmi and b/monkestation/icons/mob/clothing/neck.dmi differ diff --git a/monkestation/icons/mob/clothing/suit.dmi b/monkestation/icons/mob/clothing/suit.dmi index ad409f682258..0150c152aa30 100644 Binary files a/monkestation/icons/mob/clothing/suit.dmi and b/monkestation/icons/mob/clothing/suit.dmi differ diff --git a/monkestation/icons/mob/clothing/uniform.dmi b/monkestation/icons/mob/clothing/uniform.dmi index 520dba7ba5dc..a4fed470b119 100644 Binary files a/monkestation/icons/mob/clothing/uniform.dmi and b/monkestation/icons/mob/clothing/uniform.dmi differ diff --git a/monkestation/icons/mob/clothing/worn_modsuit.dmi b/monkestation/icons/mob/clothing/worn_modsuit.dmi index 5bb12b10c05e..900e2c30e61e 100644 Binary files a/monkestation/icons/mob/clothing/worn_modsuit.dmi and b/monkestation/icons/mob/clothing/worn_modsuit.dmi differ diff --git a/monkestation/icons/mob/species/misc/suit_digi.dmi b/monkestation/icons/mob/species/misc/suit_digi.dmi index b11c02238f9d..5f3ccb4adf62 100644 Binary files a/monkestation/icons/mob/species/misc/suit_digi.dmi and b/monkestation/icons/mob/species/misc/suit_digi.dmi differ diff --git a/monkestation/icons/mob/sprite_accessories/underwear.dmi b/monkestation/icons/mob/sprite_accessories/underwear.dmi new file mode 100644 index 000000000000..da098ea4cb4e Binary files /dev/null and b/monkestation/icons/mob/sprite_accessories/underwear.dmi differ diff --git a/monkestation/icons/obj/clothing/hats.dmi b/monkestation/icons/obj/clothing/hats.dmi index 468845fa1707..f394e9161053 100644 Binary files a/monkestation/icons/obj/clothing/hats.dmi and b/monkestation/icons/obj/clothing/hats.dmi differ diff --git a/monkestation/icons/obj/clothing/modsuits/modsuit.dmi b/monkestation/icons/obj/clothing/modsuits/modsuit.dmi index eaa4f7a83278..3d550c1034cd 100644 Binary files a/monkestation/icons/obj/clothing/modsuits/modsuit.dmi and b/monkestation/icons/obj/clothing/modsuits/modsuit.dmi differ diff --git a/monkestation/icons/obj/clothing/necks.dmi b/monkestation/icons/obj/clothing/necks.dmi index d6ac2f1156dd..57a9f05b6921 100644 Binary files a/monkestation/icons/obj/clothing/necks.dmi and b/monkestation/icons/obj/clothing/necks.dmi differ diff --git a/monkestation/icons/obj/clothing/shoes.dmi b/monkestation/icons/obj/clothing/shoes.dmi index 1880c29f579d..e0924e8e0ade 100644 Binary files a/monkestation/icons/obj/clothing/shoes.dmi and b/monkestation/icons/obj/clothing/shoes.dmi differ diff --git a/monkestation/icons/obj/clothing/suits.dmi b/monkestation/icons/obj/clothing/suits.dmi index 4a06fc1f705a..d0ee109ee212 100644 Binary files a/monkestation/icons/obj/clothing/suits.dmi and b/monkestation/icons/obj/clothing/suits.dmi differ diff --git a/monkestation/icons/obj/clothing/uniforms.dmi b/monkestation/icons/obj/clothing/uniforms.dmi index 44d6b97e3b93..b08cdc09b81f 100644 Binary files a/monkestation/icons/obj/clothing/uniforms.dmi and b/monkestation/icons/obj/clothing/uniforms.dmi differ diff --git a/monkestation/icons/obj/drinks/soda.dmi b/monkestation/icons/obj/drinks/soda.dmi new file mode 100644 index 000000000000..203f48ba5135 Binary files /dev/null and b/monkestation/icons/obj/drinks/soda.dmi differ diff --git a/monkestation/icons/obj/food/misc.dmi b/monkestation/icons/obj/food/misc.dmi new file mode 100644 index 000000000000..0dd7cf2936dc Binary files /dev/null and b/monkestation/icons/obj/food/misc.dmi differ diff --git a/monkestation/icons/obj/hydroponics/fruit.dmi b/monkestation/icons/obj/hydroponics/fruit.dmi index 05967937abed..69ec16c9a999 100644 Binary files a/monkestation/icons/obj/hydroponics/fruit.dmi and b/monkestation/icons/obj/hydroponics/fruit.dmi differ diff --git a/monkestation/icons/obj/hydroponics/growing.dmi b/monkestation/icons/obj/hydroponics/growing.dmi index b5671e37f2dd..4bec447cf04d 100644 Binary files a/monkestation/icons/obj/hydroponics/growing.dmi and b/monkestation/icons/obj/hydroponics/growing.dmi differ diff --git a/monkestation/icons/obj/hydroponics/harvest.dmi b/monkestation/icons/obj/hydroponics/harvest.dmi index 776803f82b3c..7ec45274b7e7 100644 Binary files a/monkestation/icons/obj/hydroponics/harvest.dmi and b/monkestation/icons/obj/hydroponics/harvest.dmi differ diff --git a/monkestation/icons/obj/items_and_weapons.dmi b/monkestation/icons/obj/items_and_weapons.dmi index 919998aba182..549e16e92b15 100644 Binary files a/monkestation/icons/obj/items_and_weapons.dmi and b/monkestation/icons/obj/items_and_weapons.dmi differ diff --git a/monkestation/icons/obj/machines/research.dmi b/monkestation/icons/obj/machines/research.dmi index 8fe658106256..e8a4d3697571 100644 Binary files a/monkestation/icons/obj/machines/research.dmi and b/monkestation/icons/obj/machines/research.dmi differ diff --git a/monkestation/icons/obj/structures/shelf.dmi b/monkestation/icons/obj/structures/shelf.dmi new file mode 100644 index 000000000000..494bd3b404ac Binary files /dev/null and b/monkestation/icons/obj/structures/shelf.dmi differ diff --git a/monkestation/icons/obj/tiles.dmi b/monkestation/icons/obj/tiles.dmi index 5bdd17f76b5c..1089b9644645 100644 Binary files a/monkestation/icons/obj/tiles.dmi and b/monkestation/icons/obj/tiles.dmi differ diff --git a/monkestation/icons/obj/tools.dmi b/monkestation/icons/obj/tools.dmi index a0585e59be08..be9fce62d2a5 100644 Binary files a/monkestation/icons/obj/tools.dmi and b/monkestation/icons/obj/tools.dmi differ diff --git a/monkestation/icons/obj/weapons/guns/fingergun_emote.dmi b/monkestation/icons/obj/weapons/guns/fingergun_emote.dmi new file mode 100644 index 000000000000..8c788ded6e81 Binary files /dev/null and b/monkestation/icons/obj/weapons/guns/fingergun_emote.dmi differ diff --git a/monkestation/icons/viking/axes_lefthand.dmi b/monkestation/icons/viking/axes_lefthand.dmi new file mode 100644 index 000000000000..c0b190cba6b0 Binary files /dev/null and b/monkestation/icons/viking/axes_lefthand.dmi differ diff --git a/monkestation/icons/viking/axes_righthand.dmi b/monkestation/icons/viking/axes_righthand.dmi new file mode 100644 index 000000000000..7ff5c11b052e Binary files /dev/null and b/monkestation/icons/viking/axes_righthand.dmi differ diff --git a/monkestation/icons/viking/viking_armor.dmi b/monkestation/icons/viking/viking_armor.dmi new file mode 100644 index 000000000000..41e7fa7644e1 Binary files /dev/null and b/monkestation/icons/viking/viking_armor.dmi differ diff --git a/monkestation/icons/viking/viking_items.dmi b/monkestation/icons/viking/viking_items.dmi new file mode 100644 index 000000000000..2c62689dcfdd Binary files /dev/null and b/monkestation/icons/viking/viking_items.dmi differ diff --git a/sound/ambience/antag/revolutionary_tide.ogg b/sound/ambience/antag/revolutionary_tide.ogg new file mode 100644 index 000000000000..be8e4a749855 Binary files /dev/null and b/sound/ambience/antag/revolutionary_tide.ogg differ diff --git a/sound/attributions.txt b/sound/attributions.txt index 0729d506d6fc..4bdcd008aa17 100644 --- a/sound/attributions.txt +++ b/sound/attributions.txt @@ -108,3 +108,17 @@ https://freesound.org/people/reelworldstudio/sounds/161122/ arcade_jump.ogg is adapted from se2001's "8-Bit Jump 3", which is public domain (CC 0): hhttps://freesound.org/people/se2001/sounds/528568/ + + + + +revolutionary_tide.ogg is adapted from several audio samples: + +Marching.wav, which is licensed under CC Attribution 4.0 +https://freesound.org/people/WebbFilmsUK/sounds/200321/ + +TribalDrums.wav, which is licensed under Noncommercial 4.0 License +https://freesound.org/people/vmgraw/sounds/235610/ + +vmgraw's "Distant Whistle" (CC 0) +https://freesound.org/people/giddster/sounds/414480/ diff --git a/sound/items/hypospray.ogg b/sound/items/hypospray.ogg new file mode 100644 index 000000000000..e5c7bd8f92b9 Binary files /dev/null and b/sound/items/hypospray.ogg differ diff --git a/sound/misc/woohoo.ogg b/sound/misc/woohoo.ogg new file mode 100644 index 000000000000..fbbc4f08ca78 Binary files /dev/null and b/sound/misc/woohoo.ogg differ diff --git a/sound/voice/moth/credit.txt b/sound/voice/moth/credit.txt new file mode 100644 index 000000000000..7f64b72841e3 --- /dev/null +++ b/sound/voice/moth/credit.txt @@ -0,0 +1,5 @@ +"moth_flutter" modified from +https://freesound.org/people/Godowan/sounds/240476/ +(CC 0 license) + +who knows where the original moth scream noise was I sure as hell don't \ No newline at end of file diff --git a/sound/voice/moth/moth_death.ogg b/sound/voice/moth/moth_death.ogg new file mode 100644 index 000000000000..df23cfa472ac Binary files /dev/null and b/sound/voice/moth/moth_death.ogg differ diff --git a/sound/voice/moth/moth_flutter.ogg b/sound/voice/moth/moth_flutter.ogg new file mode 100644 index 000000000000..f5737d522ca2 Binary files /dev/null and b/sound/voice/moth/moth_flutter.ogg differ diff --git a/sound/voice/sec_death.ogg b/sound/voice/sec_death.ogg new file mode 100644 index 000000000000..25f9b24c313f Binary files /dev/null and b/sound/voice/sec_death.ogg differ diff --git a/strings/mother.json b/strings/mother.json new file mode 100644 index 000000000000..ed122a86c1a3 --- /dev/null +++ b/strings/mother.json @@ -0,0 +1,49 @@ +{ + "do_something": [ + "CLEAN YOUR ROOM THIS INSTANT!", + "DON'T SIT THAT CLOSE TO THE TV!", + "FOR GOD'S SAKE, GO TAKE A SHOWER!!", + "IT'S TIME TO WAKE UP FOR SCHOOL!!", + "PAUSE THAT ONLINE GAME! NOW!", + "PUT SOME CLOTHES ON! YOU'LL CATCH A COLD!", + "STOP ASKING FOR MONEY, I'M NOT AN ATM!", + "WATCH YOUR MOUTH, CHILD!!", + "WHY DON'T YOU ANSWER MY PHONE CALLS?!", + "YOU SHOULD @pick(verb) YOUR @pick(relative) ONCE IN A WHILE!" + ], + + "be_upset": [ + "BECAUSE I SAID SO!", + "I DON'T CARE WHAT YOU SAY!", + "I'M NOT ASKING; I'M TELLING!!", + "I WASN'T BORN YESTERDAY!", + "MONEY DOESN'T GROW ON TREES!", + "WHAT DID I DO TO DESERVE A KID LIKE THIS...", + "USELESS!", + "YOU INSULT YOUR GRANDPARENTS!" + ], + + "get_reprimanded": [ + "I BROUGHT YOU INTO THIS WORLD, I CAN TAKE YOU OUT!!!", + "I'M GOING TO THROW A FLIP-FLOP AT YOU!!", + "NO VIDEOGAMES FOR THE REST OF THE DAY!", + "WAIT UNTIL YOUR FATHER GETS HOME!", + "YOU'LL THANK ME ONE DAY!", + "YOU'RE DISOWNED!!!", + "YOU'RE GROUNDED!!" + ], + + "verb": [ + "CALL", + "HELP", + "VISIT" + ], + + "relative": [ + "AUNT AND UNCLE", + "DAD", + "GRANDPARENTS", + "MOM" + ] + +} diff --git a/strings/names/operative_alias.txt b/strings/names/operative_alias.txt new file mode 100644 index 000000000000..582851fc07ce --- /dev/null +++ b/strings/names/operative_alias.txt @@ -0,0 +1,126 @@ +Agent +Agony +Alias +Alpha +Argo +Barker +Batter +Beef +Beetle +Bomber +Bonsai +Boss +Boston +Bovine +Bravo +Caboose +Callsign +Carmack +Carolina +Carp +Chains +Charlie +Church +Collar +Comedian +Crash +Creeper +Cretin +Criminal +Cyborg +Dallas +Delta +Doc +Donk +Drowning +Dude +Dwarf +Echo +Emo +Eva +Finger +Fish +Fitzgerald +Flash +Flyboy +Foxtrot +Freak +Freeman +Fugitive +Gaffer +Giant +Goalie +Golf +Gorbino +Green +Grime +Guy +Hologram +Hotel +Houston +Indica +Ion +Jacket +Jeremy +Jones +Kars +Legion +Librarian +Lightbringer +Lighter +Lightning +Looper +Lover +Marksman +Maurauder +Misty +Musketeer +Mycus +Neutron +Nightmare +Peacekeeper +Peddler +Point +Pooh +Private +Psycho +Pyro +Red +Revenant +Rocker +Ronin +Sack +Samson +Sarge +Scorch +Scout +Scream +Scum +Serenity +Shade +Shadow +Shark +Shocker +Shooter +Shrieker +Shrike +Silas +Silence +Simmons +Slider +Smoke +Snake +Stalker +Superfly +Suspect +Swiper +Tank +Telecrystal +Tex +Thirteen +Twister +Unusual +Vixen +White +Wilson +Winters diff --git a/strings/pill_names.json b/strings/pill_names.json index dcf46f66cc82..e5e2a7e366b1 100644 --- a/strings/pill_names.json +++ b/strings/pill_names.json @@ -74,6 +74,8 @@ "East", "Eclipse", "Ecstasy", +"Elijah", +"Elixer", "Emissary", "Engineer", "Engineering", @@ -96,6 +98,8 @@ "Garfunkel", "Glorious", "Goblin", +"God", +"Goo", "Green", "Grief", "Grievous", @@ -115,8 +119,10 @@ "Hyper", "Ian", "Ice", +"Juice", "Jumper", "Kilgor", +"Lad", "Lettuce", "Lightning", "Liquid", @@ -142,7 +148,9 @@ "Noise", "North", "One", +"One-A-Minute", "Ook", +"Orange", "Organic", "Patrick", "Pete", diff --git a/strings/tips.txt b/strings/tips.txt index 0569c19c09af..761b43d18a56 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -1,4 +1,4 @@ -@You can use the |, + and _ characters to emphasize parts of what you say in-game (e.g. say"my _ass_ |is| +heavy+." will be outputted as "my ass is heavy."). You can also escape these emphasizers by appending backslashes before them (e.g. say"1\+2\+3" will come out as "1+2+3" and not "1\2\3"). +@You can italicize, embolden or underline portions of your messages by enclosing them with |, + or _ respectively. You can also avoid this by adding backslashes (they won't show in the message) before these characters. ♪ Hey, have you ever tried appending the % character before your messages when speaking in-game? ♫ A Scientist will pay top dollar for your frogs! A thrown glass of water can make a slippery tile, allowing you to slow down your pursuers in a pinch. @@ -13,9 +13,9 @@ As a Botanist, you should look into increasing the potency of your plants. This As a Cargo Technician, you can earn more cargo points by shipping back crates from maintenance, liquid containers, plasma sheets, rare seeds from hydroponics, and more! As a Cargo Technician, you can hack MULEbots to make them faster, run over people in their way, and even let you ride them! As a Cargo Technician, you can order contraband items from the supply shuttle console by de-constructing it and using a multitool on the circuit board, the re-assembling it. +As a Changeling, taking on someone else's appearance will also give you all of their scars. You can use Fleshmend to get rid of all scars. As a Changeling, the Extract DNA sting counts for your genome absorb objective, but does not let you respec your powers. As a Changeling, you can absorb someone by strangling them and using the Absorb verb; this gives you the ability to rechoose your powers, the DNA of whoever you absorbed, the memory of the absorbed, and some samples of things the absorbed said. -As a Changeling, your Regenerate Limbs power will quickly heal all of your wounds, but they'll still leave scars. Changelings can use Fleshmend to get rid of scars, or you can ingest Carpotoxin to get rid of them like a normal person. As a Chemist, some chemicals can only be synthesized by heating up the contents with a chemical heater or manually with lighters and similar tools. As a Chemist, there are dozens of chemicals that can heal, and even more that can cause harm. Experiment! As a Chemist, Water and Potassium mixed together will create an explosion, with power scaling by amount used. Don't do it. @@ -210,7 +210,6 @@ Clicking on a windoor rather then bumping into it will keep it open, you can cli Different weapons have different strengths. Some weapons, such as spears, floor tiles, and throwing stars, deal more damage when thrown compared to when attacked normally. Don't be afraid to ask for help, whether from your peers or from admins. Experiment with different setups of the Supermatter engine to maximize output, but don't risk the crew's safety to do so! -Felinids get temporarily distracted by laser pointers. Use this to your advantage when being pursued by one. Firesuits and winter coats offer mild protection from the cold, allowing you to spend longer periods of time near breaches and space than if wearing nothing at all. Glass shards can be welded to make glass, and iron rods can be welded to make iron. Ores can be welded too, but this takes a lot of fuel. Holding alt and left clicking a tile will allow you to see its contents in the top right window pane, which is much faster than holding shift and right clicking. diff --git a/tgstation.dme b/tgstation.dme index 4cd89db41bef..a6afc700c2c6 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -13,6 +13,7 @@ // END_PREFERENCES // BEGIN_INCLUDE +#include "__odlint.dm" #include "_maps\_basemap.dm" #include "code\__byond_version_compat.dm" #include "code\_compile_options.dm" @@ -61,7 +62,6 @@ #include "code\__DEFINES\cameranets.dm" #include "code\__DEFINES\cargo.dm" #include "code\__DEFINES\challengs.dm" -#include "code\__DEFINES\changeling.dm" #include "code\__DEFINES\chat.dm" #include "code\__DEFINES\chat_filter.dm" #include "code\__DEFINES\chicken.dm" @@ -133,6 +133,7 @@ #include "code\__DEFINES\language.dm" #include "code\__DEFINES\layers.dm" #include "code\__DEFINES\lazy_templates.dm" +#include "code\__DEFINES\library.dm" #include "code\__DEFINES\lighting.dm" #include "code\__DEFINES\lights.dm" #include "code\__DEFINES\liquids.dm" @@ -295,6 +296,7 @@ #include "code\__DEFINES\dcs\signals\signals_bitrunning.dm" #include "code\__DEFINES\dcs\signals\signals_blob.dm" #include "code\__DEFINES\dcs\signals\signals_bot.dm" +#include "code\__DEFINES\dcs\signals\signals_camera.dm" #include "code\__DEFINES\dcs\signals\signals_changeling.dm" #include "code\__DEFINES\dcs\signals\signals_circuit.dm" #include "code\__DEFINES\dcs\signals\signals_client.dm" @@ -406,8 +408,10 @@ #include "code\__DEFINES\~monkestation\mobs.dm" #include "code\__DEFINES\~monkestation\particles.dm" #include "code\__DEFINES\~monkestation\physics.dm" +#include "code\__DEFINES\~monkestation\power.dm" #include "code\__DEFINES\~monkestation\projectiles.dm" #include "code\__DEFINES\~monkestation\robots.dm" +#include "code\__DEFINES\~monkestation\slimes.dm" #include "code\__DEFINES\~monkestation\smoothing.dm" #include "code\__DEFINES\~monkestation\span.dm" #include "code\__DEFINES\~monkestation\status_effects.dm" @@ -420,6 +424,8 @@ #include "code\__DEFINES\~monkestation\dcs\signals\signals_atom.dm" #include "code\__DEFINES\~monkestation\dcs\signals\signals_carbon.dm" #include "code\__DEFINES\~monkestation\dcs\signals\signals_guns.dm" +#include "code\__DEFINES\~monkestation\dcs\signals\signals_item.dm" +#include "code\__DEFINES\~monkestation\dcs\signals\signals_mob.dm" #include "code\__DEFINES\~monkestation\dcs\signals\signals_traitor.dm" #include "code\__HELPERS\_auxtools_api.dm" #include "code\__HELPERS\_lists.dm" @@ -428,12 +434,14 @@ #include "code\__HELPERS\admin.dm" #include "code\__HELPERS\ai.dm" #include "code\__HELPERS\animations.dm" +#include "code\__HELPERS\announcements.dm" #include "code\__HELPERS\areas.dm" #include "code\__HELPERS\atmospherics.dm" #include "code\__HELPERS\atoms.dm" #include "code\__HELPERS\auxtools.dm" #include "code\__HELPERS\bitflag_lists.dm" #include "code\__HELPERS\bodyparts.dm" +#include "code\__HELPERS\cameras.dm" #include "code\__HELPERS\chat.dm" #include "code\__HELPERS\chat_filter.dm" #include "code\__HELPERS\clients.dm" @@ -532,10 +540,12 @@ #include "code\__HELPERS\sorts\InsertSort.dm" #include "code\__HELPERS\sorts\MergeSort.dm" #include "code\__HELPERS\sorts\TimSort.dm" +#include "code\__HELPERS\~monkestation-helpers\announcements.dm" #include "code\__HELPERS\~monkestation-helpers\icon_smoothing.dm" #include "code\__HELPERS\~monkestation-helpers\time.dm" #include "code\__HELPERS\~monkestation-helpers\virology.dm" #include "code\__HELPERS\~monkestation-helpers\logging\attack.dm" +#include "code\__HELPERS\~monkestation-helpers\logging\game.dm" #include "code\_globalvars\_regexes.dm" #include "code\_globalvars\admin.dm" #include "code\_globalvars\bitfields.dm" @@ -686,6 +696,7 @@ #include "code\controllers\subsystem\persistent_paintings.dm" #include "code\controllers\subsystem\ping.dm" #include "code\controllers\subsystem\points_of_interest.dm" +#include "code\controllers\subsystem\polling.dm" #include "code\controllers\subsystem\profiler.dm" #include "code\controllers\subsystem\radiation.dm" #include "code\controllers\subsystem\radio.dm" @@ -764,6 +775,7 @@ #include "code\datums\beam.dm" #include "code\datums\browser.dm" #include "code\datums\callback.dm" +#include "code\datums\candidate_poll.dm" #include "code\datums\chat_payload.dm" #include "code\datums\chatmessage.dm" #include "code\datums\dash_weapon.dm" @@ -1135,6 +1147,7 @@ #include "code\datums\components\reagent_refiller.dm" #include "code\datums\components\recharging_attacks.dm" #include "code\datums\components\redirect_attack_hand_from_turf.dm" +#include "code\datums\components\reflection.dm" #include "code\datums\components\regenerator.dm" #include "code\datums\components\religious_tool.dm" #include "code\datums\components\remote_materials.dm" @@ -1327,6 +1340,7 @@ #include "code\datums\elements\earhealing.dm" #include "code\datums\elements\easily_fragmented.dm" #include "code\datums\elements\effect_trail.dm" +#include "code\datums\elements\elevation.dm" #include "code\datums\elements\embed.dm" #include "code\datums\elements\empprotection.dm" #include "code\datums\elements\eyestab.dm" @@ -1396,6 +1410,7 @@ #include "code\datums\elements\unfriend_attacker.dm" #include "code\datums\elements\update_icon_blocker.dm" #include "code\datums\elements\update_icon_updates_onmob.dm" +#include "code\datums\elements\uplink_reimburse.dm" #include "code\datums\elements\venomous.dm" #include "code\datums\elements\volatile_gas_storage.dm" #include "code\datums\elements\waddling.dm" @@ -1546,6 +1561,7 @@ #include "code\datums\ruins\space.dm" #include "code\datums\screentips\atom_context.dm" #include "code\datums\screentips\item_context.dm" +#include "code\datums\screentips\screentips.dm" #include "code\datums\skills\_skill.dm" #include "code\datums\skills\cleaning.dm" #include "code\datums\skills\fishing.dm" @@ -1568,6 +1584,7 @@ #include "code\datums\status_effects\song_effects.dm" #include "code\datums\status_effects\stacking_effect.dm" #include "code\datums\status_effects\wound_effects.dm" +#include "code\datums\status_effects\buffs\stop_drop_roll.dm" #include "code\datums\status_effects\buffs\stun_asorption.dm" #include "code\datums\status_effects\debuffs\blindness.dm" #include "code\datums\status_effects\debuffs\choke.dm" @@ -1755,7 +1772,7 @@ #include "code\game\machinery\camera\camera_assembly.dm" #include "code\game\machinery\camera\motion.dm" #include "code\game\machinery\camera\presets.dm" -#include "code\game\machinery\camera\tracking.dm" +#include "code\game\machinery\camera\trackable.dm" #include "code\game\machinery\computer\_computer.dm" #include "code\game\machinery\computer\accounting.dm" #include "code\game\machinery\computer\aifixer.dm" @@ -2073,7 +2090,6 @@ #include "code\game\objects\items\devices\anomaly_neutralizer.dm" #include "code\game\objects\items\devices\anomaly_releaser.dm" #include "code\game\objects\items\devices\beacon.dm" -#include "code\game\objects\items\devices\camera_bug.dm" #include "code\game\objects\items\devices\chameleonproj.dm" #include "code\game\objects\items\devices\destabilizing_crystal.dm" #include "code\game\objects\items\devices\desynchronizer.dm" @@ -2109,7 +2125,6 @@ #include "code\game\objects\items\devices\scanners\health_analyzer.dm" #include "code\game\objects\items\devices\scanners\scanner_wand.dm" #include "code\game\objects\items\devices\scanners\sequence_scanner.dm" -#include "code\game\objects\items\devices\scanners\slime_scanner.dm" #include "code\game\objects\items\devices\scanners\t_scanner.dm" #include "code\game\objects\items\food\_food.dm" #include "code\game\objects\items\food\bait.dm" @@ -2123,6 +2138,7 @@ #include "code\game\objects\items\food\egg.dm" #include "code\game\objects\items\food\frozen.dm" #include "code\game\objects\items\food\lizard.dm" +#include "code\game\objects\items\food\martian.dm" #include "code\game\objects\items\food\meatdish.dm" #include "code\game\objects\items\food\meatslab.dm" #include "code\game\objects\items\food\mexican.dm" @@ -2679,6 +2695,7 @@ #include "code\modules\antagonists\changeling\powers\augmented_eyesight.dm" #include "code\modules\antagonists\changeling\powers\biodegrade.dm" #include "code\modules\antagonists\changeling\powers\chameleon_skin.dm" +#include "code\modules\antagonists\changeling\powers\defib_grasp.dm" #include "code\modules\antagonists\changeling\powers\digitalcamo.dm" #include "code\modules\antagonists\changeling\powers\fakedeath.dm" #include "code\modules\antagonists\changeling\powers\fleshmend.dm" @@ -2694,6 +2711,7 @@ #include "code\modules\antagonists\changeling\powers\strained_muscles.dm" #include "code\modules\antagonists\changeling\powers\tiny_prick.dm" #include "code\modules\antagonists\changeling\powers\transform.dm" +#include "code\modules\antagonists\changeling\powers\void_adaption.dm" #include "code\modules\antagonists\clown_ops\bananium_bomb.dm" #include "code\modules\antagonists\clown_ops\clown_weapons.dm" #include "code\modules\antagonists\clown_ops\clownop.dm" @@ -3105,6 +3123,7 @@ #include "code\modules\bitrunning\components\avatar_connection.dm" #include "code\modules\bitrunning\components\bitrunning_points.dm" #include "code\modules\bitrunning\components\netpod_healing.dm" +#include "code\modules\bitrunning\components\virtual_elite_mob.dm" #include "code\modules\bitrunning\objects\byteforge.dm" #include "code\modules\bitrunning\objects\clothing.dm" #include "code\modules\bitrunning\objects\disks.dm" @@ -3123,18 +3142,19 @@ #include "code\modules\bitrunning\server\obj_generation.dm" #include "code\modules\bitrunning\server\quantum_server.dm" #include "code\modules\bitrunning\server\signal_handlers.dm" +#include "code\modules\bitrunning\server\threats.dm" #include "code\modules\bitrunning\server\util.dm" #include "code\modules\bitrunning\virtual_domain\safehouses.dm" #include "code\modules\bitrunning\virtual_domain\virtual_domain.dm" #include "code\modules\bitrunning\virtual_domain\domains\ash_drake.dm" #include "code\modules\bitrunning\virtual_domain\domains\beach_bar.dm" #include "code\modules\bitrunning\virtual_domain\domains\blood_drunk_miner.dm" +#include "code\modules\bitrunning\virtual_domain\domains\breeze_bay.dm" #include "code\modules\bitrunning\virtual_domain\domains\bubblegum.dm" #include "code\modules\bitrunning\virtual_domain\domains\clown_planet.dm" #include "code\modules\bitrunning\virtual_domain\domains\colossus.dm" #include "code\modules\bitrunning\virtual_domain\domains\gondola_asteroid.dm" #include "code\modules\bitrunning\virtual_domain\domains\hierophant.dm" -#include "code\modules\bitrunning\virtual_domain\domains\legion.dm" #include "code\modules\bitrunning\virtual_domain\domains\pipedream.dm" #include "code\modules\bitrunning\virtual_domain\domains\pirates.dm" #include "code\modules\bitrunning\virtual_domain\domains\psyker_shuffle.dm" @@ -3449,7 +3469,6 @@ #include "code\modules\clothing\suits\wintercoats.dm" #include "code\modules\clothing\suits\wiz_robe.dm" #include "code\modules\clothing\under\_under.dm" -#include "code\modules\clothing\under\accessories.dm" #include "code\modules\clothing\under\color.dm" #include "code\modules\clothing\under\costume.dm" #include "code\modules\clothing\under\ethereal.dm" @@ -3460,6 +3479,12 @@ #include "code\modules\clothing\under\suits.dm" #include "code\modules\clothing\under\syndicate.dm" #include "code\modules\clothing\under\trek.dm" +#include "code\modules\clothing\under\accessories\_accessories.dm" +#include "code\modules\clothing\under\accessories\armbands.dm" +#include "code\modules\clothing\under\accessories\badges.dm" +#include "code\modules\clothing\under\accessories\medals.dm" +#include "code\modules\clothing\under\accessories\tribal.dm" +#include "code\modules\clothing\under\accessories\vests.dm" #include "code\modules\clothing\under\jobs\cargo.dm" #include "code\modules\clothing\under\jobs\centcom.dm" #include "code\modules\clothing\under\jobs\command.dm" @@ -3487,6 +3512,7 @@ #include "code\modules\economy\account.dm" #include "code\modules\economy\holopay.dm" #include "code\modules\emoji\emoji_parse.dm" +#include "code\modules\emote_panel\emote_panel.dm" #include "code\modules\error_handler\error_handler.dm" #include "code\modules\error_handler\error_viewer.dm" #include "code\modules\escape_menu\details.dm" @@ -3656,7 +3682,6 @@ #include "code\modules\food_and_drinks\machinery\grill.dm" #include "code\modules\food_and_drinks\machinery\icecream_vat.dm" #include "code\modules\food_and_drinks\machinery\microwave.dm" -#include "code\modules\food_and_drinks\machinery\monkeyrecycler.dm" #include "code\modules\food_and_drinks\machinery\oven.dm" #include "code\modules\food_and_drinks\machinery\processor.dm" #include "code\modules\food_and_drinks\machinery\smartfridge.dm" @@ -3678,6 +3703,7 @@ #include "code\modules\food_and_drinks\recipes\tablecraft\recipes_frozen.dm" #include "code\modules\food_and_drinks\recipes\tablecraft\recipes_guide.dm" #include "code\modules\food_and_drinks\recipes\tablecraft\recipes_lizard.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_martian.dm" #include "code\modules\food_and_drinks\recipes\tablecraft\recipes_meat.dm" #include "code\modules\food_and_drinks\recipes\tablecraft\recipes_mexican.dm" #include "code\modules\food_and_drinks\recipes\tablecraft\recipes_misc.dm" @@ -3711,6 +3737,7 @@ #include "code\modules\hallucination\hud_screw.dm" #include "code\modules\hallucination\ice_cube.dm" #include "code\modules\hallucination\inhand_fake_item.dm" +#include "code\modules\hallucination\mother.dm" #include "code\modules\hallucination\nearby_fake_item.dm" #include "code\modules\hallucination\on_fire.dm" #include "code\modules\hallucination\screwy_health_doll.dm" @@ -3949,6 +3976,7 @@ #include "code\modules\language\uncommon.dm" #include "code\modules\language\voltaic.dm" #include "code\modules\language\xenocommon.dm" +#include "code\modules\library\admin_only.dm" #include "code\modules\library\barcode_scanner.dm" #include "code\modules\library\book.dm" #include "code\modules\library\bookcase.dm" @@ -4374,6 +4402,7 @@ #include "code\modules\mob\living\basic\space_fauna\revenant\revenant_harvest.dm" #include "code\modules\mob\living\basic\space_fauna\revenant\revenant_items.dm" #include "code\modules\mob\living\basic\space_fauna\revenant\revenant_objectives.dm" +#include "code\modules\mob\living\basic\space_fauna\slugcat\slugcat.dm" #include "code\modules\mob\living\basic\space_fauna\snake\snake.dm" #include "code\modules\mob\living\basic\space_fauna\snake\snake_ai.dm" #include "code\modules\mob\living\basic\space_fauna\space_dragon\dragon_breath.dm" @@ -4606,13 +4635,6 @@ #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\pandora.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\goose.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm" -#include "code\modules\mob\living\simple_animal\slime\death.dm" -#include "code\modules\mob\living\simple_animal\slime\emote.dm" -#include "code\modules\mob\living\simple_animal\slime\life.dm" -#include "code\modules\mob\living\simple_animal\slime\powers.dm" -#include "code\modules\mob\living\simple_animal\slime\slime.dm" -#include "code\modules\mob\living\simple_animal\slime\slime_say.dm" -#include "code\modules\mob\living\simple_animal\slime\subtypes.dm" #include "code\modules\mob_spawn\mob_spawn.dm" #include "code\modules\mob_spawn\corpses\job_corpses.dm" #include "code\modules\mob_spawn\corpses\mining_corpses.dm" @@ -4667,10 +4689,10 @@ #include "code\modules\modular_computers\computers\item\disks\computer_disk.dm" #include "code\modules\modular_computers\computers\item\disks\maintenance_disks.dm" #include "code\modules\modular_computers\computers\item\disks\role_disks.dm" +#include "code\modules\modular_computers\computers\item\disks\unique_disks.dm" #include "code\modules\modular_computers\computers\item\disks\virus_disk.dm" #include "code\modules\modular_computers\computers\machinery\console_presets.dm" #include "code\modules\modular_computers\computers\machinery\modular_computer.dm" -#include "code\modules\modular_computers\computers\machinery\modular_console.dm" #include "code\modules\modular_computers\file_system\computer_file.dm" #include "code\modules\modular_computers\file_system\data.dm" #include "code\modules\modular_computers\file_system\program.dm" @@ -4790,7 +4812,6 @@ #include "code\modules\power\cell.dm" #include "code\modules\power\energy_accumulator.dm" #include "code\modules\power\floodlight.dm" -#include "code\modules\power\generator.dm" #include "code\modules\power\gravitygenerator.dm" #include "code\modules\power\monitor.dm" #include "code\modules\power\multiz.dm" @@ -4802,6 +4823,7 @@ #include "code\modules\power\smes.dm" #include "code\modules\power\solar.dm" #include "code\modules\power\terminal.dm" +#include "code\modules\power\thermoelectric_generator.dm" #include "code\modules\power\tracker.dm" #include "code\modules\power\apc\apc_appearance.dm" #include "code\modules\power\apc\apc_attack.dm" @@ -4988,11 +5010,9 @@ #include "code\modules\reagents\chemistry\machinery\pandemic.dm" #include "code\modules\reagents\chemistry\machinery\reagentgrinder.dm" #include "code\modules\reagents\chemistry\machinery\smoke_machine.dm" -#include "code\modules\reagents\chemistry\reagents\alcohol_reagents.dm" #include "code\modules\reagents\chemistry\reagents\atmos_gas_reagents.dm" #include "code\modules\reagents\chemistry\reagents\cat2_medicine_reagents.dm" #include "code\modules\reagents\chemistry\reagents\catalyst_reagents.dm" -#include "code\modules\reagents\chemistry\reagents\drink_reagents.dm" #include "code\modules\reagents\chemistry\reagents\drug_reagents.dm" #include "code\modules\reagents\chemistry\reagents\food_reagents.dm" #include "code\modules\reagents\chemistry\reagents\impure_reagents.dm" @@ -5001,6 +5021,16 @@ #include "code\modules\reagents\chemistry\reagents\pyrotechnic_reagents.dm" #include "code\modules\reagents\chemistry\reagents\reaction_agents_reagents.dm" #include "code\modules\reagents\chemistry\reagents\toxin_reagents.dm" +#include "code\modules\reagents\chemistry\reagents\drinks\alcohol_reagents.dm" +#include "code\modules\reagents\chemistry\reagents\drinks\drink_reagents.dm" +#include "code\modules\reagents\chemistry\reagents\drinks\glass_styles\alcohol.dm" +#include "code\modules\reagents\chemistry\reagents\drinks\glass_styles\coffee_tea.dm" +#include "code\modules\reagents\chemistry\reagents\drinks\glass_styles\dairy.dm" +#include "code\modules\reagents\chemistry\reagents\drinks\glass_styles\juices.dm" +#include "code\modules\reagents\chemistry\reagents\drinks\glass_styles\mixed_alcohol.dm" +#include "code\modules\reagents\chemistry\reagents\drinks\glass_styles\mixed_drinks.dm" +#include "code\modules\reagents\chemistry\reagents\drinks\glass_styles\smoothies_shakes.dm" +#include "code\modules\reagents\chemistry\reagents\drinks\glass_styles\sodas.dm" #include "code\modules\reagents\chemistry\reagents\impure_reagents\impure_medicine_reagents.dm" #include "code\modules\reagents\chemistry\reagents\impure_reagents\impure_toxin_reagents.dm" #include "code\modules\reagents\chemistry\reagents\unique\eigenstasium.dm" @@ -5113,7 +5143,6 @@ #include "code\modules\research\techweb\_techweb_node.dm" #include "code\modules\research\techweb\all_nodes.dm" #include "code\modules\research\techweb\techweb_types.dm" -#include "code\modules\research\xenobiology\xenobio_camera.dm" #include "code\modules\research\xenobiology\xenobiology.dm" #include "code\modules\research\xenobiology\crossbreeding\__corecross.dm" #include "code\modules\research\xenobiology\crossbreeding\_clothing.dm" @@ -5262,7 +5291,6 @@ #include "code\modules\surgery\brain_surgery.dm" #include "code\modules\surgery\burn_dressing.dm" #include "code\modules\surgery\cavity_implant.dm" -#include "code\modules\surgery\core_removal.dm" #include "code\modules\surgery\coronary_bypass.dm" #include "code\modules\surgery\dental_implant.dm" #include "code\modules\surgery\dissection.dm" @@ -5374,6 +5402,7 @@ #include "code\modules\tgui\states\zlevel.dm" #include "code\modules\tgui_input\alert.dm" #include "code\modules\tgui_input\checkboxes.dm" +#include "code\modules\tgui_input\color.dm" #include "code\modules\tgui_input\list.dm" #include "code\modules\tgui_input\number.dm" #include "code\modules\tgui_input\text.dm" @@ -5623,11 +5652,16 @@ #include "code\modules\zombie\items.dm" #include "code\modules\zombie\organs.dm" #include "code\ze_genesis_call\genesis_call.dm" -#include "interface\fonts.dm" #include "interface\interface.dm" #include "interface\menu.dm" #include "interface\stylesheet.dm" #include "interface\skin.dmf" +#include "interface\fonts\fonts_datum.dm" +#include "interface\fonts\grand_9k.dm" +#include "interface\fonts\pixellari.dm" +#include "interface\fonts\spess_font.dm" +#include "interface\fonts\tiny_unicode.dm" +#include "interface\fonts\vcr_osd_mono.dm" #include "monkestation\code\__DEFINES\projectile.dm" #include "monkestation\code\__HELPERS\_lists.dm" #include "monkestation\code\__HELPERS\anime.dm" @@ -5645,6 +5679,7 @@ #include "monkestation\code\datums\patreon_data.dm" #include "monkestation\code\datums\stamina_container.dm" #include "monkestation\code\datums\twitch_data.dm" +#include "monkestation\code\datums\achievements\misc_achievements.dm" #include "monkestation\code\datums\ai\idle_behaviors\idle_dukeman.dm" #include "monkestation\code\datums\ai\monkey\dukeman_controller.dm" #include "monkestation\code\datums\ai_laws\laws_monke.dm" @@ -5653,12 +5688,14 @@ #include "monkestation\code\datums\brain_damage\magic.dm" #include "monkestation\code\datums\brain_damage\phobia.dm" #include "monkestation\code\datums\components\carbon_sprint.dm" +#include "monkestation\code\datums\components\irradiated.dm" #include "monkestation\code\datums\components\multi_hit.dm" #include "monkestation\code\datums\components\throw_bounce.dm" #include "monkestation\code\datums\components\turf_healing.dm" #include "monkestation\code\datums\components\uplink.dm" #include "monkestation\code\datums\diseases\advance\symptoms\clockwork.dm" #include "monkestation\code\datums\elements\area_locked.dm" +#include "monkestation\code\datums\elements\uncompressed_storage.dm" #include "monkestation\code\datums\keybinding\carbon.dm" #include "monkestation\code\datums\keybinding\communication.dm" #include "monkestation\code\datums\keybinding\living.dm" @@ -5670,23 +5707,28 @@ #include "monkestation\code\datums\status_effects\buffs.dm" #include "monkestation\code\datums\status_effects\disorient.dm" #include "monkestation\code\datums\status_effects\food_buffs.dm" +#include "monkestation\code\datums\storage\storage.dm" #include "monkestation\code\datums\wires\particle_accelerator.dm" #include "monkestation\code\game\atom.dm" #include "monkestation\code\game\sound.dm" #include "monkestation\code\game\machinery\cloning.dm" #include "monkestation\code\game\machinery\exp_cloner.dm" +#include "monkestation\code\game\machinery\launch_pad.dm" #include "monkestation\code\game\machinery\player_hologram.dm" #include "monkestation\code\game\machinery\prize_vendor.dm" #include "monkestation\code\game\machinery\suit_storage_unit.dm" #include "monkestation\code\game\machinery\computer\cloning.dm" #include "monkestation\code\game\machinery\computer\orders\order_veggies.dm" -#include "monkestation\code\game\machinery\power\ptl.dm" #include "monkestation\code\game\machinery\trains\train_cart.dm" #include "monkestation\code\game\machinery\trains\train_head.dm" #include "monkestation\code\game\machinery\trains\train_network.dm" +#include "monkestation\code\game\objects\items.dm" #include "monkestation\code\game\objects\effects\countdown.dm" #include "monkestation\code\game\objects\effects\landmark.dm" #include "monkestation\code\game\objects\effects\sprint_dust.dm" +#include "monkestation\code\game\objects\effects\anomalies\_anomalies.dm" +#include "monkestation\code\game\objects\effects\anomalies\anomalies_bioscrambler.dm" +#include "monkestation\code\game\objects\effects\anomalies\anomalies_dimensional.dm" #include "monkestation\code\game\objects\effects\anomalies\anomalies_dimensional_themes.dm" #include "monkestation\code\game\objects\effects\random\ai_module.dm" #include "monkestation\code\game\objects\effects\spawners\roomspawner.dm" @@ -5694,6 +5736,7 @@ #include "monkestation\code\game\objects\items\choice_beacon.dm" #include "monkestation\code\game\objects\items\cirno_plush.dm" #include "monkestation\code\game\objects\items\gravity_gun.dm" +#include "monkestation\code\game\objects\items\jukebox_beacon.dm" #include "monkestation\code\game\objects\items\miningweapons.dm" #include "monkestation\code\game\objects\items\mothlet_grenade.dm" #include "monkestation\code\game\objects\items\plushies.dm" @@ -5704,7 +5747,9 @@ #include "monkestation\code\game\objects\items\circuitboards\computer_circuitboards.dm" #include "monkestation\code\game\objects\items\circuitboards\holy_weapons.dm" #include "monkestation\code\game\objects\items\circuitboards\machine_circuitboards.dm" +#include "monkestation\code\game\objects\items\devices\compression_kit.dm" #include "monkestation\code\game\objects\items\devices\scanners.dm" +#include "monkestation\code\game\objects\items\devices\scanners\gas_analyzer.dm" #include "monkestation\code\game\objects\items\drugs\cocaine_chem.dm" #include "monkestation\code\game\objects\items\drugs\cocaine_item.dm" #include "monkestation\code\game\objects\items\drugs\crack_pipe.dm" @@ -5714,6 +5759,7 @@ #include "monkestation\code\game\objects\items\effects\nugget.dm" #include "monkestation\code\game\objects\items\effects\washing_machine.dm" #include "monkestation\code\game\objects\items\food\corndog.dm" +#include "monkestation\code\game\objects\items\food\misc.dm" #include "monkestation\code\game\objects\items\food\spaghetti.dm" #include "monkestation\code\game\objects\items\grenades\monkey_barrel.dm" #include "monkestation\code\game\objects\items\guns\crank_guns.dm" @@ -5728,6 +5774,7 @@ #include "monkestation\code\game\objects\items\storage\crate.dm" #include "monkestation\code\game\objects\items\storage\uplink_kits.dm" #include "monkestation\code\game\turfs\open\water.dm" +#include "monkestation\code\game\turfs\open\floor\misc_floor.dm" #include "monkestation\code\modules\_paperwork\paper_premade.dm" #include "monkestation\code\modules\admin\antag_tokens.dm" #include "monkestation\code\modules\admin\camera_view.dm" @@ -5746,6 +5793,7 @@ #include "monkestation\code\modules\aesthetics\subsystem\coloring.dm" #include "monkestation\code\modules\aesthetics\walls\iron.dm" #include "monkestation\code\modules\antagonists\_common\antag_datum.dm" +#include "monkestation\code\modules\antagonists\_common\antag_hud.dm" #include "monkestation\code\modules\antagonists\brainwashing\brainwashing.dm" #include "monkestation\code\modules\antagonists\brainwashing\brainwashing_alert.dm" #include "monkestation\code\modules\antagonists\brainwashing\brainwashing_helpers.dm" @@ -5868,6 +5916,11 @@ #include "monkestation\code\modules\antagonists\florida_man\florida_events.dm" #include "monkestation\code\modules\antagonists\florida_man\florida_spells.dm" #include "monkestation\code\modules\antagonists\florida_man\supplypods.dm" +#include "monkestation\code\modules\antagonists\heretic\items\forbidden_book.dm" +#include "monkestation\code\modules\antagonists\heretic\items\heretic_armor.dm" +#include "monkestation\code\modules\antagonists\heretic\knowledge\ash_lore.dm" +#include "monkestation\code\modules\antagonists\heretic\knowledge\sacrifice_knowledge\sacrifice_buff.dm" +#include "monkestation\code\modules\antagonists\nukeop\equipment\nuclear_bomb\bee_nuke.dm" #include "monkestation\code\modules\antagonists\slasher\__base_slasher_additions.dm" #include "monkestation\code\modules\antagonists\slasher\ghost_role.dm" #include "monkestation\code\modules\antagonists\slasher\slasher_datum.dm" @@ -5950,6 +6003,7 @@ #include "monkestation\code\modules\art_sci_overrides\faults\warps.dm" #include "monkestation\code\modules\art_sci_overrides\faults\whispers.dm" #include "monkestation\code\modules\art_sci_overrides\faults\zap.dm" +#include "monkestation\code\modules\atmospherics\machinery\air_alarm\air_alarm_ac.dm" #include "monkestation\code\modules\ballpit\ballbit_sink.dm" #include "monkestation\code\modules\ballpit\ballpit.dm" #include "monkestation\code\modules\bitrunners\code\ability_disks.dm" @@ -6051,12 +6105,12 @@ #include "monkestation\code\modules\cassettes\cassette.dm" #include "monkestation\code\modules\cassettes\cassette_approval.dm" #include "monkestation\code\modules\cassettes\random_cassette_selection.dm" +#include "monkestation\code\modules\cassettes\machines\cassette_rack.dm" #include "monkestation\code\modules\cassettes\machines\dj_station.dm" #include "monkestation\code\modules\cassettes\machines\portable_mixer.dm" #include "monkestation\code\modules\cassettes\machines\postbox.dm" #include "monkestation\code\modules\cassettes\machines\radio_mic.dm" #include "monkestation\code\modules\cassettes\machines\stationary_mixer.dm" -#include "monkestation\code\modules\cassettes\machines\cassette_storage\cassette_rack.dm" #include "monkestation\code\modules\cassettes\machines\media\__base_machine.dm" #include "monkestation\code\modules\cassettes\machines\media\HTML5_player.dm" #include "monkestation\code\modules\cassettes\machines\media\jukebox.dm" @@ -6114,8 +6168,11 @@ #include "monkestation\code\modules\clothing\suits\coats.dm" #include "monkestation\code\modules\clothing\suits\costume.dm" #include "monkestation\code\modules\clothing\suits\toggles.dm" +#include "monkestation\code\modules\clothing\under\_under.dm" #include "monkestation\code\modules\clothing\under\costume.dm" #include "monkestation\code\modules\clothing\under\undersuit.dm" +#include "monkestation\code\modules\clothing\under\accessories\medals.dm" +#include "monkestation\code\modules\clothing\under\accessories\tribal.dm" #include "monkestation\code\modules\clothing\under\civilian\clown_mime.dm" #include "monkestation\code\modules\clothing\under\civilian\rank.dm" #include "monkestation\code\modules\clothing\~donator\clothing.dm" @@ -6158,14 +6215,20 @@ #include "monkestation\code\modules\donator\code\item\plush.dm" #include "monkestation\code\modules\donator\code\mob\pets.dm" #include "monkestation\code\modules\events\brand_intelligence.dm" +#include "monkestation\code\modules\events\gravity_generator_blackout.dm" +#include "monkestation\code\modules\events\radiation_storm.dm" +#include "monkestation\code\modules\events\scrubber_clog.dm" +#include "monkestation\code\modules\events\scrubber_overflow.dm" #include "monkestation\code\modules\events\summon_wizard_event.dm" #include "monkestation\code\modules\events\ghost_role\drifting_contractor.dm" #include "monkestation\code\modules\events\wizard\summon_gifts.dm" #include "monkestation\code\modules\food_and_drinks\recipes\boiling.dm" #include "monkestation\code\modules\food_and_drinks\recipes\recipes_meat.dm" #include "monkestation\code\modules\ghost_players\area_changes.dm" +#include "monkestation\code\modules\ghost_players\centcom_grace.dm" #include "monkestation\code\modules\ghost_players\centcom_teleporter.dm" #include "monkestation\code\modules\ghost_players\ghost_player.dm" +#include "monkestation\code\modules\ghost_players\ghost_player_outfit.dm" #include "monkestation\code\modules\ghost_players\arena\arena_cleanser.dm" #include "monkestation\code\modules\ghost_players\arena\arena_items.dm" #include "monkestation\code\modules\ghost_players\arena\fight_button.dm" @@ -6189,6 +6252,7 @@ #include "monkestation\code\modules\hydroponics\plant_genes.dm" #include "monkestation\code\modules\hydroponics\seeds.dm" #include "monkestation\code\modules\hydroponics\grown\coconut.dm" +#include "monkestation\code\modules\hydroponics\grown\honeydew.dm" #include "monkestation\code\modules\hydroponics\machines\composter.dm" #include "monkestation\code\modules\hydroponics\machines\splicer.dm" #include "monkestation\code\modules\hydroponics\mutations\_mutations.dm" @@ -6201,7 +6265,9 @@ #include "monkestation\code\modules\job_xp\preferences\base_preferences.dm" #include "monkestation\code\modules\job_xp\preferences\xp_handlers.dm" #include "monkestation\code\modules\jobs\job_types\candysalesman.dm" +#include "monkestation\code\modules\jobs\job_types\chaplain.dm" #include "monkestation\code\modules\jobs\job_types\clown.dm" +#include "monkestation\code\modules\jobs\job_types\curator.dm" #include "monkestation\code\modules\jobs\job_types\dietwizard.dm" #include "monkestation\code\modules\jobs\job_types\ghost.dm" #include "monkestation\code\modules\jobs\job_types\godzilla.dm" @@ -6318,6 +6384,14 @@ #include "monkestation\code\modules\microfusion\code\microfusion_techweb.dm" #include "monkestation\code\modules\microfusion\code\phase_emitter.dm" #include "monkestation\code\modules\microfusion\code\projectiles.dm" +#include "monkestation\code\modules\mining\accelerators\_wastes_pin.dm" +#include "monkestation\code\modules\mining\accelerators\admin.dm" +#include "monkestation\code\modules\mining\accelerators\grenade.dm" +#include "monkestation\code\modules\mining\accelerators\pistol.dm" +#include "monkestation\code\modules\mining\accelerators\railgun.dm" +#include "monkestation\code\modules\mining\accelerators\repeater.dm" +#include "monkestation\code\modules\mining\accelerators\shockwave.dm" +#include "monkestation\code\modules\mining\accelerators\shotgun.dm" #include "monkestation\code\modules\mob\mob.dm" #include "monkestation\code\modules\mob\mob_defines.dm" #include "monkestation\code\modules\mob\dead\new_player\new_player.dm" @@ -6333,7 +6407,9 @@ #include "monkestation\code\modules\mob\dead\new_player\sprite_accessories\ipc_chassis.dm" #include "monkestation\code\modules\mob\dead\new_player\sprite_accessories\ipc_screens.dm" #include "monkestation\code\modules\mob\dead\new_player\sprite_accessories\multi_part.dm" +#include "monkestation\code\modules\mob\dead\new_player\sprite_accessories\sock_color.dm" #include "monkestation\code\modules\mob\dead\new_player\sprite_accessories\tails.dm" +#include "monkestation\code\modules\mob\dead\new_player\sprite_accessories\underwear.dm" #include "monkestation\code\modules\mob\living\emote.dm" #include "monkestation\code\modules\mob\living\living_defines.dm" #include "monkestation\code\modules\mob\living\status_procs.dm" @@ -6346,6 +6422,7 @@ #include "monkestation\code\modules\mob\living\carbon\carbon_defense.dm" #include "monkestation\code\modules\mob\living\carbon\carbon_defines.dm" #include "monkestation\code\modules\mob\living\carbon\carbon_update_icons.dm" +#include "monkestation\code\modules\mob\living\carbon\emote.dm" #include "monkestation\code\modules\mob\living\carbon\human\accessory_helpers.dm" #include "monkestation\code\modules\mob\living\carbon\human\carbon.dm" #include "monkestation\code\modules\mob\living\carbon\human\custom_bodytype.dm" @@ -6383,6 +6460,8 @@ #include "monkestation\code\modules\mob\living\simple_animal\megafauna\wendigo.dm" #include "monkestation\code\modules\mob\living\simple_animal\pets\bees.dm" #include "monkestation\code\modules\mob\living\simple_animal\pets\honk_platinum.dm" +#include "monkestation\code\modules\mod\mod_control.dm" +#include "monkestation\code\modules\mod\mod_types.dm" #include "monkestation\code\modules\modular_bartending\modglass.dm" #include "monkestation\code\modules\modular_bartending\garnishes\crafting_recipes.dm" #include "monkestation\code\modules\modular_bartending\garnishes\garnish_items.dm" @@ -6527,14 +6606,19 @@ #include "monkestation\code\modules\possession\basic_pixel_shift_editor.dm" #include "monkestation\code\modules\possession\item_overrides.dm" #include "monkestation\code\modules\possession\possessed_hud.dm" +#include "monkestation\code\modules\power\cables.dm" #include "monkestation\code\modules\power\lighting\floor_light.dm" #include "monkestation\code\modules\power\lighting\neon_lining.dm" +#include "monkestation\code\modules\power\power_transmission_laser\code\announcement.dm" +#include "monkestation\code\modules\power\power_transmission_laser\code\beam.dm" +#include "monkestation\code\modules\power\power_transmission_laser\code\machine.dm" #include "monkestation\code\modules\power\singularity\rad_collector.dm" #include "monkestation\code\modules\power\singularity\singularity_generator.dm" #include "monkestation\code\modules\power\singularity\particle_accelerator\particle.dm" #include "monkestation\code\modules\power\singularity\particle_accelerator\particle_accelerator.dm" #include "monkestation\code\modules\power\singularity\particle_accelerator\particle_controller.dm" #include "monkestation\code\modules\power\singularity\particle_accelerator\particle_emitter.dm" +#include "monkestation\code\modules\projectiles\guns\ballistic\revolver.dm" #include "monkestation\code\modules\projectiles\guns\ballistic\ryanecorp_whispering_jester.dm" #include "monkestation\code\modules\projectiles\guns\special\meat_hook.dm" #include "monkestation\code\modules\projectiles\projectile\bullets\c45_caseless.dm" @@ -6593,6 +6677,7 @@ #include "monkestation\code\modules\reagents\misc.dm" #include "monkestation\code\modules\reagents\reagent_containers.dm" #include "monkestation\code\modules\reagents\reagents.dm" +#include "monkestation\code\modules\reagents\sunset_sarsaparilla.dm" #include "monkestation\code\modules\reagents\fun\austrialium.dm" #include "monkestation\code\modules\reagents\fun\liquid_justice.dm" #include "monkestation\code\modules\reagents\fun\shakeium.dm" @@ -6600,6 +6685,7 @@ #include "monkestation\code\modules\reagents\medical\system_cleaner.dm" #include "monkestation\code\modules\reagents\reagent_containers\blood_pack.dm" #include "monkestation\code\modules\reagents\reagent_containers\drinks.dm" +#include "monkestation\code\modules\reagents\reagent_containers\sunsetglass.dm" #include "monkestation\code\modules\reagents\recipes\fun.dm" #include "monkestation\code\modules\reagents\recipes\medical.dm" #include "monkestation\code\modules\replays\hooks\generic_hooks.dm" @@ -6637,10 +6723,10 @@ #include "monkestation\code\modules\research\nanites\nanite_programs\utility.dm" #include "monkestation\code\modules\research\nanites\nanite_programs\weapon.dm" #include "monkestation\code\modules\research\techweb\all_nodes.dm" -#include "monkestation\code\modules\research\xenobiology\xenobio_camera.dm" #include "monkestation\code\modules\security\code\holographic_handcuffs.dm" #include "monkestation\code\modules\security\code\weapons\lawbringer.dm" #include "monkestation\code\modules\security\code\weapons\paco.dm" +#include "monkestation\code\modules\shelves\shelf.dm" #include "monkestation\code\modules\skyrat_snipes\languages.dm" #include "monkestation\code\modules\skyrat_snipes\reagents\drink_reagents.dm" #include "monkestation\code\modules\skyrat_snipes\vending_machines\vending_food.dm" @@ -6648,6 +6734,85 @@ #include "monkestation\code\modules\skyrat_snipes\vending_machines\vending_snacks.dm" #include "monkestation\code\modules\skyrat_snipes\vending_machines\vendors.dm" #include "monkestation\code\modules\slash_commands\world_topics.dm" +#include "monkestation\code\modules\slimecore\research_and_recipes.dm" +#include "monkestation\code\modules\slimecore\animations\slime_effects.dm" +#include "monkestation\code\modules\slimecore\assets\xenobiology.dm" +#include "monkestation\code\modules\slimecore\components\basic_scared_of_item.dm" +#include "monkestation\code\modules\slimecore\components\emotion_buffer.dm" +#include "monkestation\code\modules\slimecore\components\friendship_tracker.dm" +#include "monkestation\code\modules\slimecore\components\generic_mob_hunger.dm" +#include "monkestation\code\modules\slimecore\components\latch_feeding.dm" +#include "monkestation\code\modules\slimecore\components\liquid_secretion.dm" +#include "monkestation\code\modules\slimecore\components\mob_stacker.dm" +#include "monkestation\code\modules\slimecore\components\pollution_scrubber.dm" +#include "monkestation\code\modules\slimecore\components\vac_tagged.dm" +#include "monkestation\code\modules\slimecore\corral\corral_data.dm" +#include "monkestation\code\modules\slimecore\corral\machines\corral_corner.dm" +#include "monkestation\code\modules\slimecore\corral\upgrades\_base_upgrade.dm" +#include "monkestation\code\modules\slimecore\corral\upgrades\human_docility_upgrade.dm" +#include "monkestation\code\modules\slimecore\corral\upgrades\obliteration_upgrade.dm" +#include "monkestation\code\modules\slimecore\items\crossbreeds.dm" +#include "monkestation\code\modules\slimecore\items\mutation_syringe.dm" +#include "monkestation\code\modules\slimecore\items\vacuum_pack.dm" +#include "monkestation\code\modules\slimecore\machines\biomass_recycler.dm" +#include "monkestation\code\modules\slimecore\machines\extract_requestor.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_sucker.dm" +#include "monkestation\code\modules\slimecore\machines\slime_grinder.dm" +#include "monkestation\code\modules\slimecore\machines\slime_market.dm" +#include "monkestation\code\modules\slimecore\machines\slime_market_computer.dm" +#include "monkestation\code\modules\slimecore\machines\slime_pen_controller.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\ooze_compressor.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\ooze_compressor_plumbing.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\shitcode.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\recipes\_base_recipe.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\recipes\burning.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\recipes\charged.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\recipes\chilling.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\recipes\colors.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\recipes\consuming.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\recipes\industrial.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\recipes\prismatic.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\recipes\recurring.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\recipes\regenerative.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\recipes\reproductive.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\recipes\selfsustaining.dm" +#include "monkestation\code\modules\slimecore\machines\ooze_compressor\recipes\stabilized.dm" +#include "monkestation\code\modules\slimecore\machines\slime_store\_base_item.dm" +#include "monkestation\code\modules\slimecore\machines\slime_store\mutators.dm" +#include "monkestation\code\modules\slimecore\machines\slime_store\vac_upgrades.dm" +#include "monkestation\code\modules\slimecore\mobs\_base_slime.dm" +#include "monkestation\code\modules\slimecore\mobs\feeding_flora.dm" +#include "monkestation\code\modules\slimecore\mobs\ai_controller\controller.dm" +#include "monkestation\code\modules\slimecore\mobs\ai_controller\behaviours\clean_target.dm" +#include "monkestation\code\modules\slimecore\mobs\ai_controller\behaviours\feed.dm" +#include "monkestation\code\modules\slimecore\mobs\ai_controller\behaviours\find_target_without_trait.dm" +#include "monkestation\code\modules\slimecore\mobs\ai_controller\behaviours\flee_from_item.dm" +#include "monkestation\code\modules\slimecore\mobs\ai_controller\behaviours\slime_stacker.dm" +#include "monkestation\code\modules\slimecore\mobs\ai_controller\idle_behavior\slime_playful.dm" +#include "monkestation\code\modules\slimecore\mobs\ai_controller\subtrees\basic_melee_tree.dm" +#include "monkestation\code\modules\slimecore\mobs\ai_controller\subtrees\cleaning_tree.dm" +#include "monkestation\code\modules\slimecore\mobs\ai_controller\subtrees\find_target_slime.dm" +#include "monkestation\code\modules\slimecore\mobs\ai_controller\subtrees\flee_with_item.dm" +#include "monkestation\code\modules\slimecore\mobs\pet_commands\latch_feed.dm" +#include "monkestation\code\modules\slimecore\mobs\pet_commands\stop_feeding.dm" +#include "monkestation\code\modules\slimecore\reagents\_base_reagent.dm" +#include "monkestation\code\modules\slimecore\reagents\base_colors.dm" +#include "monkestation\code\modules\slimecore\slime_accessories\_base_accessory.dm" +#include "monkestation\code\modules\slimecore\slime_color_mutations\_base_color.dm" +#include "monkestation\code\modules\slimecore\slime_color_mutations\colors.dm" +#include "monkestation\code\modules\slimecore\slime_color_mutations\mutations\_base_mutation.dm" +#include "monkestation\code\modules\slimecore\slime_color_mutations\mutations\colors.dm" +#include "monkestation\code\modules\slimecore\slime_traits\_base_trait.dm" +#include "monkestation\code\modules\slimecore\slime_traits\beer_slime.dm" +#include "monkestation\code\modules\slimecore\slime_traits\cleaner.dm" +#include "monkestation\code\modules\slimecore\slime_traits\docility.dm" +#include "monkestation\code\modules\slimecore\slime_traits\endisnigh.dm" +#include "monkestation\code\modules\slimecore\slime_traits\never_ooze.dm" +#include "monkestation\code\modules\slimecore\slime_traits\never_split.dm" +#include "monkestation\code\modules\slimecore\slime_traits\polluter.dm" +#include "monkestation\code\modules\slimecore\slime_traits\radioactive.dm" +#include "monkestation\code\modules\slimecore\slime_traits\slime_cat.dm" +#include "monkestation\code\modules\slimecore\slime_traits\soda_slime.dm" #include "monkestation\code\modules\spells\spell_types\aoe_spell\mind_swap.dm" #include "monkestation\code\modules\spells\spell_types\conjure_item\summon_mjollnir.dm" #include "monkestation\code\modules\spells\spell_types\pointed\smite.dm" @@ -6779,6 +6944,8 @@ #include "monkestation\code\modules\vehicles\monkey_ball.dm" #include "monkestation\code\modules\vehicles\mecha\mecha_actions.dm" #include "monkestation\code\modules\vehicles\mecha\equipment\tools\other_tools.dm" +#include "monkestation\code\modules\viking\viking_armour.dm" +#include "monkestation\code\modules\viking\viking_axes.dm" #include "monkestation\code\modules\virology\__base_procs.dm" #include "monkestation\code\modules\virology\__effects.dm" #include "monkestation\code\modules\virology\fullscreen.dm" @@ -6865,8 +7032,10 @@ #include "monkestation\code\modules\wiremod_chem\housing\chemical_circuit.dm" #include "monkestation\code\modules\wiremod_chem\housing\precursor_tank.dm" #include "monkestation\code\random_rooms\room_base.dm" +#include "monkestation\code\random_rooms\bars\boxstation.dm" #include "monkestation\code\random_rooms\bars\icebox.dm" #include "monkestation\code\random_rooms\bars\tramstation.dm" +#include "monkestation\code\random_rooms\engines\boxstation.dm" #include "monkestation\code\random_rooms\engines\kilostation.dm" #include "monkestation\code\random_rooms\engines\metastation.dm" #include "monkestation\code\random_rooms\engines\tramstation.dm" diff --git a/tgui/packages/common/color.js b/tgui/packages/common/color.js deleted file mode 100644 index b59d82247aae..000000000000 --- a/tgui/packages/common/color.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * @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() { - // Alpha component needs to permit fractional values, so cannot use | - let alpha = parseFloat(this.a); - if (isNaN(alpha)) { - alpha = 1; - } - return `rgba(${this.r | 0}, ${this.g | 0}, ${this.b | 0}, ${alpha})`; - } - - // Darkens a color by a given percent. Returns a color, which can have toString called to get it's rgba() css value. - darken(percent) { - percent /= 100; - return new Color( - this.r - this.r * percent, - this.g - this.g * percent, - this.b - this.b * percent, - this.a - ); - } - - // Brightens a color by a given percent. Returns a color, which can have toString called to get it's rgba() css value. - lighten(percent) { - // No point in rewriting code we already have. - return this.darken(-percent); - } -} - -/** - * 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/color.ts b/tgui/packages/common/color.ts new file mode 100644 index 000000000000..724fa209d030 --- /dev/null +++ b/tgui/packages/common/color.ts @@ -0,0 +1,396 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +const EPSILON = 0.0001; + +export class Color { + r: number; + g: number; + b: number; + a: number; + + 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})`; + } + + // Darkens a color by a given percent. Returns a color, which can have toString called to get it's rgba() css value. + darken(percent: number): Color { + percent /= 100; + return new Color( + this.r - this.r * percent, + this.g - this.g * percent, + this.b - this.b * percent, + this.a + ); + } + + // Brightens a color by a given percent. Returns a color, which can have toString called to get it's rgba() css value. + lighten(percent: number): Color { + // No point in rewriting code we already have. + return this.darken(-percent); + } + + /** + * Creates a color from the CSS hex color notation. + */ + static fromHex(hex: string): Color { + return 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. + */ + static lerp(c1: Color, c2: Color, n: number): Color { + return 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. + */ + static lookup(value: number, colors: Color[] = []): Color { + 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); + } +} + +/* + * MIT License + * https://github.com/omgovich/react-colorful/ + * + * Copyright (c) 2020 Vlad Shilov + * 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. + */ + +const round = ( + number: number, + digits = 0, + base = Math.pow(10, digits) +): number => { + return Math.round(base * number) / base; +}; + +export interface RgbColor { + r: number; + g: number; + b: number; +} + +export interface RgbaColor extends RgbColor { + a: number; +} + +export interface HslColor { + h: number; + s: number; + l: number; +} + +export interface HslaColor extends HslColor { + a: number; +} + +export interface HsvColor { + h: number; + s: number; + v: number; +} + +export interface HsvaColor extends HsvColor { + a: number; +} + +export type ObjectColor = + | RgbColor + | HslColor + | HsvColor + | RgbaColor + | HslaColor + | HsvaColor; + +export type AnyColor = string | ObjectColor; + +/** + * Valid CSS units. + * https://developer.mozilla.org/en-US/docs/Web/CSS/angle + */ +const angleUnits: Record = { + grad: 360 / 400, + turn: 360, + rad: 360 / (Math.PI * 2), +}; + +export const hexToHsva = (hex: string): HsvaColor => rgbaToHsva(hexToRgba(hex)); + +export const hexToRgba = (hex: string): RgbaColor => { + if (hex[0] === '#') hex = hex.substring(1); + + if (hex.length < 6) { + return { + r: parseInt(hex[0] + hex[0], 16), + g: parseInt(hex[1] + hex[1], 16), + b: parseInt(hex[2] + hex[2], 16), + a: hex.length === 4 ? round(parseInt(hex[3] + hex[3], 16) / 255, 2) : 1, + }; + } + + return { + r: parseInt(hex.substring(0, 2), 16), + g: parseInt(hex.substring(2, 4), 16), + b: parseInt(hex.substring(4, 6), 16), + a: hex.length === 8 ? round(parseInt(hex.substring(6, 8), 16) / 255, 2) : 1, + }; +}; + +export const parseHue = (value: string, unit = 'deg'): number => { + return Number(value) * (angleUnits[unit] || 1); +}; + +export const hslaStringToHsva = (hslString: string): HsvaColor => { + const matcher = + /hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i; + const match = matcher.exec(hslString); + + if (!match) return { h: 0, s: 0, v: 0, a: 1 }; + + return hslaToHsva({ + h: parseHue(match[1], match[2]), + s: Number(match[3]), + l: Number(match[4]), + a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1), + }); +}; + +export const hslStringToHsva = hslaStringToHsva; + +export const hslaToHsva = ({ h, s, l, a }: HslaColor): HsvaColor => { + s *= (l < 50 ? l : 100 - l) / 100; + + return { + h: h, + s: s > 0 ? ((2 * s) / (l + s)) * 100 : 0, + v: l + s, + a, + }; +}; + +export const hsvaToHex = (hsva: HsvaColor): string => + rgbaToHex(hsvaToRgba(hsva)); + +export const hsvaToHsla = ({ h, s, v, a }: HsvaColor): HslaColor => { + const hh = ((200 - s) * v) / 100; + + return { + h: round(h), + s: round( + hh > 0 && hh < 200 + ? ((s * v) / 100 / (hh <= 100 ? hh : 200 - hh)) * 100 + : 0 + ), + l: round(hh / 2), + a: round(a, 2), + }; +}; + +export const hsvaToHslString = (hsva: HsvaColor): string => { + const { h, s, l } = hsvaToHsla(hsva); + return `hsl(${h}, ${s}%, ${l}%)`; +}; + +export const hsvaToHsvString = (hsva: HsvaColor): string => { + const { h, s, v } = roundHsva(hsva); + return `hsv(${h}, ${s}%, ${v}%)`; +}; + +export const hsvaToHsvaString = (hsva: HsvaColor): string => { + const { h, s, v, a } = roundHsva(hsva); + return `hsva(${h}, ${s}%, ${v}%, ${a})`; +}; + +export const hsvaToHslaString = (hsva: HsvaColor): string => { + const { h, s, l, a } = hsvaToHsla(hsva); + return `hsla(${h}, ${s}%, ${l}%, ${a})`; +}; + +export const hsvaToRgba = ({ h, s, v, a }: HsvaColor): RgbaColor => { + h = (h / 360) * 6; + s = s / 100; + v = v / 100; + + const hh = Math.floor(h), + b = v * (1 - s), + c = v * (1 - (h - hh) * s), + d = v * (1 - (1 - h + hh) * s), + module = hh % 6; + + return { + r: [v, c, b, b, d, v][module] * 255, + g: [d, v, v, c, b, b][module] * 255, + b: [b, b, d, v, v, c][module] * 255, + a: round(a, 2), + }; +}; + +export const hsvaToRgbString = (hsva: HsvaColor): string => { + const { r, g, b } = hsvaToRgba(hsva); + return `rgb(${round(r)}, ${round(g)}, ${round(b)})`; +}; + +export const hsvaToRgbaString = (hsva: HsvaColor): string => { + const { r, g, b, a } = hsvaToRgba(hsva); + return `rgba(${round(r)}, ${round(g)}, ${round(b)}, ${round(a, 2)})`; +}; + +export const hsvaStringToHsva = (hsvString: string): HsvaColor => { + const matcher = + /hsva?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i; + const match = matcher.exec(hsvString); + + if (!match) return { h: 0, s: 0, v: 0, a: 1 }; + + return roundHsva({ + h: parseHue(match[1], match[2]), + s: Number(match[3]), + v: Number(match[4]), + a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1), + }); +}; + +export const hsvStringToHsva = hsvaStringToHsva; + +export const rgbaStringToHsva = (rgbaString: string): HsvaColor => { + const matcher = + /rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i; + const match = matcher.exec(rgbaString); + + if (!match) return { h: 0, s: 0, v: 0, a: 1 }; + + return rgbaToHsva({ + r: Number(match[1]) / (match[2] ? 100 / 255 : 1), + g: Number(match[3]) / (match[4] ? 100 / 255 : 1), + b: Number(match[5]) / (match[6] ? 100 / 255 : 1), + a: match[7] === undefined ? 1 : Number(match[7]) / (match[8] ? 100 : 1), + }); +}; + +export const rgbStringToHsva = rgbaStringToHsva; + +const format = (number: number) => { + const hex = number.toString(16); + return hex.length < 2 ? '0' + hex : hex; +}; + +export const rgbaToHex = ({ r, g, b, a }: RgbaColor): string => { + const alphaHex = a < 1 ? format(round(a * 255)) : ''; + return ( + '#' + format(round(r)) + format(round(g)) + format(round(b)) + alphaHex + ); +}; + +export const rgbaToHsva = ({ r, g, b, a }: RgbaColor): HsvaColor => { + const max = Math.max(r, g, b); + const delta = max - Math.min(r, g, b); + + // prettier-ignore + const hh = delta + ? max === r + ? (g - b) / delta + : max === g + ? 2 + (b - r) / delta + : 4 + (r - g) / delta + : 0; + + return { + h: 60 * (hh < 0 ? hh + 6 : hh), + s: max ? (delta / max) * 100 : 0, + v: (max / 255) * 100, + a, + }; +}; + +export const roundHsva = (hsva: HsvaColor): HsvaColor => ({ + h: round(hsva.h), + s: round(hsva.s), + v: round(hsva.v), + a: round(hsva.a, 2), +}); + +export const rgbaToRgb = ({ r, g, b }: RgbaColor): RgbColor => ({ r, g, b }); + +export const hslaToHsl = ({ h, s, l }: HslaColor): HslColor => ({ h, s, l }); + +export const hsvaToHsv = (hsva: HsvaColor): HsvColor => { + const { h, s, v } = roundHsva(hsva); + return { h, s, v }; +}; + +const hexMatcher = /^#?([0-9A-F]{3,8})$/i; + +export const validHex = (value: string, alpha?: boolean): boolean => { + const match = hexMatcher.exec(value); + const length = match ? match[1].length : 0; + + return ( + length === 3 || // '#rgb' format + length === 6 || // '#rrggbb' format + (!!alpha && length === 4) || // '#rgba' format + (!!alpha && length === 8) // '#rrggbbaa' format + ); +}; + +// Source for the following luminance and contrast calculation code: https://blog.cristiana.tech/calculating-color-contrast-in-typescript-using-web-content-accessibility-guidelines-wcag +export const luminance = (rgb: RgbColor): number => { + const [r, g, b] = [rgb.r, rgb.g, rgb.b].map((v) => { + v /= 255; + return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4); + }); + return r * 0.2126 + g * 0.7152 + b * 0.0722; +}; + +export const contrast = ( + foreground: RgbColor, + background: RgbColor +): number => { + const foreground_luminance = luminance(foreground); + const background_luminance = luminance(background); + return background_luminance < foreground_luminance + ? (background_luminance + 0.05) / (foreground_luminance + 0.05) + : (foreground_luminance + 0.05) / (background_luminance + 0.05); +}; diff --git a/tgui/packages/tgui-panel/game/constants.js b/tgui/packages/tgui-panel/game/constants.js index f40a529a101a..d692e26c213f 100644 --- a/tgui/packages/tgui-panel/game/constants.js +++ b/tgui/packages/tgui-panel/game/constants.js @@ -4,4 +4,4 @@ * @license MIT */ -export const CONNECTION_LOST_AFTER = 20000; +export const CONNECTION_LOST_AFTER = 45000; diff --git a/tgui/packages/tgui-say/handlers/radioPrefix.tsx b/tgui/packages/tgui-say/handlers/radioPrefix.tsx index bd9f1de5b1ae..974245f8cf55 100644 --- a/tgui/packages/tgui-say/handlers/radioPrefix.tsx +++ b/tgui/packages/tgui-say/handlers/radioPrefix.tsx @@ -14,7 +14,10 @@ export const handleRadioPrefix = function (this: Modal) { if (channel > 1 || !value || value.length < 3) { return; } - const nextPrefix = value?.slice(0, 3)?.toLowerCase(); + const nextPrefix = value + ?.slice(0, 3) + ?.toLowerCase() + ?.replace('.', ':'); if (!RADIO_PREFIXES[nextPrefix] || radioPrefix === nextPrefix) { return; } diff --git a/tgui/packages/tgui/components/Dropdown.tsx b/tgui/packages/tgui/components/Dropdown.tsx index bfb5990e5725..1790e42953e1 100644 --- a/tgui/packages/tgui/components/Dropdown.tsx +++ b/tgui/packages/tgui/components/Dropdown.tsx @@ -80,8 +80,13 @@ export class Dropdown extends Component { open: false, }; - constructor() { - super(); + constructor(props) { + super(props); + + this.state = { + selected: props.selected, + open: props.open, + }; this.handleClick = () => { if (this.state.open) { diff --git a/tgui/packages/tgui/components/Interactive.tsx b/tgui/packages/tgui/components/Interactive.tsx new file mode 100644 index 000000000000..36c21954c516 --- /dev/null +++ b/tgui/packages/tgui/components/Interactive.tsx @@ -0,0 +1,152 @@ +/** + * MIT License + * https://github.com/omgovich/react-colorful/ + * + * Copyright (c) 2020 Vlad Shilov + * 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. + */ + +import { clamp } from 'common/math'; +import { Component, InfernoNode, createRef, RefObject } from 'inferno'; + +export interface Interaction { + left: number; + top: number; +} + +// Finds the proper window object to fix iframe embedding issues +const getParentWindow = (node?: HTMLDivElement | null): Window => { + return (node && node.ownerDocument.defaultView) || self; +}; + +// Returns a relative position of the pointer inside the node's bounding box +const getRelativePosition = ( + node: HTMLDivElement, + event: MouseEvent +): Interaction => { + const rect = node.getBoundingClientRect(); + const pointer = event as MouseEvent; + return { + left: clamp( + (pointer.pageX - (rect.left + getParentWindow(node).pageXOffset)) / + rect.width, + 0, + 1 + ), + top: clamp( + (pointer.pageY - (rect.top + getParentWindow(node).pageYOffset)) / + rect.height, + 0, + 1 + ), + }; +}; + +export interface InteractiveProps { + onMove: (interaction: Interaction) => void; + onKey: (offset: Interaction) => void; + children: InfernoNode[]; + style?: any; +} + +export class Interactive extends Component { + containerRef: RefObject; + props: InteractiveProps; + + constructor(props: InteractiveProps) { + super(); + this.props = props; + this.containerRef = createRef(); + } + + handleMoveStart = (event: MouseEvent) => { + const el = this.containerRef?.current; + if (!el) return; + + // Prevent text selection + event.preventDefault(); + el.focus(); + this.props.onMove(getRelativePosition(el, event)); + this.toggleDocumentEvents(true); + }; + + handleMove = (event: MouseEvent) => { + // Prevent text selection + event.preventDefault(); + + // If user moves the pointer outside of the window or iframe bounds and release it there, + // `mouseup`/`touchend` won't be fired. In order to stop the picker from following the cursor + // after the user has moved the mouse/finger back to the document, we check `event.buttons` + // and `event.touches`. It allows us to detect that the user is just moving his pointer + // without pressing it down + const isDown = event.buttons > 0; + + if (isDown && this.containerRef?.current) { + this.props.onMove(getRelativePosition(this.containerRef.current, event)); + } else { + this.toggleDocumentEvents(false); + } + }; + + handleMoveEnd = () => { + this.toggleDocumentEvents(false); + }; + + handleKeyDown = (event: KeyboardEvent) => { + const keyCode = event.which || event.keyCode; + + // Ignore all keys except arrow ones + if (keyCode < 37 || keyCode > 40) return; + // Do not scroll page by arrow keys when document is focused on the element + event.preventDefault(); + // Send relative offset to the parent component. + // We use codes (37←, 38↑, 39→, 40↓) instead of keys ('ArrowRight', 'ArrowDown', etc) + // to reduce the size of the library + this.props.onKey({ + left: keyCode === 39 ? 0.05 : keyCode === 37 ? -0.05 : 0, + top: keyCode === 40 ? 0.05 : keyCode === 38 ? -0.05 : 0, + }); + }; + + toggleDocumentEvents(state?: boolean) { + const el = this.containerRef?.current; + const parentWindow = getParentWindow(el); + + // Add or remove additional pointer event listeners + const toggleEvent = state + ? parentWindow.addEventListener + : parentWindow.removeEventListener; + toggleEvent('mousemove', this.handleMove); + toggleEvent('mouseup', this.handleMoveEnd); + } + + componentDidMount() { + this.toggleDocumentEvents(true); + } + + componentWillUnmount() { + this.toggleDocumentEvents(false); + } + + render() { + return ( +
+ {this.props.children} +
+ ); + } +} diff --git a/tgui/packages/tgui/components/Pointer.tsx b/tgui/packages/tgui/components/Pointer.tsx new file mode 100644 index 000000000000..409972a7dfce --- /dev/null +++ b/tgui/packages/tgui/components/Pointer.tsx @@ -0,0 +1,46 @@ +/** + * MIT License + * https://github.com/omgovich/react-colorful/ + * + * Copyright (c) 2020 Vlad Shilov + * 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. + */ + +import { classes } from 'common/react'; +import { InfernoNode } from 'inferno'; + +interface PointerProps { + className?: string; + top?: number; + left: number; + color: string; +} + +export const Pointer = ({ + className, + color, + left, + top = 0.5, +}: PointerProps): InfernoNode => { + const nodeClassName = classes(['react-colorful__pointer', className]); + + const style = { + top: `${top * 100}%`, + left: `${left * 100}%`, + }; + + return ( +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/components/index.js b/tgui/packages/tgui/components/index.js index fa613161ea1c..fefd280a590c 100644 --- a/tgui/packages/tgui/components/index.js +++ b/tgui/packages/tgui/components/index.js @@ -23,6 +23,7 @@ export { FitText } from './FitText'; export { Grid } from './Grid'; export { Icon } from './Icon'; export { InfinitePlane } from './InfinitePlane'; +export { Interactive } from './Interactive'; export { Input } from './Input'; export { KeyListener } from './KeyListener'; export { Knob } from './Knob'; @@ -33,6 +34,7 @@ export { Modal } from './Modal'; export { NoticeBox } from './NoticeBox'; export { NumberInput } from './NumberInput'; export { ProgressBar } from './ProgressBar'; +export { Pointer } from './Pointer'; export { Popper } from './Popper'; export { RestrictedInput } from './RestrictedInput'; export { RoundGauge } from './RoundGauge'; diff --git a/tgui/packages/tgui/interfaces/AdminBookViewer.tsx b/tgui/packages/tgui/interfaces/AdminBookViewer.tsx new file mode 100644 index 000000000000..5996b3937d7d --- /dev/null +++ b/tgui/packages/tgui/interfaces/AdminBookViewer.tsx @@ -0,0 +1,25 @@ +import { useBackend } from '../backend'; +import { Window } from '../layouts'; +import { MarkdownRenderer } from './MarkdownViewer'; + +type ViewerData = { + title: string; + content: string; + author: string; + view_raw: boolean; +}; + +export const AdminBookViewer = (_: any, context: any) => { + const { data } = useBackend(context); + return ( + + + {data.view_raw ? ( + data.content + ) : ( + + )} + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/AirAlarm.tsx b/tgui/packages/tgui/interfaces/AirAlarm.tsx index 4bb751795ba6..f2d8130d3ecd 100644 --- a/tgui/packages/tgui/interfaces/AirAlarm.tsx +++ b/tgui/packages/tgui/interfaces/AirAlarm.tsx @@ -43,6 +43,13 @@ type AirAlarmData = { danger: BooleanLike; }[]; thresholdTypeMap: Record; + ac: { + enabled: BooleanLike; + active: BooleanLike; + target: number; + min: number; + max: number; + }; }; export const AirAlarm = (props, context) => { @@ -118,6 +125,17 @@ const AirAlarmStatus = (props, context) => { (data.fireAlarm && 'Fire Alarm') || 'Nominal'} + + {data.ac.enabled + ? data.ac.active + ? 'Active' + : 'Idle' + : 'Disabled'} + {areaFault.areaFaultText} @@ -155,6 +173,10 @@ const AIR_ALARM_ROUTES = { title: 'Scrubber Controls', component: () => AirAlarmControlScrubbers, }, + ac: { + title: 'Air Conditioning Controls', + component: () => AirAlarmAirConditioningControls, + }, modes: { title: 'Operating Mode', component: () => AirAlarmControlModes, @@ -228,6 +250,12 @@ const AirAlarmControlHome = (props, context) => { onClick={() => setScreen('scrubbers')} /> +
- - - - ); -}; - -export const CameraConsoleContent = (props, context) => { - const { act, data } = useBackend(context); - const [searchText, setSearchText] = useLocalState(context, 'searchText', ''); - const { activeCamera } = data; - const cameras = selectCameras(data.cameras, searchText); - return ( - - - setSearchText(value)} - /> - - -
- {cameras.map((camera) => ( - // We're not using the component here because performance - // would be absolutely abysmal (50+ ms for each re-render). -
- act('switch_camera', { - name: camera.name, - }) - }> - {camera.name} -
- ))} -
-
-
- ); -}; diff --git a/tgui/packages/tgui/interfaces/CameraConsole.tsx b/tgui/packages/tgui/interfaces/CameraConsole.tsx new file mode 100644 index 000000000000..e94df880d6dd --- /dev/null +++ b/tgui/packages/tgui/interfaces/CameraConsole.tsx @@ -0,0 +1,214 @@ +import { filter, sortBy } from 'common/collections'; +import { flow } from 'common/fp'; +import { BooleanLike, classes } from 'common/react'; +import { createSearch } from 'common/string'; +import { useBackend, useLocalState } from '../backend'; +import { Button, ByondUi, Input, NoticeBox, Section, Stack } from '../components'; +import { Window } from '../layouts'; + +type Data = { + activeCamera: Camera & { status: BooleanLike }; + cameras: Camera[]; + can_spy: BooleanLike; + mapRef: string; + network: string[]; +}; + +type Camera = { + name: string; + ref: string; +}; + +/** + * Returns previous and next camera names relative to the currently + * active camera. + */ +const prevNextCamera = ( + cameras: Camera[], + activeCamera: Camera & { status: BooleanLike } +) => { + if (!activeCamera || cameras.length < 2) { + return []; + } + + const index = cameras.findIndex((camera) => camera.ref === activeCamera.ref); + + switch (index) { + case -1: // Current camera is not in the list + return [cameras[cameras.length - 1].ref, cameras[0].ref]; + + case 0: // First camera + if (cameras.length === 2) return [cameras[1].ref, cameras[1].ref]; // Only two + + return [cameras[cameras.length - 1].ref, cameras[index + 1].ref]; + + case cameras.length - 1: // Last camera + if (cameras.length === 2) return [cameras[0].ref, cameras[0].ref]; + + return [cameras[index - 1].ref, cameras[0].ref]; + + default: + // Middle camera + return [cameras[index - 1].ref, cameras[index + 1].ref]; + } +}; + +/** + * Camera selector. + * + * Filters cameras, applies search terms and sorts the alphabetically. + */ +const selectCameras = (cameras: Camera[], searchText = ''): Camera[] => { + const testSearch = createSearch(searchText, (camera: Camera) => camera.name); + + return flow([ + filter((camera: Camera) => !!camera.name), + // Optional search term + searchText && filter(testSearch), + // Slightly expensive, but way better than sorting in BYOND + sortBy((camera: Camera) => camera), + ])(cameras); +}; + +export const CameraConsole = (props, context) => { + return ( + + + + + + ); +}; + +export const CameraContent = (props, context) => { + return ( + + + + + + + + + ); +}; + +const CameraSelector = (props, context) => { + const { act, data } = useBackend(context); + const [searchText, setSearchText] = useLocalState(context, 'searchText', ''); + const { activeCamera } = data; + const cameras = selectCameras(data.cameras, searchText); + + return ( + + + setSearchText(value)} + /> + + +
+ {cameras.map((camera) => ( + // We're not using the component here because performance + // would be absolutely abysmal (50+ ms for each re-render). +
+ act('switch_camera', { + camera: camera.ref, + }) + }> + {camera.name} +
+ ))} +
+
+
+ ); +}; + +const CameraControls = (props, context) => { + const { act, data } = useBackend(context); + const { activeCamera, can_spy, mapRef } = data; + const [searchText] = useLocalState(context, 'searchText', ''); + + const cameras = selectCameras(data.cameras, searchText); + + const [prevCamera, nextCamera] = prevNextCamera(cameras, activeCamera); + + return ( +
+ + + + + {activeCamera?.status ? ( + {activeCamera.name} + ) : ( + No input signal + )} + + + + {!!can_spy && ( +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/CellularEmporium.tsx b/tgui/packages/tgui/interfaces/CellularEmporium.tsx index 505339d78ef1..3bf67319181c 100644 --- a/tgui/packages/tgui/interfaces/CellularEmporium.tsx +++ b/tgui/packages/tgui/interfaces/CellularEmporium.tsx @@ -1,26 +1,38 @@ -import { useBackend } from '../backend'; -import { Button, Section, Icon, Stack, LabeledList, Box, NoticeBox } from '../components'; +import { BooleanLike } from '../../common/react'; +import { useBackend, useLocalState } from '../backend'; +import { Button, Section, Icon, Input, Stack, LabeledList, Box, NoticeBox } from '../components'; import { Window } from '../layouts'; +type typePath = string; + type CellularEmporiumContext = { abilities: Ability[]; - can_readapt: boolean; - genetic_points_remaining: number; + can_readapt: BooleanLike; + genetic_points_count: number; + owned_abilities: typePath[]; + absorb_count: number; + dna_count: number; }; type Ability = { name: string; desc: string; - path: string; - dna_cost: number; helptext: string; - owned: boolean; - can_purchase: boolean; + path: typePath; + genetic_point_required: number; // Checks against genetic_points_count + absorbs_required: number; // Checks against absorb_count + dna_required: number; // Checks against dna_count }; export const CellularEmporium = (props, context) => { const { act, data } = useBackend(context); - const { can_readapt, genetic_points_remaining } = data; + const [searchAbilities, setSearchAbilities] = useLocalState( + context, + 'searchAbilities', + '' + ); + + const { can_readapt, genetic_points_count } = data; return ( @@ -31,17 +43,32 @@ export const CellularEmporium = (props, context) => { buttons={ - {genetic_points_remaining && genetic_points_remaining}{' '} + {genetic_points_count && genetic_points_count}{' '} + + + + + + + }> + + + {emotes + .filter( + (emote) => + emote.key && + (searchText.length > 0 + ? emote.key + .toLowerCase() + .includes(searchText.toLowerCase()) || + emote.name.toLowerCase().includes(searchText.toLowerCase()) + : true) && + (filterVisible ? emote.visible : true) && + (filterAudible ? emote.audible : true) && + (filterSound ? emote.sound : true) && + (filterHands ? emote.hands : true) && + (filterUseParams ? emote.use_params : true) + ) + .sort((a, b) => (a.name > b.name ? 1 : -1)) + .map((emote) => ( + + ))} + + + + + ); +}; + +const EmoteIcons = (props, context) => { + const { visible, audible, sound, hands, use_params, margin } = props; + + return ( + + + + + + + + ); +}; + +export const EmotePanel = (props, context) => { + return ( + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Fabrication/MaterialIcon.tsx b/tgui/packages/tgui/interfaces/Fabrication/MaterialIcon.tsx index 9f7eec043bbb..c59a3b8065e8 100644 --- a/tgui/packages/tgui/interfaces/Fabrication/MaterialIcon.tsx +++ b/tgui/packages/tgui/interfaces/Fabrication/MaterialIcon.tsx @@ -47,7 +47,7 @@ const MATERIAL_ICONS: Record = { [17, 'sheet-titanium_2'], [34, 'sheet-titanium_3'], ], - 'bluespace crystal': [[0, 'bluespace_crystal']], + 'bluespace crystal': [[0, 'polycrystal']], 'plastic': [ [0, 'sheet-plastic'], [17, 'sheet-plastic_2'], diff --git a/tgui/packages/tgui/interfaces/HighLuminosityEyesMenu.tsx b/tgui/packages/tgui/interfaces/HighLuminosityEyesMenu.tsx new file mode 100644 index 000000000000..5175cdbdb7f9 --- /dev/null +++ b/tgui/packages/tgui/interfaces/HighLuminosityEyesMenu.tsx @@ -0,0 +1,182 @@ +import { BooleanLike } from '../../common/react'; +import { useBackend } from '../backend'; +import { Button, ColorBox, Input, LabeledList, NumberInput, Section } from '../components'; +import { Window } from '../layouts'; + +type EyeColorData = { + mode: BooleanLike; + hasOwner: BooleanLike; + left: string; + right: string; +}; + +type Data = { + eyeColor: EyeColorData; + lightColor: string; + range: number; +}; + +enum ToUpdate { + LightColor, + LeftEye, + RightEye, +} + +const LightColorDisplay = (props, context) => { + const { act, data } = useBackend(context); + const { lightColor } = data; + return ( + + {' '} + + + + + + + +